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

2023-09-13 19:49:17

目录

问题背景

解决方案

如何重置 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 为你设置的新密码。


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

更多推荐

vue入门-->前后端分离&vue简介,vue入门,vue生命周期

前后端分离&vue简介vue入门vue生命周期1.前后端分离&vue简介什么是前后端分离?前后端分离,是开发模式上的前后端分离。当然还有项目架构方面的前后端分离,也就是在考虑请求并发,服务器性能,处理请求的效率等因素,从而进行前后端分离,对于初学者的理解来说不是那么友好,因此我们只讨论开发模式上的分离。先下定义:前后端

多位数按键操作(闪烁)数码管显示

/*-----------------------------------------------内容:按键加减数字,多个数码管显示------------------------------------------------*/#include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能

Postman 的使用教程(详细)

Postman使用教程1.是什么Postman是一个接口测试工具软件,可以帮助开发人员管理测试接口。官网:https://www.getpostman.com/2.安装建议通过官网下载安装,不要去那些乱七八糟的下载平台,或者留言获取官网下载地址:https://www.getpostman.com/downloads/

flutter项目中常用第三方模块

flutter项目中常用第三方模块持续更新中序言关于第三方模块安装flutter_native_splash使用方式模块配置flutter_localizations模块配置使用方式get_storage模块配置使用方式get模块配置使用方式持续更新中序言本章介绍项目中常用第三方模块,方便快速构建项目关于第三方模块安装

JS获取经纬度, 并根据经纬度得到城市信息

在JavaScript中,获取经纬度通常需要使用定位服务,比如HTML5的GeolocationAPI。然而拿到坐标后,将经纬度转换为城市信息,则需要使用逆地理编码服务接口,比如百度或者高德的API,但是他们收费都很高,我们可以使用一些便宜的接口,效果一样的。以下是一个简单的示例:一、获取经纬度首先,你需要使用Geol

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(六)

目录前言总体设计系统整体结构图系统流程图运行环境模块实现1.模型训练1)数据集分析2)数据预处理3)模型创建4)模型训练5)获取特征矩阵2.后端Django3.前端微信小程序1)小程序全局配置文件2)推荐电影页面3)个人信息界面以及用户登录记录页面相关其它博客工程源代码下载其它资料下载前言本项目专注于MovieLens

【多思路附源码持续更新】2023年华为杯(中国研究生数学建模)竞赛C题

赛题若官网拥挤,数据集和赛题下载地址如下:https://download.csdn.net/download/weixin_47723732/88364777历届优秀论文下载地址,可以做参考文章https://download.csdn.net/download/weixin_47723732/88365222论文万

Stability AI发布基于稳定扩散的音频生成模型Stable Audio

近日StabilityAI推出了一款名为StableAudio的尖端生成模型,该模型可以根据用户提供的文本提示来创建音乐。在NVIDIAA100GPU上StableAudio可以在一秒钟内以44.1kHz的采样率产生95秒的立体声音频,与原始录音相比,该模型处理时间的大幅减少归因于它对压缩音频潜在表示的有效处理。架构自

什么是 Sepolia 测试网以及如何从 Faucet 获取 Sepolia ETH

如何通过水龙头领取Sepolia测试网ETH代币Sepolia测试网需要SepoliaETH代币来测试即将推出的dApp,然后再在以太坊主网上线。您可以从Alchemy、QuickNode和Infura水龙头领取Sepolia测试网ETH。要点您可以从官方水龙头和其他一些独立水龙头获取Sepolia测试网络的测试以太坊

插槽指的是什么?插槽的基础用法体验

什么是插槽插槽(Slot)是vue为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。<template><p>这是MyCom1组件的第1个p标签</p><!--通过slot标签,为用户预留内容占位符(插槽)--><slot></slot><p>这是MyCom1组件最后一个p标

基础算法--位运算

位运算理解:n>>k:代表n右移k位比如000011>>1=000001前面会补零(所以第几位是从0开始计算)n&1:表示最后一位是否为1比如:n=3=0011而1=0001则3&1=0011&0001为0001可以用来判断最后一位是否为1lowbit操作,树状数组的基本操作:lowbit(x)作用是返回x的最后一位1

热文推荐