当前位置:   article > 正文

亲测有效 Java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘ (using password: YES)解决方法

java.sql.sqlexception: access denied for user


java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 这个异常通常表示在尝试使用 root 用户和提供的密码从本地主机 ( localhost) 连接到MySQL数据库时,认证失败了。以下是对该问题的详细分析、报错原因、解决思路以及解决方法,并附带代码示例。

问题分析

当Java程序尝试通过JDBC连接到MySQL数据库时,它必须提供正确的用户名和密码。如果提供的凭据不正确,或者用户没有从当前主机连接到数据库的权限,就会抛出这个异常。

报错原因

  1. 密码错误:提供的密码与数据库中 root 用户的密码不匹配。
  2. 用户权限问题root 用户可能没有从 localhost 连接的权限,或者权限被撤销了。
  3. MySQL用户表问题:MySQL的 user 表可能损坏或不一致,导致认证失败。

解决思路

  1. 确认密码:首先确保你使用的密码是正确的。
  2. 检查用户权限:检查 root 用户是否有从 localhost 连接的权限。
  3. 重置密码:如果密码丢失或忘记,可以通过MySQL的安全模式重置密码。
  4. 修复用户表:如果怀疑 user 表有问题,可以尝试修复或重新创建它。

解决方法

下滑查看解决方法

1. 确认密码

确保你在Java代码中使用的密码与MySQL数据库root 用户的密码完全一致。

2. 检查用户权限

你可以通过登录MySQL命令行客户端来检查 root 用户的权限:

mysql -u root -p
  • 1

输入密码后,执行以下SQL查询来检查权限:

SELECT host, user FROM mysql.user WHERE user='root';
  • 1

确认 host 列中包含 localhost

3. 重置密码

如果密码丢失或错误,你需要以管理员身份登录MySQL,然后重置 root 用户的密码。这里有一个常见的方法,假设你有权限以无密码方式登录MySQL(例如,通过 sudo 或其他方式):

sudo mysqld_safe --skip-grant-tables &
mysql -u root
  • 1
  • 2

然后,在MySQL命令行中执行以下SQL命令来重置密码:

FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');
  • 1
  • 2

记住替换 '新密码' 为你想要设置的新密码。

4. 修复用户表

如果你怀疑用户表损坏,可以尝试使用 mysql_upgrade 命令或重新创建用户表。但请注意,这通常是高级操作,并且可能导致数据丢失,因此在进行此操作之前,请确保已备份所有重要数据。

5. 在Java代码中使用正确的凭据

一旦你有了正确的密码和确认了用户权限,你可以在Java代码中使用这些凭据来建立连接:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseConnection {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC";
        String user = "root";
        String password = "新密码"; // 使用你刚刚设置的新密码

        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("连接成功!");
            // 使用连接执行操作...
            conn.close(); // 记得关闭连接
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("连接失败:" + e.getMessage());
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

确保替换 数据库名新密码 为实际的数据库名和新密码。如果一切配置正确,代码应该能成功连接到MySQL数据库。

最后,出于安全考虑,强烈建议不要在代码中硬编码数据库密码,而是使用环境变量或配置文件来管理敏感信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/944419
推荐阅读
相关标签
  

闽ICP备14008679号