【问题标题】: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 代码。

标签: java mysql exception jdbc connection


【解决方案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】:
                  1. 使用正确的 jar(正确的版本)
                  2. 授予 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)

                        什么解决了我的问题:

                        1. 创建一个新用户(从 MySQL 工作台或您可能正在使用的类似 GUI)
                        2. 也从 GUI 授予 DBA 权限(勾选 DBA 复选框)
                        3. 运行 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”

                                    【讨论】:

                                      猜你喜欢
                                      • 2014-09-10
                                      • 1970-01-01
                                      • 2015-05-11
                                      • 2020-03-18
                                      • 2012-08-11
                                      • 2021-08-05
                                      • 2018-04-24
                                      相关资源
                                      最近更新 更多