目录
问题背景
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at BookManagement.<init>(BookManagement.java:23) at BookManagement.main(BookManagement.java:66)
解决方案
"Access denied for user 'root'@'localhost' (using password: YES)" 错误表示你的Java应用程序尝试使用用户名 'root' 和提供的密码连接到MySQL数据库,但由于身份验证失败,连接被拒绝了。要解决这个问题,你可以采取以下步骤:
确认用户名和密码:首先,确保你提供的用户名和密码是正确的。检查MySQL数据库中 'root' 用户的凭据,包括用户名和密码是否正确。如果你不确定密码,可以在MySQL数据库中重置 'root' 用户的密码。
检查主机:确保你的Java应用程序正在从正确的主机('localhost')连接到MySQL服务器。如果应用程序不是在本地主机上运行,你需要使用正确的主机名或IP地址来建立连接。
检查权限:确保 'root' 用户具有足够的权限来连接到MySQL服务器。你可以在MySQL中使用以下命令为 'root' 用户授予权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
请将 'your_password' 替换为实际的密码。
检查MySQL服务器配置:检查MySQL服务器的配置文件,例如 my.cnf 或 my.ini,确保允许 'root' 用户从 'localhost' 连接,并且密码验证被启用。在配置文件中查找以下行:
bind-address = 127.0.0.1
skip-networking = false
如果需要,确保密码验证被启用:
skip-grant-tables = false
-
如果做了任何更改,请重启MySQL服务器以使其生效。
-
检查防火墙和安全组:如果你的服务器上启用了防火墙或安全组,确保端口3306(默认的MySQL端口)处于打开状态,允许来自本地主机的连接。
-
尝试使用其他用户:为了安全起见,不建议使用 'root' 用户进行应用程序连接。考虑创建一个具有所需权限的新用户,并在应用程序中使用该用户进行连接。
完成这些步骤后,尝试重新运行你的Java应用程序,看看问题是否解决。如果问题仍然存在,请仔细检查日志以获取更多详细信息,以便进一步调试。
上面是通用方法,我遇到的问题,解决方法是这样的:
此错误是因为提供的数据库用户名(在这种情况下是 root
)和密码不正确,或者该用户没有权限连接到指定的数据库。
为了解决这个问题,你应该确保:
- MySQL 服务器正在运行:首先,确保你的 MySQL 服务器正在运行并监听 localhost。
- 使用正确的凭据:确保你使用的用户名和密码是正确的。如果你不确定,你可能需要重置
root
用户的密码或使用其他具有足够权限的用户。 - 权限设置:确保
root
用户在localhost
上有权访问BookManagement
数据库。
如何重置 MySQL root 密码:
如果你需要重置 root
密码,以下是在 Unix/Linux 系统上的基本步骤(在 Windows 上的步骤可能稍有不同):
- 停止 MySQL 服务器。这通常可以通过运行
sudo service mysql stop
来完成。 - 启动 MySQL 服务器,不检查权限。运行以下命令:
sudo mysqld_safe --skip-grant-tables &
- 登录到 MySQL。只需运行
mysql
。 - 设置新密码:
USE mysql; UPDATE user SET password=PASSWORD("YOUR_NEW_PASSWORD") WHERE User='root'; FLUSH PRIVILEGES; exit;
替换
YOUR_NEW_PASSWORD
为你想要的新密码。 - 重新启动 MySQL 服务器:
sudo service mysql restart
-
完成上述步骤后,你应该可以使用新密码登录到 MySQL。
然后,确保在你的 Java 代码中使用正确的密码:
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/BookManagement?useSSL=false&serverTimezone=UTC", "root", "YOUR_NEW_PASSWORD");
替换
YOUR_NEW_PASSWORD
为你设置的新密码。
🌌点击下方个人名片,交流会更方便哦~
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