查 mysql.user 表的 plugin 列可定位过时插件用户:select user, host, plugin from mysql.user where plugin != 'caching_sha2_password';常见值包括 mysql_native_password 和 auth_socket,需结合客户端兼容性谨慎处理,修改后须执行 flush privileges。

查 mysql.user 表的 plugin 列就能定位过时插件用户
MySQL 8.0 默认使用 caching_sha2_password,而旧版常用的是 mysql_native_password。只要查出 plugin 值不等于 caching_sha2_password 的用户,基本就是需要关注的对象。注意:这不是“错误”,只是安全策略升级后的遗留状态。
SELECT User, Host, plugin FROM mysql.user WHERE plugin != 'caching_sha2_password';- 常见过时插件值包括:
mysql_native_password、auth_socket(尤其在 Ubuntu 系统默认安装时) - 某些旧客户端(如老版本 PHP MySQL 扩展、部分 GUI 工具)可能无法直连
caching_sha2_password用户,此时需确认是否真要降级兼容
SHOW VARIABLES LIKE 'default_authentication_plugin' 只反映默认策略,不反映实际用户配置
这个命令只告诉你新创建用户会用什么插件,对已有用户完全没影响。很多运维误以为改了它就“全局生效”,结果发现老用户还是连不上——因为每个用户的 plugin 是独立存储在 mysql.user 表里的。
- 执行
SHOW VARIABLES LIKE 'default_authentication_plugin';得到的是默认值,不是现状 - 必须查
mysql.user表才能知道每个用户当前实际使用的插件 - 修改默认插件需重启 MySQL(
my.cnf中设default_authentication_plugin=mysql_native_password),但不影响存量用户
改认证插件前,先验证客户端是否支持 caching_sha2_password
盲目把所有用户都改成 caching_sha2_password 可能导致应用中断。更稳妥的做法是:先改少量测试用户,再用对应客户端尝试连接,确认无误后再批量处理。
- 单用户修改示例:
ALTER USER 'appuser'@'10.0.1.%' IDENTIFIED WITH caching_sha2_password BY 'xxx'; - 若客户端报错
Authentication plugin 'caching_sha2_password' cannot be loaded,说明客户端太旧,得升级或保留mysql_native_password - 改完务必执行
FLUSH PRIVILEGES;,否则变更不生效
别忽略 auth_socket 用户——它们根本不用密码,但容易被当成“失效账户”
auth_socket 是 Linux 系统本地 root 用户的常见配置,靠 UNIX socket 文件权限校验,不走密码流程。这类用户查 authentication_string 是空的,plugin 是 auth_socket,不能简单当成“密码为空需重置”来处理。
- 典型表现:
SELECT User, Host, plugin, authentication_string FROM mysql.user WHERE plugin = 'auth_socket'; - 这类用户只能从 localhost 用系统用户同名账号登录(例如系统有 user
mysql,数据库也有mysql@localhost) - 如果想远程访问或统一用密码管理,必须显式改成
caching_sha2_password并设密码,不能只改密码字段
auth_socket 用户配错了 Host,或者一个 mysql_native_password 用户被误升级,都可能让某条业务链路静默失败。











