按照往常的方法安装Mysql完成后,无法通过Mysql root用户登录,错误提示ERROR 1698 (28000): Access denied for user ‘root’@’localhost’,搜索后发现是Ubuntu-Desktop 18.04 版本 Mysql 所有账户默认使用 auth_socket plugin 验证插件(Ubuntu-Server仅有root账号默认使用auth_socket plugin),所以需要以系统管理员 root 用户启动 Mysql 才可以正常登录。
The socket plugin checks whether the socket user name (the operating system user name) matches the MySQL user name specified by the client program to the server. If the names do not match, the plugin checks whether the socket user name matches the name specified in the authentication_string column of the mysql.user table row. If a match is found, the plugin permits the connection. The authentication_string value can be specified using an IDENTIFIED …AS clause with CREATE USER or ALTER USER.
通过官方文档我们可知,插件会检查登陆的Mysql用户名和当前登陆系统用户名是否一致,如果不一致就回去检查当前 Mysql 用户的 authentication_string 字段能否和当前系统用户名匹配,如果不匹配则拒绝连接。
换句话说,如果你要登陆 Mysql 的 root 账户,你需要使用 root 用户身份,使用以下命令启动Mysql:
sudo mysql -u root -p
重新梳理下Ubuntu下安装Mysql的过程:
一、安装
sudo apt update
sudo apt install mysql-server
二、配置
上面已经安装完成,接下来我们进行一些最基本的安全设置,包括设定root密码。确认输入密码后,后面的所有提示都选y按照默认设定。
sudo mysql_secure_installation
三、测试
现在就已经可以登陆了,使用命令行,输入密码登录试试:
sudo mysql -u root -p
四、上述问题的解决方案
对于只能以管理员用户打开并登录Mysql,我们有一下几种解决方案:
- 设置Mysql root用户使用 mysql_native_password 插件(目前默认为auth_socket)
- 以当前用户身份,创建一个新Mysql用户(推荐,更为安全)
- 给 Mysql 的 root 用户添加次选系统账户,把当前使用的系统账户加入进去
选项一
USE mysql; UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
exit;
选项二
这里创建了一个用户,并授权所有数据库的权限给它。
CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
FLUSH PRIVILEGES;
exit;
选项三
把当前系统用户设定为 Mysql root 账户的次选系统账户,我们可以直接使用当前用户登陆 Mysql 的 root 用户。
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket AS 'yearliny';
发表回复