java.sql.SQLException:用户'root'@'localhost'的访问被拒绝(使用密码:是)

Posted

技术标签:

【中文标题】java.sql.SQLException:用户\'root\'@\'localhost\'的访问被拒绝(使用密码:是)【英文标题】:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)java.sql.SQLException:用户'root'@'localhost'的访问被拒绝(使用密码:是) 【发布时间】:2012-08-08 23:24:15 【问题描述】:

以下代码:

Class.forName("com.mysql.jdbc.Driver");
Connection m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root");

getConnection() 上抛出此异常:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2397)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at db.Database.<init>(Database.java:91)
    at db.Main.main(Main.java:10)

这是怎么引起的,我该如何解决?

编辑:

    public static void main(String[] args) throws ClassNotFoundException, ServletException, SQLException 
    

        try
        
            Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
            Statement   s = (Statement) conn.createStatement();
            int result = s.executeUpdate("CREATE DATABASE databasename");
        


        catch ( Exception e)
        
            e.printStackTrace();
        

生产:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2397)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at db.Main.main(Main.java:19)

【问题讨论】:

您可以使用 SqlYog 或 phpMyAdmin 等 mysql GUI 客户端进行连接吗? @ftom2:是的,我可以成功访问phpmyadmin 您确定所提供的用户名密码正确吗?在我看来,没有像 root 这样的用户 :( 虽然不确定,但你不必像 Connection con = DriverManager.getConnection("jdbc:mysql://localhost;database=mywebsitedb;user=sa;password=thatstrue;"); 那样提供 Database Name @GagandeepBali:再想一想:如果登录错误,那么 OP 将如何通过 phpmyadmin 访问它? 您需要确定两件事 - 您是否是有效用户,您是否有执行该操作的权限(特权)。权限采用来自指定主机的特定权限的形式。在介绍任何 Java 之前,可以回答这两个问题。就个人而言,我会使用命令行以用户指定的方式连接到我的 sql,例如'mysql -uroot -prootpassword',然后执行命令'create database mydb'。如果这可行,您可以删除数据库并转到您的 Java 代码。 【参考方案1】:

试试这样......

public static Connection getConnection() throws SQLException

    String driver = "com.mysql.jdbc.Driver";
    String url    = "jdbc:mysql://localhost:3306/test";
    String username = "root";
    String password = "vicky";            // Change it to your Password
    System.setProperty(driver,"");

    return DriverManager.getConnection(url,username,password);

【讨论】:

为什么它会解决具体问题?你没有以任何方式解释原因。【参考方案2】:

您应该指定要连接的数据库:

jdbc:mysql://localhost:3306/mydb

【讨论】:

【参考方案3】:

当您从头开始创建数据库时,您可以使用:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename");
int result = ps.executeUpdate();

这是identical scenario。

【讨论】:

如果我根本没有任何数据库?我想使用 java 代码创建数据库,而不是在 phpmyadmin 中手动创建,那么 databaseName 不相关? 我正在开发我的一个应用程序,代码和数据库之间的连接很好。我突然开始收到此错误,不知道为什么以及该怎么做。【参考方案4】:

这可以帮助你:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;

使用命令行或一些 GUI 工具执行它。

不要忘记用真实密码替换%password%

【讨论】:

@evg 我已经成功执行了这个查询,但仍然没有摆脱这个错误 @evg 上述解决方案是否也适用于以下解决方案。这里而不是 localhost,IP 地址如下所示 java.sql.SQLException: Access denied for user ''@'1.1.22.85' (using password: YES)。 如果有人在应用此解决方案后遇到访问被拒绝问题,那么您可以应用link 解决方案,让生活更轻松。谢谢【参考方案5】:

我遇到了同样的问题。新增mysql服务端口号(3307),解决问题。

conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/?" + "user=root&password=password");

【讨论】:

【参考方案6】:

我遇到了类似的问题,但不同之处在于:我没有从localhost 执行我的JavaApp,而是从远程PC 执行的。所以我得到了类似java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES) 要解决这个问题,您只需登录 phpMyAdmin,转到Users,单击add user 并输入您要执行JavaApp 的主机(或选择Any Host

【讨论】:

谢谢!那是我的问题!【参考方案7】:

你可以用这个

   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost:3306/YOUR_DB_NAME";


   static final String USER = "root";
   static final String PASS = "YOUR_ROOT_PASSWORD"; 

  Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);

