当前位置: 首页 > 知识库问答 >
问题:

SQLException:拒绝用户“whatever”@“localhost”的访问

钱渊
2023-03-14

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

我做了大约3个干净的卸载和安装MySQL,有重启,没有重启,试图通过应用程序登录为root(通过)这不起作用,试图通过应用程序登录为用户没有密码(相同的错误),等等。

此外,在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)

共有3个答案

狄宪
2023-03-14

可能您同时安装了不同版本的mysql,并且在Environment variables中注册了另一个mysql版本。尝试检查是否有可以卸载的内容。然后,将右文件夹中的右mysql添加到环境变量中。

戚永福
2023-03-14

...从. txt文件中读取凭据可能是危险的,以简化的名义从问题中省略这个事实是一个错误。

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

我已经将读取凭证的文件重写为正确的文件,因此我无法找到任何细节,但基本上它包含一些使凭证无效的不可见字符(可能是BOM)。

桂嘉年
2023-03-14

我建议您仔细阅读MySQL手册中关于连接故障排除部分中的每一个建议。

  • “连接到MySQL的疑难解答”

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

  • "连接器/J应用故障排除"

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

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

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

 类似资料:
  • 问题内容: 凭据正确,数据库名称正确,MySQL用户设置正确且具有所有特权,我有“ username’@’%’和’username’@’localhost’的条目,我可以通过命令行连接到该用户正确地,以及通过mysql工作台。换句话说,除了我的Java应用程序无法连接之外,所有内容均应按其应有的方式工作并按应有的方式进行设置。 我做了3次干净的MySQL卸载和安装,没有重启,没有重启,试图以roo

  • 我复制粘贴了第一个数据库的代码,但正如您所看到的,我刚刚用第二个数据库的名称更改了第一个数据库的名称,并且更改了特定表的COLLMNs名称。 有人能帮我这个吗?我想提一下,我已经尝试了我在YT上看到的不同的东西(如在my.ini中添加跳过授予表)

  • 我工作在Spring启动和使用mysql通过jpa,但同时运行的应用程序,我面临的问题 这是申请表。属性文件 pom.xml文件是 课程类别如下

  • 问题内容: 我正在尝试从数据库中获取记录。但我正面临拒绝访问的问题。我尝试了在堆栈溢出中提到的其他解决方案,例如向用户授予特权。 访问数据库的代码: 错误的堆栈跟踪: 在这种情况下可能是什么问题。我尝试创建一个新的数据库,但是也没有用。 问题答案: 问题是授予表根用户的权限。’root’@’%’没有任何权限。.就像我以前用作连接地址一样,因此它给出了拒绝访问错误.. 是IP地址的通配符。所以mys

  • 这是我的代码: 对于dbServername,我尝试过使用localhost、localhost:8080、localhost:3306和127.0.0.1,但只有127.0.0.1和localhost:3306似乎通过了测试,并给出了可能的错误。我在localhost(没有这样的文件或目录*)和localhost:8080(MySQL已经消失)中遇到了不同的错误。 因此,考虑到IP as dbS

  • 在Ubuntu中使用MySQL我做了以下步骤: 我收到一个错误: 拒绝用户“root”@"localhost“的访问(使用密码:YES)