解决Java应用程序中的SQLException:Access denied for user ‘root‘@‘localhost‘ 错误

目录

问题背景

解决方案

[如何重置 MySQL root 密码:](#如何重置 MySQL root 密码:)


问题背景

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
  1. 如果做了任何更改,请重启MySQL服务器以使其生效。

  2. 检查防火墙和安全组:如果你的服务器上启用了防火墙或安全组,确保端口3306(默认的MySQL端口)处于打开状态,允许来自本地主机的连接。

  3. 尝试使用其他用户:为了安全起见,不建议使用 'root' 用户进行应用程序连接。考虑创建一个具有所需权限的新用户,并在应用程序中使用该用户进行连接。

完成这些步骤后,尝试重新运行你的Java应用程序,看看问题是否解决。如果问题仍然存在,请仔细检查日志以获取更多详细信息,以便进一步调试。


上面是通用方法,我遇到的问题,解决方法是这样的:

此错误是因为提供的数据库用户名(在这种情况下是 root)和密码不正确,或者该用户没有权限连接到指定的数据库。

为了解决这个问题,你应该确保:

  1. MySQL 服务器正在运行:首先,确保你的 MySQL 服务器正在运行并监听 localhost。
  2. 使用正确的凭据 :确保你使用的用户名和密码是正确的。如果你不确定,你可能需要重置 root 用户的密码或使用其他具有足够权限的用户。
  3. 权限设置 :确保 root 用户在 localhost 上有权访问 BookManagement 数据库。

如何重置 MySQL root 密码:

如果你需要重置 root 密码,以下是在 Unix/Linux 系统上的基本步骤(在 Windows 上的步骤可能稍有不同):

  1. 停止 MySQL 服务器。这通常可以通过运行 sudo service mysql stop 来完成。

  2. 启动 MySQL 服务器,不检查权限。运行以下命令:sudo mysqld_safe --skip-grant-tables &

  3. 登录到 MySQL。只需运行 mysql

  4. 设置新密码:

    USE mysql;
    UPDATE user SET password=PASSWORD("YOUR_NEW_PASSWORD") WHERE User='root';
    FLUSH PRIVILEGES;
    exit;
    

    替换 YOUR_NEW_PASSWORD 为你想要的新密码。

  5. 重新启动 MySQL 服务器:sudo service mysql restart

  6. 完成上述步骤后,你应该可以使用新密码登录到 MySQL。

    然后,确保在你的 Java 代码中使用正确的密码:

    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/BookManagement?useSSL=false&serverTimezone=UTC", "root", "YOUR_NEW_PASSWORD");
    

    替换 YOUR_NEW_PASSWORD 为你设置的新密码。


🌌点击下方个人名片,交流会更方便哦~

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

相关推荐
The_Ticker几秒前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
程序猿阿伟几秒前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟18 分钟前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
大数据编程之光23 分钟前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
初九之潜龙勿用23 分钟前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
B站计算机毕业设计超人24 分钟前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
爪哇学长36 分钟前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法
Dola_Pan40 分钟前
C语言:数组转换指针的时机
c语言·开发语言·算法
ExiFengs40 分钟前
实际项目Java1.8流处理, Optional常见用法
java·开发语言·spring
paj12345678942 分钟前
JDK1.8新增特性
java·开发语言