您必须提供正确的 root 密码。

【讨论】:

【参考方案8】:

虽然这可能不是您的问题的原因,但如果有两个 MySQL 服务在同一个端口上运行,您将收到相同的错误。您可以通过查看任务管理器的服务选项卡中的服务列表来检查 Windows。

【讨论】:

这是评论,不是答案。【参考方案9】:

我遇到了同样的问题

"java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)". Problem was "WRONG PASSWORD". 

将查询原样复制并粘贴到 shell 中,以检查它是否提供所需的输出。小错误会消耗更多时间。

【讨论】:

我遇到了同样的问题。我在 application.properties 中指定的密码有误。它应该与您的本地数据库密码相同。【参考方案10】:

这个异常也是由于mysql db和你的pom.xml/jar的版本不匹配引起的。

确保您的 pom.xml/jar 版本高于您的 mysql db 版本。 因为较高版本与较低版本兼容,但反过来则不然。

java项目的解决方案

用合适的版本替换 Jar。

基于maven的解决方案

更改 pom.xml 中的依赖版本

spring boot 解决方案 - 通过添加覆盖 Spring Boot 依赖项 5.1.5.Final

【讨论】:

【参考方案11】:

我必须更改我的 SQL 设置(在我的主机中,在我的情况下是 Dreamhost)以允许用户名从其他主机访问数据库,而不仅仅是 Dreamhost,因为我正在从我的计算机上的 IDE 运行程序。我现在通过在允许的主机列表中添加 % 来做到这一点。现在可以了!

【讨论】:

我应该补充一点,这类似于#munchkins 方法,但来自 SQL 控制面板端。【参考方案12】:

我遇到了这个错误。问题是我输入了错误的数据库名称。

【讨论】:

【参考方案13】:

这似乎主要发生在 MySQL 用户名和密码不正确时。检查您的 MySQL 用户名和密码。

【讨论】:

【参考方案14】:

这是特定于 Ubuntu 18.04 LTS 和 MySQL 5.x 关注此link 从这里开始关注一切:

sudo mysql_secure_installation

sudo mysql

登录 MySQL 后,在 MySQL 提示符下执行以下命令:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

现在验证表是否有 root 的密码

SELECT user,authentication_string,plugin,host FROM mysql.user;

这解决了我的问题,现在我可以登录了。

【讨论】:

"现在验证该表是否有 root 的密码" - 如果没有怎么办? ;)【参考方案15】:

如果您使用 java 从本地计算机连接远程 mysql 服务器,请参阅以下步骤。 错误 : "java.sql.SQLException: 用户 'xxxxx'@'101.123.163.141' 的访问被拒绝(使用密码:YES)"

远程访问可能是 cpanel 或其他人授予您本地 IP 地址的远程访问权限。

在上面的错误信息中:“101.123.163.141”是我的本地机器ip。因此,首先我们必须在 Cpanel-> Remote MySQL® 中提供远程访问权限。然后运行您的应用程序进行连接。

Class.forName("com.mysql.jdbc.Driver");  
Connection con=DriverManager.getConnection(  
    "jdbc:mysql://www.xyz.com/abc","def","ghi");  
