文章内容
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'
评论列表