尝试通过Eclipse和Java连接MySQL数据库时出现访问被拒绝的错误。

3

我正在尝试连接到mysql数据库,但是我一直得到同样的错误:javax.servlet.ServletException: java.sql.SQLException: Access denied for user 'user'@'localhost' (using password: YES)

我已经尝试了以下解决方案:

  1. 检查了我的用户名和密码。MySQL连接是通过用户名= user1,密码= 123建立的。当我连接到数据库时,我在代码中使用相同的用户名和密码:Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/employee", "user1", "123");
  2. 以以下方式授予user1权限: GRANT ALL PRIVILEGES ON * . * TO 'user1'@'localhost'; FLUSH PRIVILEGES; 顺便说一下,当我尝试与'root'@'localhost'连接时,我也遇到同样的问题。 你有任何想法为什么它仍然不起作用吗?

1
您能否使用SQL客户端和提供的用户名和密码连接到数据库? - nortontgueno
@ngueno 当然,我已经通过MySQL Workbench检查了我的连接,输入用户名= user1和密码= 123。 - arti_lina
如果失败,请尝试不使用“employee”数据库,只使用“localhost:3306”。 - nortontgueno
@ngueno,至少我现在得到了一个新的错误:javax.servlet.ServletException: java.sql.SQLException: 服务器时区值“RTZ 2 (çèìà)”无法识别或表示多个时区。如果您想使用时区支持,则必须通过服务器时区配置属性配置服务器或JDBC驱动程序(通过serverTimezone配置属性)以使用更具体的时区值。这是什么情况? - arti_lina
1
@ngueno,我已经解决了这个问题。你的解决方案以及被标记的答案都适用于我的情况。非常感谢! - arti_lina
显示剩余2条评论
2个回答

0

MySQL JDBC 只能通过 TCP/IP 连接(在 Unix 上,或在 Windows 上通过 TCP/IP 或命名管道连接)。

MySQL JDBC 驱动程序无法使用本地的 Unix 套接字建立连接。

在 Unix 上,localhost 的含义与我们预期的不同。它不是 127.0.0.1 TCP/IP 回环地址的主机名同义词。在 Unix 上,MySQL 用户

'user1'@'localhost'

指定只能通过Unix套接字文件连接的用户;无法通过TCP/IP连接到该用户。


以上解释了为什么MySQL拒绝了JDBC的连接:连接尝试失败是因为没有匹配的用户存在。
要创建一个可以从TCP/IP环回地址连接的MySQL用户,假设MySQL已经启动了--skip-name-resolve并且没有--skip-networking,我们可以将用户指定为:
'user'@'127.0.0.1'

该用户将允许从JDBC进行连接。

(如果启用了MySQL DNS名称解析,则我们需要使用解析为环回地址的主机名;或者我们可以考虑在用户的主机名部分使用通配符“%”)


谢谢,现在我明白了这个错误:javax.servlet.ServletException: java.sql.SQLException: 服务器时区值“RTZ 2 (çèìà)”无法识别或表示多个时区。如果您想使用时区支持,则必须通过服务器或JDBC驱动程序(通过serverTimezone配置属性)配置更具体的时区值。 如何解决这个问题? - arti_lina
我解决了这个问题!现在一切都正确了)非常感谢你的帮助!为了修复新错误,我在MySQL Workbench中执行了以下命令:SET @@global.time_zone = '+00:00';SET @@session.time_zone = '+00:00'; - arti_lina

0

尝试一下这个可能会有帮助:

1)进入mysql终端。2)mysql> use mysql; 3)mysql> select user, host from user; 4)在你的用户旁边,将主机设置为“%”,而不是localhost。

.

现在在连接时,尝试指定服务器的IP地址,而不是本地主机。

希望这能帮到你。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接