
最近有不少小伙伴反馈,MySQL 8.4的日志里频繁出现一条警告:
2026-05-08T08:56:49.106554Z 1604 [Warning] [MY-013360] [Server] Plugin sha256_password reported: ''sha256_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
其实这条警告背后,藏着MySQL密码认证插件数十年的迭代逻辑——从早期简单的弱哈希,到如今兼顾安全与性能的现代认证,每一步都在为数据库安全筑牢防线。今天我们就来梳理一下MySQL密码插件的迭代历程。
一、为什么插件要不断迭代?
MySQL密码插件的核心作用,是实现用户密码的加密存储与身份认证。迭代的本质,就是解决三个核心问题:
从1995年MySQL诞生至今,插件迭代大致分为4个核心阶段,每一个阶段都对应着当时的安全需求与技术局限。
二、迭代全里程:4个阶段,从“裸奔”到“硬核防护”
1. 史前时代
MySQL4.0及更早的版本,主要在1995至2004年的版本中使用的密码插件是mysql_old_password。这是MySQL最早期的认证方式,堪称“极简但极不安全”,放在现在来看几乎等同于“裸奔”。

核心特征:
生命周期:MySQL 5.6弃用,5.7.5完全移除,如今已成为历史。
2.黄金时代
在MySQL 4.1-5.7版本上使用,发行年限是2005至2017年,对应的密码插件是mysql_native_password。这是MySQL使用最久、最经典的认证插件,陪伴了无数开发者十几年,解决了早期的核心安全隐患。
关键改进(2005年MySQL4.1引入):
局限性:
基于SHA-1算法(2005年后逐渐被认定为不安全),无盐值机制,相同密码仍会生成相同哈希,且无内置加密传输支持,需依赖SSL/TLS。
生命周期:MySQL 8.0.34弃用,MySQL 9.0完全移除,目前部分旧系统仍在使用。
3. 转型时代
在MySQL5.6-8.0版本上,发行版本在2013-2018年,随着网络安全需求升级,MySQL开始引入更强的加密算法,同时丰富插件类型,适配不同场景,sha256_password就是这一阶段的核心产物,此时密码插件多元化时代到来。
核心特征:
不足:每次认证都需全量计算SHA-256,多轮加密导致性能下降,不适合高并发场景。
同时期补充插件:
4. 现代安全时代
而MySQL 8.0至今,caching_sha2_password变成了主导密码插件。这是目前MySQL官方推荐的“终极方案”,完美解决了“安全与性能”的矛盾,也是我们现在必须迁移的目标插件。
革命性突破(2018年MySQL 8.0.4成为默认插件):
🔔 关键提醒:
MySQL8.4已正式弃用sha256_password,日志中频繁出现的警告,就是官方在强制推动迁移;未来MySQL9.x将彻底移除该插件,未迁移的用户将无法登录!

5. 四大核心插件的对比
下表从安全性及性能做个简单总结及对比
插件名称 | 核心算法 | 安全等级 | 性能 | 当前状态 |
|---|---|---|---|---|
mysql_old_password | 简单哈希 | 极低 | 极高 | 已移除 |
mysql_native_password | SHA-1×2 | 中 | 高 | 已移除(MySQL 9.0) |
sha256_password | SHA-256 | 高 | 中 | 已弃用(MySQL 8.4+) |
caching_sha2_password | SHA-256(带缓存) | 极高 | 极高 | 官方推荐(8.0+) |
三、MySQL8.4用户如何快速迁移插件
如果你正在使用MySQL8.4,且日志中出现sha256_password警告,按以下步骤操作,轻松完成迁移,避免后续无法登录。
1. 查找需迁移的用户
执行以下SQL,查看所有使用低版本密码插件的用户,例如还在使用sha256_password或mysql_native_password的用户:
SELECT user, host, plugin
FROM mysql.user
WHERE plugin IN ('sha256_password', 'mysql_native_password');
2. 单个用户迁移
针对查询出的用户,逐个迁移到caching_sha2_password,记得替换用户名、主机和密码:
ALTER USER 'username'@'host'
IDENTIFIED WITH caching_sha2_password BY 'your_password';
3. 批量迁移(谨慎使用,适合多用户场景)
SET @sql = NULL;
SELECT GROUP_CONCAT(
CONCAT("ALTER USER '", user, "'@'", host, "' IDENTIFIED WITH caching_sha2_password BY 'your_password';")
SEPARATOR ' '
) INTO @sql
FROM mysql.user
WHERE plugin IN ('sha256_password', 'mysql_native_password');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;4. 验证迁移结果
迁移后执行以下SQL,确认无旧插件用户:
SELECT user, host, plugin
FROM mysql.user
WHERE plugin IN ('sha256_password', 'mysql_native_password');可见,处理完毕后已经无旧插件用户了

5. 设置全局默认插件
编辑MySQL配置文件(my.cnf/my.ini),添加以下配置,确保新创建的用户默认使用caching_sha2_password:
[mysqld]
default_authentication_plugin = caching_sha2_password重启MySQL服务生效(systemctl restart mysqld)。
6. 客户端兼容性
如果迁移后出现“Authentication method 'caching_sha2_password' not supported”错误,只需升级客户端驱动:
四、总结
MySQL密码插件的迭代,本质上是“安全优先、性能跟上、兼容过渡”的过程:从无盐值到加盐,从弱哈希到强哈希,从无缓存到有缓存,每一步都在解决上一代的痛点。
未来,MySQL还会继续强化认证安全:比如引入SHA-3算法、集成OAuth2.0协议,更好地适配云环境、容器化部署等场景。
MySQL8.4+用户,务必尽快迁移sha256_password用户;MySQL 9.0已彻底移除旧插件,未迁移将直接影响业务正常运行。
收藏本文,下次遇到插件警告、迁移问题,直接对照操作即可!