MySQL:用户拒绝访问...使用密码:是

时间:2012-02-16 21:30:26

标签: java mysql

最近重新格式化了我的硬盘驱动器,我无法使本地Java / Tomcat / MySQL堆栈正常工作。

这是一个干净的MySQL安装,在Mac OSX 10.7.3(Lion)上运行。

我得到的错误是当我的tomcat实例启动并尝试连接时:

SEVERE: Servlet /concorde-web threw load() exception
java.sql.SQLException: Access denied for user 'concorde'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)

采取的步骤:

  • 我按照herehere
  • 所述设置了concorde@localhost的密码
  • 我可以使用相同的凭据从控制台进行连接。以下所有工作:

    mysql -u concorde -h localhost -p
    mysql -u concorde -p
    mysql -u concorde -h localhost -D concorde -p
    // the app is trying to connect as user concorde to db concorde
    
  • 我确保协调用户拥有权利 - 不仅来自localhost,而且还有任何地方:

    GRANT ALL ON concorde.* TO 'concorde'@'%';
    FLUSH PRIVELEDGES;
    

我错过了什么?

除此之外,我可以采取哪些措施来弄清楚这里发生了什么?有没有我可以检查的日志?

修改

根据要求,这是我正在使用的代码。

但是,在重新格式化我的硬盘驱动器之前,这段代码运行良好,所以我怀疑问题在于它。

该应用程序在一个弹簧容器中运行,并且在Spring的启动期间,事情已经结束了。

以下是相关的bean声明:

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="spring-jpa" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="false" />
            <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
        </bean>
    </property>
</bean>


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url"
        value="jdbc:mysql://${database.host}:${database.port}/${database.name}" />
    <property name="username" value="${database.username}" />
    <property name="password" value="${database.password}" />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="50" />
</bean>

并且,以下是已定义的属性:

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
database.name=concorde
database.username=concorde
database.password=password  
database.host=localhost
database.port=3306

此外,还有关于权限的查询的(删节)输出:

mysql> select * from information_schema.user_privileges;

| 'concorde'@'localhost'                 | def           | USAGE                   | NO           |
| ''@'localhost'                         | def           | USAGE                   | NO           |
| ''@'Marty-Pitts-MacBook-Pro.local'     | def           | USAGE                   | NO           |
| 'concorde'@'%'                         | def           | USAGE                   | NO           |
+----------------------------------------+---------------+-------------------------+--------------+

注意 - 这是通过使用root登录来运行的。

我怀疑我的用户在NO显示了一条线索,但我不确定如何解释这些数据。

mysql> select * from information_schema.SCHEMA_PRIVILEGES;
+------------------------+---------------+--------------+-------------------------+--------------+
| GRANTEE                | TABLE_CATALOG | TABLE_SCHEMA | PRIVILEGE_TYPE          | IS_GRANTABLE |
+------------------------+---------------+--------------+-------------------------+--------------+
| 'concorde'@'localhost' | def           | concorde     | SELECT                  | YES          |
| 'concorde'@'localhost' | def           | concorde     | INSERT                  | YES          |
| 'concorde'@'localhost' | def           | concorde     | UPDATE                  | YES          |
| 'concorde'@'localhost' | def           | concorde     | DELETE                  | YES          |
| 'concorde'@'localhost' | def           | concorde     | CREATE                  | YES          |
| 'concorde'@'localhost' | def           | concorde     | DROP                    | YES          |
| 'concorde'@'localhost' | def           | concorde     | REFERENCES              | YES          |
| 'concorde'@'localhost' | def           | concorde     | INDEX                   | YES          |
| 'concorde'@'localhost' | def           | concorde     | ALTER                   | YES          |
| 'concorde'@'localhost' | def           | concorde     | CREATE TEMPORARY TABLES | YES          |
| 'concorde'@'localhost' | def           | concorde     | LOCK TABLES             | YES          |
| 'concorde'@'localhost' | def           | concorde     | EXECUTE                 | YES          |
| 'concorde'@'localhost' | def           | concorde     | CREATE VIEW             | YES          |
| 'concorde'@'localhost' | def           | concorde     | SHOW VIEW               | YES          |
| 'concorde'@'localhost' | def           | concorde     | CREATE ROUTINE          | YES          |
| 'concorde'@'localhost' | def           | concorde     | ALTER ROUTINE           | YES          |
| 'concorde'@'localhost' | def           | concorde     | EVENT                   | YES          |
| 'concorde'@'localhost' | def           | concorde     | TRIGGER                 | YES          |
| 'concorde'@'%'         | def           | concorde     | SELECT                  | NO           |
| 'concorde'@'%'         | def           | concorde     | INSERT                  | NO           |
| 'concorde'@'%'         | def           | concorde     | UPDATE                  | NO           |
| 'concorde'@'%'         | def           | concorde     | DELETE                  | NO           |
| 'concorde'@'%'         | def           | concorde     | CREATE                  | NO           |
| 'concorde'@'%'         | def           | concorde     | DROP                    | NO           |
| 'concorde'@'%'         | def           | concorde     | REFERENCES              | NO           |
| 'concorde'@'%'         | def           | concorde     | INDEX                   | NO           |
| 'concorde'@'%'         | def           | concorde     | ALTER                   | NO           |
| 'concorde'@'%'         | def           | concorde     | CREATE TEMPORARY TABLES | NO           |
| 'concorde'@'%'         | def           | concorde     | LOCK TABLES             | NO           |
| 'concorde'@'%'         | def           | concorde     | EXECUTE                 | NO           |
| 'concorde'@'%'         | def           | concorde     | CREATE VIEW             | NO           |
| 'concorde'@'%'         | def           | concorde     | SHOW VIEW               | NO           |
| 'concorde'@'%'         | def           | concorde     | CREATE ROUTINE          | NO           |
| 'concorde'@'%'         | def           | concorde     | ALTER ROUTINE           | NO           |
| 'concorde'@'%'         | def           | concorde     | EVENT                   | NO           |
| 'concorde'@'%'         | def           | concorde     | TRIGGER                 | NO           |

2 个答案:

答案 0 :(得分:3)

由于您似乎可以使用命令行中的预期凭据登录,因此我怀疑您的属性是否正确地替换为“dataSource”bean。

尝试暂时硬编码dataSource bean的所有参数。 如果可行,则表示您的属性未设置。

答案 1 :(得分:1)

有点尴尬,答案结果是从外部文件读入密码。

其他人签出了该文件,并在提交时,一些尾随的空白字符被附加到密码中。当spring读取属性文件时,似乎没有修剪它们(合理的,我猜)。

然而,这是造成这个问题的原因。一个真正错误的密码。