错误 1698 (28000):拒绝用户“root”@“localhost”的访问

now*_*wox 2 mysql

我发现我的 phpmyadmin 无法使用我的 root 密码登录。所以我更新了密码如下:

# mysql 
mysql> UPDATE user set authentication_string=password('secret') where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
Run Code Online (Sandbox Code Playgroud)

这样做后,我尝试使用我的新 root 密码连接:

# sudo -u www-data mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我仍然被拒绝。

mysql> show grants for 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我试过:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
Run Code Online (Sandbox Code Playgroud)

它有效,但我完全不知道为什么任何其他方法都不起作用。

奇怪的是,在我可以用 root 连接之前# mysql。现在我必须这样做# mysql -uroot -p。我改变了什么?

小智 8

我有一个类似的问题,解决方案:

0.登录MySQL

$ sudo mysql -u root
use mysql;
Run Code Online (Sandbox Code Playgroud)

1. 更改密码

UPDATE user SET authentication_string=PASSWORD('yourpass') WHERE User='root';
Run Code Online (Sandbox Code Playgroud)

2.更改插件

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User='root';
Run Code Online (Sandbox Code Playgroud)

3. 完成它

flush privileges;
exit
Run Code Online (Sandbox Code Playgroud)

额外信息

如果您收到类似“错误 1819 (HY000):您的密码不满足当前策略要求”的错误消息,您可以通过以下方式查看密码规则:

SHOW VARIABLES LIKE 'validate_password%';
Run Code Online (Sandbox Code Playgroud)