Java SQLException:拒绝用户访问';不管怎样'@';本地主机';
凭据正确,数据库名称正确,MySQL用户设置正确并且拥有所有权限,我有“username”@“%”和“username”@“localhost”的条目,我可以通过命令行以及MySQL workbench正确连接到此用户。换句话说,除了我的java应用程序无法连接之外,一切都正常工作,并被设置为正常状态 我做了大约3次MySQL的干净卸载和安装,有重新启动,没有重新启动,尝试以root身份登录应用程序(带pass),但没有成功,尝试以没有密码的用户身份登录应用程序(相同错误),等等 此外,在localhost上运行的PHP网站使用完全相同的登录名也可以完美地工作 在过去的三天里,我一直在检查、重新检查和尝试所有这些,我浏览了所有相关的SO问题,所有我能找到的博客和文档,所有这些Java SQLException:拒绝用户访问';不管怎样'@';本地主机';,java,mysql,jdbc,Java,Mysql,Jdbc,凭据正确,数据库名称正确,MySQL用户设置正确并且拥有所有权限,我有“username”@“%”和“username”@“localhost”的条目,我可以通过命令行以及MySQL workbench正确连接到此用户。换句话说,除了我的java应用程序无法连接之外,一切都正常工作,并被设置为正常状态 我做了大约3次MySQL的干净卸载和安装,有重新启动,没有重新启动,尝试以root身份登录应用程序(带pass),但没有成功,尝试以没有密码的用户身份登录应用程序(相同错误),等等 此外,在loc
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection("jdbc:mysql://localhost/correctDBname", "correctUsername", "correctPassword");
} catch(ClassNotFoundException | SQLException ex) {
Logger.getLogger(SqlConnection.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
}
MySQL驱动程序名称与项目中NetBeans的“库”部分中显示的名称完全相同:MySQL JDBC驱动程序-MySQL-connector-java-5.1.23-bin.jar
例外情况全文:
java.sql.SQLException: Access denied for user 'strada'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:925)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1704)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1250)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
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:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at eu.storemedia.stradaserver.engine.SqlConnection.<init>(SqlConnection.java:23)
at eu.storemedia.stradaserver.engine.StradaServer.<init>(StradaServer.java:51)
at eu.storemedia.stradaserver.Home.<clinit>(Home.java:31)
java.sql.SQLException:用户'strada'@'localhost'的访问被拒绝(使用密码:是)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:4120)
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:4052)
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:925)
在com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1704)上
在com.mysql.jdbc.MysqlIO.doHandshake上(MysqlIO.java:1250)
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498)
位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:822)
位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
位于java.sql.DriverManager.getConnection(DriverManager.java:664)
位于java.sql.DriverManager.getConnection(DriverManager.java:247)
位于eu.storemedia.stradaserver.engine.SqlConnection.(SqlConnection.java:23)
位于eu.storemedia.stradaserver.engine.stradaserver.(stradaserver.java:51)
位于eu.storemedia.stradaserver.Home(Home.java:31)
可能您同时安装了不同版本的mysql,并且在Environment variables中注册了另一个mysql版本。尝试检查是否有可以卸载的内容。然后,将右文件夹中的右mysql添加到环境变量中。我建议您仔细阅读mysql手册中关于连接故障排除部分的每一条建议
上面说。。。实际上。。。您可能没有检查JDBC驱动程序正在使用的实际连接方法。这可能会对身份验证产生影响。…事实证明,从.txt文件中读取凭据可能是危险的,以简化身份验证的名义从问题中忽略这一事实是错误的 如果我使用硬编码凭据,则登录有效。如果使用从错误创建的.txt文件读取的凭据,则会发生错误。如果我使用从正确创建的.txt文件(没有BOM的utf-8)读取的凭据,则登录有效。
我已将读取凭据的文件重写为正确的,因此我无法找到任何细节,但基本上它包含一些使凭据无效的不可见字符(可能是BOM)。用户“strada”的localhost(使用密码:YES)的访问被拒绝 例外情况解释如下:
至少在您的问题中添加您得到的例外情况您使用的是哪个版本的MySql驱动程序?@Robin抱歉,您添加到的是正确的OP@RobertoLinares如果没有指定驱动程序,则驱动程序默认为端口3306。考虑升级驱动程序,5.1.23来自2013,最新版本是5.1.41,例如您可能在5.1.27中修复了错误。“当加扰中存在空字节时,JDBC身份验证失败,因为com.mysql.JDBC.MysqlIO.doHandshake在读取加扰的前八个字节时只读取到第一个空字节。(错误16723048,错误62469)”虽然这段代码片段是受欢迎的,可能会提供一些帮助,但它将说明这是如何以及为什么解决问题的。请记住,您是在将来为读者回答问题,而不仅仅是现在提问的人!请您的答案添加解释,并
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/correctDBname", "correctUsername", "correctPassword");