首页 文章

用户访问被拒绝'root' @ 'localhost'(使用密码:是)(Mysql ::错误)

提问于
浏览
32

我试图在我的服务器上部署Web应用程序,我得到这个mysql数据库异常“访问被拒绝用户'root'@'localhost'(使用密码:YES)(Mysql :: Error)”

我尝试使用_2542520从命令提示符访问数据库我能够执行所有数据库操作 .

什么是错误

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:771)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3649)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1176)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2558)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
    at java.sql.DriverManager.getConnection(DriverManager.java:620)
    at java.sql.DriverManager.getConnection(DriverManager.java:200)
    at com.mpigeon.DbConnection.DbConn(DbConnection.java:26)
    at com.mpigeon.CheckLoginHome.doGet(CheckLoginHome.java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

12 回答

  • 0

    您需要从localhost授予对root用户的访问权限 . 检查this ubuntu帮助

  • 6

    尝试使用 root 之类的..

    mysql -uroot
    

    然后,您可以在使用后登录后检查不同的用户和主机

    select user,host,password from mysql.user;
    
  • 0

    检查你是否在密码中留空格 .

  • 0

    将MySQL服务器从5.1.73升级到5.5.45后,我遇到了同样的错误还有另一种方法可以修复该错误 .

    在我的情况下,我能够使用root密码连接到MySQL,但MySQL主动拒绝向任何用户授予GRANT PRIVILEGES;

    • 以root身份连接到MySQL
    mysql -u root -p
    

    然后输入你的MySQL root密码;

    • 选择数据库;
    use mysql;
    
    • 很可能在 mysql.user 表中根目录只有一条记录允许仅从 localhost (在我的情况下)连接,但默认情况下应该有两个root记录,一个用于 localhost ,另一个用于 127.0.0.1 ;

    • 如果不存在,则使用 Host='127.0.0.1' 为root用户创建其他记录;

    SET @s = CONCAT('INSERT INTO mysql.user SELECT ',
                REPLACE((SELECT GROUP_CONCAT(COLUMN_NAME) 
                         FROM INFORMATION_SCHEMA.COLUMNS
                         WHERE TABLE_NAME = 'user' AND TABLE_SCHEMA = 'mysql')
                ,"Host","'127.0.0.1'"),
                ' FROM mysql.user WHERE User="root"'); 
    
         PREPARE stmt FROM @s; 
         EXECUTE stmt;
    
    • 此外,您可以执行 mysql_upgrade -u -p 以查看是否一切正常 .
  • 21

    我的应用程序使用的是Mura CMS,我遇到了这个问题 . 但是解决方案是我的mysql本地服务器和配置文件中的密码之间的密码不匹配 . 一旦我同步它们就行了 .

  • 0

    我通过删除MySQL创建的空用户解决了这个问题 . 我只有root用户和我自己的用户 . 我删除了其余的 .

  • 8

    更新 mysql DB中的 user 表 . 并设置一些空白的密码,我使用root用户,所以我为root用户设置密码 .

    update mysql.user set password = PASSWORD('123456') where password = '';
    flush privileges;
    

    然后通过提供密码从ATG CIM再次尝试,它工作正常 .

    After update

    http://i.stack.imgur.com/3Lchp.png

  • -1

    今天我在安装SugarCRM(一个免费的CRM)时遇到了这个问题 .

    系统无法使用root用户连接到数据库 . 我可以明确地从控制台以root用户身份登录...那么问题是什么?

    我发现在我的情况下,我得到了完全相同的错误,但那是因为密码直接从 $_POST 数据发送到mysql,换句话说,我的密码中的 < 字符作为 &lt; 发送到mysql,这意味着密码错了 .

    其他一切都没有帮助 . mysql中的用户列表是正确的,包括匿名用户(出现在根条目之后) .

  • 2

    我google了很多,但没有找到我的问题的明确答案 . 我使用KeyPass生成一个强密码,可以在mysql workbench上成功使用它来连接,但不能从命令行连接 . 因此,我将psw更改为一个简单的psw,它在命令行上运行 . 我设法创建了一个能够从终端连接的强密码 . 所以我的建议是,在尝试所有类型的事情之前先尝试使用简单的密码 .

  • 0

    我正在运行UT,我开始收到错误消息 . 我不确定是什么问题 . 但是当我将INTELLIJ中的编码风格改为UTF8时,它再次开始工作 .

    访问被拒绝用户'root'@'localhost'(使用密码是)hibernate

    这是我的URL db.url = jdbc:mysql:// localhost:3306 / somedb?useUnicode = true&connectionCollation = utf8_general_ci&characterSetResults = utf8&characterEncoding = utf8

  • 0

    From my answer here, thought this might be useful:

    我尝试了很多步骤来纠正这个问题 . 对于这个问题有很多可能解决方案的来源很难从废话中过滤出来 . 我终于找到了一个很好的解决方案here

    Step 1: Identify the Database Version

    $ mysql --version
    

    You'll see some output like this with MySQL:

    $ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper
    

    Or output like this for MariaDB:

    mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
    

    记下您正在运行的数据库和版本,稍后您将使用它们 . 接下来,您需要停止数据库,以便手动访问它 .

    Step 2: Stopping the Database Server

    要更改root密码,必须事先关闭数据库服务器 .

    You can do that for MySQL with:

    $ sudo systemctl stop mysql
    

    And for MariaDB with:

    $ sudo systemctl stop mariadb
    

    Step 3: Restarting the Database Server Without Permission Checking

    如果在不加载有关用户权限的信息的情况下运行MySQL和MariaDB,则可以使用root权限访问数据库命令行而无需提供密码 . 这将允许你在不知情的情况下访问数据库 .

    为此,您需要停止数据库加载存储用户权限信息的授权表 . 因为这有一点安全风险,所以您也应该跳过网络以防止其他客户端连接 .

    Start the database without loading the grant tables or enabling networking:

    $ sudo mysqld_safe --skip-grant-tables --skip-networking &
    

    此命令末尾的&符号将使此进程在后台运行,以便您可以继续使用终端 .

    Now you can connect to the database as the root user, which should not ask for a password.

    $ mysql -u root
    

    您将立即看到数据库shell提示符 .

    MySQL Prompt

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    

    MariaDB Prompt

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]>
    

    现在您具有root访问权限,您可以更改root密码 .

    Step 4: Changing the Root Password

    mysql> FLUSH PRIVILEGES;
    

    现在我们可以实际更改root密码 .

    对于 MySQL 5.7.6 and newer 以及 MariaDB 10.1.20 and newer ,请使用以下命令:

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
    

    对于 MySQL 5.7.5 and older 以及 MariaDB 10.1.20 and older ,请使用:

    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
    

    确保使用您选择的新密码替换 new_password .

    Note: 如果 ALTER USER 命令没有通常表示更大的问题 . 但是,您可以尝试 UPDATE ... SET 来重置root密码 .

    [IMPORTANT] This is the specific line that fixed my particular issue:

    mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
    

    请记住在此之后重新加载授权表 .

    在任何一种情况下,您都应该看到命令已成功执行的确认 .

    Query OK, 0 rows affected (0.00 sec)
    

    密码已更改,因此您现在可以停止数据库服务器的手动实例并按原样重新启动它 .

    Step 5: Restart the Database Server Normally

    本教程进入了一些重新启动数据库的步骤,但我使用的唯一部分是:

    For MySQL, use: $ sudo systemctl启动mysql

    For MariaDB, use:

    $ sudo systemctl start mariadb
    

    现在,您可以通过运行以下命令确认已正确应用新密码:

    $ mysql -u root -p
    

    该命令现在应该提示新分配的密码 . 输入它,您应该按预期访问数据库提示 .

    Conclusion

    您现在可以恢复对MySQL或MariaDB服务器的管理访问权限 . 确保您选择的新root密码强大且安全,并将其保存在安全的地方 .

  • 1

    更新mysql表mysql.user中的空密码

    use mysql;
    select host,user,password from mysql.user;
    update mysql.user set password = PASSWORD('123456') where password = '';
    flush privileges;
    

相关问题