需先检查插件状态,若未激活则执行install plugin auth_socket soname 'auth_socket.so';再创建同名系统用户和mysql用户(@'localhost'),用alter user或create user绑定auth_socket插件;连接时必须省略-h参数,确保走unix socket且uid一致。

确认 MySQL 是否已加载 auth_socket 插件
auth_socket 不是默认启用的插件,即使 MySQL 5.7.6+ 和 8.x 自带该插件,也得手动检查是否已安装并激活。执行以下命令:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'auth_socket';
如果 PLUGIN_STATUS 不是 ACTIVE,需手动安装:
INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';- 某些发行版(如 MariaDB 或定制编译版)可能使用
auth_socket.so或auth_socket.dll,路径错误会报Plugin 'auth_socket' is not loaded - 无需重启 mysqld,但需确保当前用户有
INSERT权限写入mysql.plugin表
把目标用户绑定到 auth_socket 认证方式
不能直接对已有用户改 authentication_string 字段——那对 caching_sha2_password 无效,且易引发 Access denied (using password: NO) 错误。必须用 ALTER USER ... IDENTIFIED WITH auth_socket 语法:
- 对 root 用户:
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket; - 对普通用户(如
dashboard):先确保系统存在同名 Linux 用户,再执行CREATE USER 'dashboard'@'localhost' IDENTIFIED WITH auth_socket; - 注意 host 必须是
'localhost',不是'127.0.0.1';后者走 TCP,auth_socket 不生效 - 执行后立即生效,无需
FLUSH PRIVILEGES;(但授予权限后需要)
验证连接是否走 Unix socket 且免密成功
auth_socket 只响应本地 Unix socket 连接,任何显式指定 -h 127.0.0.1 或 --protocol=tcp 都会失败:
- 正确命令:
mysql -u dashboard(不加-p,也不加-h) - 若报错
Can't connect to local MySQL server through socket '/tmp/mysql.sock',说明客户端没找到 socket 文件,需加--socket=...参数,或查ss -xl | grep mysql确认实际路径 - 若报错
Access denied for user 'dashboard'@'localhost',大概率是系统用户名与 MySQL 用户名不一致,或用户创建时 host 写成了'%'或'127.0.0.1' - 可用
SELECT USER(), CURRENT_USER();检查登录身份:前者是客户端声明的用户,后者是服务端认证后的实际用户,auth_socket 下二者应一致
权限授予与常见失效场景
auth_socket 用户仍需显式授权才能访问库表,但权限模型和密码用户完全一样:
- 授予权限后务必执行
FLUSH PRIVILEGES;(虽然多数情况自动刷新,但安全起见建议加上) - Windows 下完全不可用——auth_socket 依赖 Unix socket 和 PAM,仅适用于 Linux/macOS
- 容器环境需特别注意 UID 映射:宿主机
dashboard用户 UID 是 1001,容器内也得是 1001,否则认证失败 - 脚本中调用
mysql命令时,确保运行脚本的系统用户与 MySQL 用户同名,且未被sudo -u或su -c改变有效 UID
IDENTIFIED WITH 没用。











