Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLException:拒绝用户访问';不管怎样'@';本地主机';_Java_Mysql_Jdbc - Fatal编程技术网

Java SQLException:拒绝用户访问';不管怎样'@';本地主机';

Java SQLException:拒绝用户访问';不管怎样'@';本地主机';,java,mysql,jdbc,Java,Mysql,Jdbc,凭据正确,数据库名称正确,MySQL用户设置正确并且拥有所有权限,我有“username”@“%”和“username”@“localhost”的条目,我可以通过命令行以及MySQL workbench正确连接到此用户。换句话说,除了我的java应用程序无法连接之外,一切都正常工作,并被设置为正常状态 我做了大约3次MySQL的干净卸载和安装,有重新启动,没有重新启动,尝试以root身份登录应用程序(带pass),但没有成功,尝试以没有密码的用户身份登录应用程序(相同错误),等等 此外,在loc

凭据正确,数据库名称正确,MySQL用户设置正确并且拥有所有权限,我有“username”@“%”和“username”@“localhost”的条目,我可以通过命令行以及MySQL workbench正确连接到此用户。换句话说,除了我的java应用程序无法连接之外,一切都正常工作,并被设置为正常状态

我做了大约3次MySQL的干净卸载和安装,有重新启动,没有重新启动,尝试以root身份登录应用程序(带pass),但没有成功,尝试以没有密码的用户身份登录应用程序(相同错误),等等

此外,在localhost上运行的PHP网站使用完全相同的登录名也可以完美地工作

在过去的三天里,我一直在检查、重新检查和尝试所有这些,我浏览了所有相关的SO问题,所有我能找到的博客和文档,所有这些

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手册中关于连接故障排除部分的每一条建议

此外,请检查连接器/J故障排除页面:

后一页包括以下有用的提示:

注意:除非您添加“主机”标志,并对主机使用localhost以外的东西,否则使用mysql命令行客户端测试连接将无法工作。如果使用特殊主机名localhost,mysql命令行客户端将使用Unix域套接字如果要测试与本地主机的连接,请改用127.0.0.1作为主机名。


上面说。。。实际上。。。您可能没有检查JDBC驱动程序正在使用的实际连接方法。这可能会对身份验证产生影响。

…事实证明,从.txt文件中读取凭据可能是危险的,以简化身份验证的名义从问题中忽略这一事实是错误的

如果我使用硬编码凭据,则登录有效。如果使用从错误创建的.txt文件读取的凭据,则会发生错误。如果我使用从正确创建的.txt文件(没有BOM的utf-8)读取的凭据,则登录有效。


我已将读取凭据的文件重写为正确的,因此我无法找到任何细节,但基本上它包含一些使凭据无效的不可见字符(可能是BOM)。用户“strada”的localhost(使用密码:YES)的访问被拒绝

例外情况解释如下:

  • “strada”用户没有足够的权限在DB中执行操作
  • “使用密码:是”表示-为用户“strada”提供的密码是正确的
  • 修复:

  • 以root用户身份登录数据库,向用户“strada”提供DBA(数据库管理员)权限
  • 使用正确的JDBC连接字符串重新连接
    至少在您的问题中添加您得到的例外情况您使用的是哪个版本的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");