用户'root'@'localhost'拒绝访问(使用密码:YES)(Mysql :: Error)

时间:2011-05-21 11:15:51

标签: java mysql ubuntu

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

我尝试使用mysql -u root -p从命令提示符访问数据库我能够执行所有数据库操作。

错误是什么

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)

14 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:8)

尝试使用root之类的..

mysql -uroot

然后您可以在使用

登录后检查不同的用户和主机
select user,host,password from mysql.user;

答案 2 :(得分:6)

检查你是否在密码中加了空格。

答案 3 :(得分:2)

将MySQL服务器从5.1.73升级到5.5.45后,我遇到了同样的错误 还有另一种方法可以解决这个错误。

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

  1. 以root身份连接到MySQL

    mysql -u root -p
    

    然后输入您的MySQL root密码;

  2. 选择数据库;

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

  4. 如果root用户不在那里,则为其创建额外的记录

    Host='127.0.0.1'
  5. 除此之外,您还可以执行 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; 看一切是否正常。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

mysql 数据库中更新用户表。并设置一些空白的密码,我使用root用户,所以我为root用户设置密码。

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

然后再通过提供密码从ATG CIM尝试,它运行良好。

After update

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

答案 7 :(得分:0)

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

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

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

  用户“root”@“localhost”

访问被拒绝(使用密码是)   冬眠

这是我的网址 = db.url配置参数JDBC:MySQL的://本地主机:3306 / somedb了useUnicode =真安培; connectionCollat​​ion = utf8_general_ci&安培; characterSetResults = UTF8&安培;的characterEncoding = UTF8

答案 10 :(得分:0)

根据我的回答here,认为这可能有用:

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

第1步:确定数据库版本

$ mysql --version

您会在MySQL中看到这样的输出:

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

或者像MariaDB这样的输出:

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

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

第2步:停止数据库服务器

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

你可以通过以下方式为MySQL做到这一点:

$ sudo systemctl stop mysql

对于MariaDB:

$ sudo systemctl stop mariadb

步骤3:在没有权限检查的情况下重新启动数据库服务器

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

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

启动数据库而不加载授权表或启用网络:

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

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

现在您可以以root用户身份连接到数据库,root用户不应该要求输入密码。

$ mysql -u root

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

MySQL提示

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

mysql>

MariaDB提示

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

MariaDB [(none)]>

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

第4步:更改根密码

mysql> FLUSH PRIVILEGES;

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

对于 MySQL 5.7.6及更新版以及 MariaDB 10.1.20及更新版,请使用以下命令:

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

对于 MySQL 5.7.5及更早版本以及 MariaDB 10.1.20及更早版本,请使用:

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

请务必使用您选择的新密码替换new_password

注意:如果ALTER USER命令不起作用,则通常表示问题更严重。但是,您可以尝试UPDATE ... SET重置root密码。

[重要]这是修复我的特定问题的具体行:

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

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

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

Query OK, 0 rows affected (0.00 sec)

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

步骤5:正常重启数据库服务器

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

对于MySQL,请使用:     $ sudo systemctl启动mysql

对于MariaDB,请使用:

$ sudo systemctl start mariadb

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

$ mysql -u root -p

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

<强>结论

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

答案 11 :(得分:0)

如果您未在安装时设置密码,则会发生此错误,在本例中为使用unix-socket插件的mysql。

但是,如果从设置(表mysql.user)中删除插件链接,则会出现其他问题。这不能解决问题,并且会导致另一个问题。要修复已删除的链接并设置密码(“ PWD”),请执行以下操作:

1)如上所述运行--skip-grant-tables。

如果不起作用,则在/etc/mysql/mysql.conf.d/mysqld.cnf的[mysqld]部分中添加字符串skip-grant-tables。然后执行sudo服务mysql重新启动。

2)运行mysql -u root -p,然后(更改“ PWD”):

update mysql.user 
    set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password" 
    where User='root' and Host='localhost';    
flush privileges;

quit
then sudo service mysql restart. Check: mysql -u root -p.

在重新启动之前,如果在文件mysqld.cnf中设置了该字符串,则将其删除。

@ bl79是此答案的作者,我刚刚将其重新发布,因为它确实有帮助!

答案 12 :(得分:0)

在msyql中添加用户选项。

GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;

link会很有用。

答案 13 :(得分:-1)

更新mysql

表mysql.user中的空密码
use mysql;
select host,user,password from mysql.user;
update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;