You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

普通用户Shell无法登录MySQL root的问题排查咨询

问题与解决方案

问题现象

  • 普通系统用户执行mysql -u root -p输入密码后报错:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  • 切换到系统root用户后执行相同命令可成功登录MySQL
  • 查询mysql.user表发现MySQL root用户的plugin字段为auth_socket

原因分析

auth_socket是Ubuntu/Debian系系统默认给MySQL root配置的认证插件,它不验证密码,仅检查当前登录的系统用户是否与MySQL用户名一致。因此只有系统root用户能直接用MySQL root登录,普通系统用户即便知道密码也无法通过密码认证登录。

配置建议

1. 修改MySQL root的认证方式为密码认证

先切换到系统root用户,登录MySQL:

sudo su - root
mysql -u root -p

执行以下SQL语句修改认证插件并重置密码(替换your_new_password为自定义密码):

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'your_new_password';
FLUSH PRIVILEGES;

注:MySQL 8.0+推荐使用caching_sha2_password,若需兼容旧客户端,可改用mysql_native_password

完成后退出MySQL,普通系统用户即可通过mysql -u root -p输入密码登录。

2. 配置远程连接支持

方式一:修改root用户允许远程访问(不推荐,安全性低)

在MySQL中执行:

ALTER USER 'root'@'localhost' RENAME TO 'root'@'%';
FLUSH PRIVILEGES;

%表示允许从任意IP访问,也可指定特定IP地址。

方式二:创建专门的远程访问用户(推荐)

在MySQL中执行:

CREATE USER 'remote_user'@'%' IDENTIFIED WITH caching_sha2_password BY 'remote_password';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

替换remote_user和remote_password为自定义的用户名与密码。

修改MySQL绑定地址

编辑MySQL配置文件(通常路径为/etc/mysql/mysql.conf.d/mysqld.cnf):
找到bind-address行,修改为:

bind-address = 0.0.0.0

注:若仅允许特定IP访问,可替换为对应IP地址

保存后重启MySQL服务:

systemctl restart mysql

开放防火墙端口(若启用防火墙)

Ubuntu默认使用ufw,执行以下命令开放3306端口:

ufw allow 3306/tcp

内容的提问来源于stack exchange,提问作者OmPS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:01:12