//here abc is database name, def is username and ghi        
Statement stmt=con.createStatement();  
ResultSet rs=stmt.executeQuery("select * from employee");  
    while(rs.next())  
        System.out.println(rs.getInt(1)+" "+rs.getString(2)+"  
                          "+rs.getString(3));  
con.close();    

希望它能解决您的问题。

谢谢

【讨论】:

【参考方案16】:

声明顺序:

驱动程序 连接字符串 用户名 密码

如果我们按顺序声明

连接字符串 用户名 密码 驱动程序

应用程序将失败

【讨论】:

【参考方案17】:

我也有这个问题,这个解决了。

改变:

Sring url = "jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;user=root&amp;password=password";

设置:

"serverTimezone=UTC""Unified standard world time""useUnicode=true&amp;characterEncoding=UTF-8""Solve Chinese garbled"

虽然我的数据库没有中文单词。但它正在工作。 参考来自https://www.cnblogs.com/EasonJim/p/6906713.html

【讨论】:

请格式化您的代码,如果可能,请不要在此处提供指向外部页面的链接。将所有内容直接总结到您的帖子中。谢谢。【参考方案18】:
    使用正确的 jar(正确的版本) 授予 root 用户独立于主机的访问权限或创建用户

【讨论】:

【参考方案19】:

如果您使用的是MySql工作台,请进入工作台主页,右键单击您的数据库,复制JDBC连接字符串,并将其粘贴到Java程序中。

【讨论】:

【参考方案20】:

对我来说,解决方案的工作原理是将 url 格式更改为: con=DriverManager.getConnection("jdbc:mysql://localhost/w3schools?user=###&password=###"); 确保将正确的 jar 添加到类路径并使用驱动程序 Class.forName("com.mysql.jdbc.Driver");

【讨论】:

【参考方案21】:

我正在使用 Spring Boot 2.2.6(Windows) 并在尝试运行应用程序时遇到了同样的问题: java.sql.SQLException: 用户 'root'@'localhost' 的访问被拒绝(使用密码:YES)

什么解决了我的问题:

    创建一个新用户(从 MySQL 工作台或您可能正在使用的类似 GUI) 也从 GUI 授予 DBA 权限(勾选 DBA 复选框) 运行 Spring Boot 应用程序。

或按照@evg 解决方案在 Linux 环境中从命令行授予权限。

【讨论】:

我正在使用 Spring Boot 2.6.2(Windows) 并在尝试您的解决方案但无法解决我的问题时遇到同样的问题:【参考方案22】:

这为我解决了问题。

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

GRANT ALL PRIVILEGES ON *.cfe TO 'root'@'%' IDENTIFIED BY 'password';

FLUSH PRIVILEGES;

【讨论】:

【参考方案23】:

我也遇到了同样的问题,我的连接字符串有效,用户名和密码也有效,即使用户有足够的权限访问数据库。

我通过删除 MySQL 创建的临时文件夹解决了这个问题(请在删除任何文件夹之前进行备份,以防万一它不起作用,您可以重新放置该文件)。

Windows 中 MySQL 的临时文件和连接文件的默认文件夹位置是:

C:\ProgramData\MySQL

我已删除(已备份)以下文件夹:

C:\ProgramData\MySQL\MySQL 服务器\Data\sys

注意:在删除任何项目之前,请确保 MySQL 服务未启动,否则将不允许删除任何文件

它对我有用。

【讨论】:

【参考方案24】:

我的application.properties 看起来像这样

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb

spring.datasource.username=root

spring.datasource.password=root

唯一对我有用的是 maven clean 然后 maven install。

【讨论】:

【参考方案25】:

我在运行springboot项目时,application.yml配置是这样的:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/lof?serverTimezone=GMT
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

请注意,密码周围没有引号。我可以在我的 windows 系统中运行这个项目。

但是当我尝试部署到服务器时,我遇到了问题,我通过将 application.yml 更改为:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/lof?serverTimezone=GMT
    username: root
    password: "root"
    driver-class-name: com.mysql.cj.jdbc.Driver

【讨论】:

【参考方案26】:

在以下位置添加端口号(类似于 3306):

Connection c = DriverManager.getConnection("jdbc:mysql://localhost:urport","root","root");

【讨论】:

【参考方案27】:

执行以下语句后使用相同的密码对我来说工作正常:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

【讨论】:

【参考方案28】:
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=
spring.datasource.url=jdbc:mysql://localhost:3306/DATABASE_NAME? useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

转到您的 phpmyadmin 数据库

创建一个名为 DATABASE_NAME 的数据库并转到权限并检查数据库中具有权限的用户并使用它们,默认为“root”

【讨论】:

以上是关于java.sql.SQLException:用户'root'@'localhost'的访问被拒绝(使用密码:是)的主要内容,如果未能解决你的问题,请参考以下文章

“java.sql.SQLException:用户'root'@'localhost'的访问被拒绝(使用密码:YES)”

运行:java.sql.SQLException:用户'root'@'localhost'的访问被拒绝(使用密码:否)

错误:java.sql.SQLException:用户'root@localhost'@'localhost'的访问被拒绝(使用密码:是)

java.sql.SQLException:无法锁定表“更改”;用户当前正在使用

java.sql.SQLException:Android 中用户'root'@'192.148.2.106'(使用密码:YES)的访问被拒绝

java.sql.SQLException: ORA-01017: 用户名/口令无效; 登录被拒绝