解决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 为你设置的新密码。


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

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

相关推荐
guodingdingh8 小时前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯10 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育10 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵10 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
想会飞的蒲公英11 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
腻害兔12 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel12 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记12 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
碎光拾影12 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
CCPC不拿奖不改名12 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github