【发布时间】:2016-05-09 03:33:48
【问题描述】:
我正在尝试从我的应用程序连接到 mysql db。我遇到了一个奇怪的问题。我尝试搜索所有论坛,但找不到类似的问题。我有一个名为 app 的用户,并被授予从“%”连接的权限,我理解它是从任何 IP 连接。我可以从我的 mysql 工作台(远程机器)连接。但是当我尝试从我的应用程序服务器连接到数据库时,我遇到了以下错误。密码正确,服务器配置正确。我的机器也是一台远程机器,我可以毫无问题地连接。我的应用程序是带有休眠功能的弹簧启动。请对此提供帮助。我是否必须专门为此 IP 授予特权?
Caused by: java.sql.SQLException: Access denied for user 'app'@'10.200.100.100' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1215)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2255)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:795)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:208)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120)
at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
... 67 more
【问题讨论】:
-
最有可能解释它作为不同的用户连接。我建议您检查可能的其他匹配项。 MySQL 有一个特定的顺序来寻找匹配的用户。它可能在到达
'app'@'%'之前匹配用户。我建议您检查其他用户SELECT user, host FROM mysql.user ORDER BY user, host。另外,在 MySQL 中是否禁用了反向 DNS 查找?即--skip-name-resolve -
您是否尝试在连接失败的同一台机器上通过 MySQL CLI 进行连接?
标签: java mysql hibernate spring-boot