mysql 8.0中明确被标记为弃用或安全性不足的弱认证插件是sha256_password(已弃用)和mysql_native_password(因sha1不安全,官方不推荐);caching_sha2_password是当前默认强认证插件,不可禁用。

确认哪些插件属于“弱认证插件”
MySQL 8.0 中明确被标记为弃用或安全性不足的认证插件只有 sha256_password 和(在部分发行版中)mysql_native_password。前者自 8.0 起已被 caching_sha2_password 取代,后者虽仍可用,但因使用 SHA1 哈希,在官方安全建议中列为“不推荐”。注意:caching_sha2_password 是当前默认且**不应禁用**的强认证插件。
执行以下命令可快速定位:
SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_TYPE = 'AUTHENTICATION';
- 若结果中
sha256_password状态为ACTIVE,说明它正被某些旧用户或连接回退机制调用,需处理 -
mysql_native_password状态为ACTIVE属常见情况,不代表危险,但若你已统一要求客户端升级,可考虑禁用 -
caching_sha2_password必须保持ACTIVE,禁用将导致新用户无法创建、部分连接直接拒绝
禁用 sha256_password 插件(推荐优先操作)
sha256_password 在 MySQL 8.0+ 中已完全弃用,且不会被新用户默认使用,但它会在客户端不支持 caching_sha2_password 时自动回退,引发日志风暴和潜在连接失败。禁用它不依赖配置文件修改,而是通过卸载插件实现:
- 先检查是否加载:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'sha256_password'; - 若状态为
ACTIVE或DISABLED,执行:UNINSTALL PLUGIN sha256_password; - 该操作立即生效,无需重启;但若返回 “Plugin is busy”,说明有活跃连接正使用它,需先清理相关用户或等待连接断开
- 卸载后再次查询,
PLUGIN_STATUS应为空或报错 “Unknown plugin”,即成功
禁用 mysql_native_password 插件(仅当客户端全部兼容时)
禁用 mysql_native_password 是高风险操作,必须确保所有业务客户端(包括监控、备份、ETL 工具)均支持 caching_sha2_password。一旦禁用而客户端不兼容,将出现 ERROR 2059 (HY000): Authentication plugin 'mysql_native_password' is not loaded。
- 在
[mysqld]段中添加:mysql_native_password=OFF - 同时必须显式设置默认插件:
default_authentication_plugin=caching_sha2_password - 这两项必须共存,否则服务可能启动失败或行为异常
- 修改后必须重启 MySQL,
SET GLOBAL无法动态切换此配置 - 验证方式:
SHOW VARIABLES LIKE 'default_authentication_plugin';返回值应为caching_sha2_password,且SELECT PLUGIN_NAME FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'mysql_native_password';应无结果
最容易被忽略的兼容性陷阱
即使你成功禁用了 mysql_native_password,仍有两类场景会绕过限制并触发错误:
- 已有用户仍使用该插件:执行
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'xxx';后,该用户不受禁用影响,仍可登录——必须逐个检查并重置:ALTER USER 'user'@'host' IDENTIFIED WITH caching_sha2_password BY 'xxx'; - Docker 官方镜像或某些云数据库托管服务(如阿里云 RDS、腾讯云 CDB)默认不允许禁用
mysql_native_password,配置会被忽略或启动报错,此时只能协调客户端升级,不能硬改服务端 -
caching_sha2_password要求连接要么走 SSL,要么在非 SSL 下支持 RSA 密钥交换;若客户端未开启get-server-public-key=1或服务端未提供公钥(caching_sha2_password_auto_generate_rsa_keys=ON),仍会回退失败











