文章内容

2020/10/27 15:56:42,作 者: 黄兵

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

在Ubuntu18.04安装完数据库后,使用如下命令登录:

mysql -uroot -p

密码为空,出现如下错误:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

出现问题的原因:

在Ubuntu MySQL默认会使用auth_socket插件,这个插件会使用它的db_users,将由系统用户凭据进行“身份验证” 。

也就是会使用系统用户密码进行认证。

使用sudo登录服务器:

sudo mysql -u root

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

从查询的结果可以看出:root用户正在使用auth_socket插件

解决方案:

这里有两种解决方案:

1、您可以设置root用户使用mysql_native_password插件

2、您可以db_user与自己创建一个新的system_user(推荐)

选项1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

选项2 :(用您的用户名替换YOUR_SYSTEM_USER)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

请记住,如果您使用选项#2,则必须以系统用户名(mysql -u YOUR_SYSTEM_USER)连接到mysql。

注意:在某些系统(例如Debian Stretch)上,“ auth_socket”插件称为“ unix_socket”,因此相应的SQL命令应为:

UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';


参考资料:

1、ERROR 1698 (28000): Access denied for user 'root'@'localhost'


分享到:

发表评论

评论列表