java.sql.sqlexception:拒绝用户“root”@“localhost”的访问(使用密码:yes)

nwlqm0z1  于 2021-06-27  发布在  Java
关注(0)|答案(24)|浏览(624)

以下代码:

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)
bybem2ql

bybem2ql1#

我有同样的问题如下

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

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

z0qdvdin

z0qdvdin2#

我有一个类似的问题,但不同的是:我没有执行我的javaapp从 localhost ,但是从一台远程电脑。所以我得到了 java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES) 要解决此问题,只需登录phpmyadmin,转到 Users ,单击 add user 并输入要从中执行javaapp的主机(或选择 Any Host )

uplii1fm

uplii1fm3#

这可以帮助您:

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

使用命令行或一些gui工具执行它。
别忘了更换 %password% 使用真实密码。

lstz6jyr

lstz6jyr4#

我也在讨论同样的问题。增加了mysql服务端口号(3307),解决了这个问题。

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

ebdffaop5#

我使用的是SpringBoot2.2.6(windows),在尝试运行应用程序时遇到了相同的问题:java.sql.sqlexception:拒绝用户“root”@“localhost”的访问(使用密码:yes)
是什么解决了我的问题:
创建一个新用户(从mysql工作台或您可能正在使用的类似gui)
同时从gui授予dba权限(勾选dba复选框)
运行spring引导应用程序。
或者按照@evg解决方案在linux env中从命令行授予特权。

pprl5pva

pprl5pva6#

像这样试试。。。。

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);
}
ulmd4ohb

ulmd4ohb7#

这为我解决了问题。

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

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

FLUSH PRIVILEGES;
hlswsv35

hlswsv358#

这似乎主要发生在mysql用户名和密码不正确的情况下。检查你的mysql用户名和密码。

hivapdat

hivapdat9#

这个异常也是由于mysql db和pom.xml/jar的版本不匹配引起的。
确保pom.xml/jar版本高于mysql db版本。因为高版本和低版本是兼容的,但反之亦然。
java项目的解决方案
用合适的版本更换jar。
基于maven的解决方案
更改pom.xml中的依赖项版本
SpringBoot解决方案-通过添加5.1.5.final覆盖SpringBoot依赖项

gz5pxeao

gz5pxeao10#

我不得不更改我的sql设置(在我的主机中是dreamhost,在我的例子中是dreamhost),以允许用户名从其他主机(而不仅仅是dreamhost)访问数据库,因为我正在计算机上从ide运行一个程序。我现在通过在允许的主机列表中添加%来做到这一点。现在可以了!

pjngdqdw

pjngdqdw11#

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

lsmd5eda

lsmd5eda12#

这是特定于ubuntu 18.04 lts和MySQL5.x的,下面的链接从这里开始:

sudo mysql_secure_installation

sudo mysql

登录mysql后,从mysql提示符执行以下命令:

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

现在验证表是否有根目录的密码

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

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

wydwbb8l

wydwbb8l13#

对我来说,解决方案的工作原理是将url格式更改为:con=drivermanager.getconnection(“jdbc:mysql://localhost/w3schools?user=####&password=###“);确保向类路径添加正确的jar,并使用driver class.forname(“com.mysql.jdbc.driver”);

q7solyqu

q7solyqu14#

申报顺序:
司机
连接字符串
用户名
密码
如果我们按顺序申报
连接字符串
用户名
密码
司机
应用程序将失败

k0pti3hp

k0pti3hp15#

你可以用这个

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);

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

相关问题