最近重新格式化了硬盘,我无法使本地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)
Run Code Online (Sandbox Code Playgroud)
采取的步骤:
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
Run Code Online (Sandbox Code Playgroud)我确保协和用户具有权限-不仅来自本地主机,而且还可以在任何地方:
GRANT ALL ON concorde.* TO 'concorde'@'%';
FLUSH PRIVELEDGES;
Run Code Online (Sandbox Code Playgroud)我想念什么?
除此之外,我可以采取哪些步骤来解决这里发生的事情?我可以检查任何日志吗?
根据要求,这是我正在使用的代码。
但是,在重新格式化硬盘之前,此代码可以正常工作,因此我怀疑问题是否出在其中。
该应用程序在Spring容器中运行,并且在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>
Run Code Online (Sandbox Code Playgroud)
并且,这是定义的属性:
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
database.name=concorde
database.username=concorde
database.password=password
database.host=localhost
database.port=3306
Run Code Online (Sandbox Code Playgroud)
另外,这是关于权限的查询的(摘要)输出:
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 |
+----------------------------------------+---------------+-------------------------+--------------+
Run Code Online (Sandbox Code Playgroud)
注意-这是通过使用登录来运行的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 |
Run Code Online (Sandbox Code Playgroud)
有点尴尬的是,答案是密码是从外部文件读取的。
其他人检查了该文件,并在提交该文件时,一些尾随空白字符被附加到密码中。当 spring 读取属性文件时,这些似乎没有被修剪(我猜是合理的)。
然而,这就是导致问题的原因。真正的密码错误。
| 归档时间: |
|
| 查看次数: |
13569 次 |
| 最近记录: |