查mysql.user表可定位使用旧插件(mysql_native_password、auth_socket)的用户:select user, host, plugin from mysql.user where plugin not in ('caching_sha2_password', 'sha256_password');该查询反映静态配置,非实时连接状态。

直接查 mysql.user 表就能知道哪些用户配了旧插件,但“当前连接正在用什么插件”不能靠这张表实时反映——它只存配置,不存会话状态。真要确认某个连接此刻走的是哪个认证流程,得结合登录账号和插件配置交叉判断。
怎么查出用了旧插件的用户(静态配置)
旧插件主要指 mysql_native_password 和 auth_socket,它们在 MySQL 8.0+ 中属于非默认项。执行以下语句可列出所有非默认配置的用户:
SELECT User, Host, plugin FROM mysql.user WHERE plugin NOT IN ('caching_sha2_password', 'sha256_password');- 结果里出现
mysql_native_password,说明该用户仍用 SHA-1 哈希;出现auth_socket,说明依赖系统 socket 权限而非密码 - 注意:这个查询不区分“是否正在被使用”,只反映账号的持久化配置
如何确认当前连接实际走的哪个插件
MySQL 不提供类似 SHOW CURRENT CONNECTION PLUGIN 的命令,但可以通过两步逼近真相:
- 先运行
SELECT USER(), CURRENT_USER();——CURRENT_USER()返回认证时匹配到的'user'@'host',这才是真正生效的账号 - 再用上一步得到的值去查:
SELECT plugin FROM mysql.user WHERE User = 'xxx' AND Host = 'yyy'; - 如果客户端连上来没报错,那大概率就是这个
plugin被成功加载并使用了;如果报Plugin 'caching_sha2_password' cannot be loaded,说明客户端不支持,但服务端仍按配置尝试调用
为什么不能从 INFORMATION_SCHEMA 或 performance_schema 查连接插件
因为这些库根本不记录每次连接所用的认证插件:
-
INFORMATION_SCHEMA.PLUGINS只告诉你服务端加载了哪些插件,不关联具体用户或连接 -
performance_schema.threads有连接线程信息,但没有authentication_plugin字段(MySQL 官方文档明确说明该字段未暴露) -
SHOW PROCESSLIST显示User和Host,但不显示认证方式——它连CURRENT_USER()都不显示,更别说插件
容易被忽略的关键点
很多人以为改了 default_authentication_plugin 就能“统一升级”,其实它只影响新创建用户;已有用户的 plugin 值是独立存储、永久有效的。更隐蔽的是 auth_socket 用户:它们查 authentication_string 是空的,plugin 是 auth_socket,但根本不是“密码失效”,而是压根不走密码校验流程——这类账号在排查连接失败时最容易被误判为配置错误。











