MySQL 5.7 不支持 SHA256 密码认证,因其 sha256_password 插件为实验性、默认禁用且依赖 SSL/RSA;唯一安全升级路径是改用 mysql_native_password;如需真正 SHA256 支持,必须升级至 MySQL 8.0+。

MySQL 5.7 不支持将用户密码升级为 SHA256 格式(即 sha256_password 插件)——这不是操作疏漏,而是版本能力限制。
为什么 sha256_password 在 MySQL 5.7 中不可用
MySQL 的 sha256_password 认证插件虽在 5.6 引入,但仅限于启用 SSL 或 RSA 密钥的特定场景,且要求客户端与服务端均支持对应加密通道。5.7 版本中该插件处于“实验性”状态,默认禁用、未启用 TLS 时无法加载、不接受普通 TCP 连接认证。尝试执行 ALTER USER ... IDENTIFIED WITH sha256_password 会直接报错:Plugin 'sha256_password' is not loaded。
- 5.7 的
mysql.user表中虽有plugin字段,但sha256_password插件未被初始化,SHOW PLUGINS查不到它 - 即使手动配置
default_authentication_plugin = sha256_password并重启,服务启动失败或降级回mysql_native_password - 官方文档明确标注:SHA-256 认证在 5.7 中“requires SSL or RSA key pair”,无加密连接则认证流程中断
5.7 中唯一可行的“升级”是切换到 mysql_native_password
所谓“升级旧版密码哈希”,实际是指淘汰 pre-4.1 的 16 字符弱哈希(已废弃),迁移到 41 字符的 SHA1 双重哈希(即 mysql_native_password 插件所用)。这是 5.7 唯一稳定、向后兼容、无需额外依赖的强化路径。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 先查出问题账号:
SELECT user, host, plugin, authentication_string FROM mysql.user WHERE LENGTH(authentication_string) = 16 - 对每个匹配用户执行:
ALTER USER 'user'@'host' IDENTIFIED BY 'new_password'(自动使用当前默认插件,即mysql_native_password) - 切勿用
UPDATE mysql.user SET authentication_string = PASSWORD('...')—— 该函数在 5.7.6+ 已标记为 deprecated,且字段为空时会导致登录失败 - 执行后必须
FLUSH PRIVILEGES,否则变更不生效
若真需要 SHA256 级别的密码安全,必须升到 MySQL 8.0+
MySQL 8.0 起,caching_sha2_password 成为默认插件,它基于 SHA256、支持非加密连接、性能接近 mysql_native_password,且无需强制 TLS。这才是生产环境可落地的 SHA256 认证方案。
- 升级前务必验证备份:用
mysql -u root -p 实测恢复,确认mysql、sys系统库完整导入 - 升级后立即运行
mysql_upgrade -u root -p(8.0.16 前)或mysqld --upgrade=FORCE(8.0.16+)修复系统表结构 - 注意客户端兼容性:老版本 MySQL Connector/J、PHP mysqli 扩展可能需更新,否则报错
Authentication plugin 'caching_sha2_password' cannot be loaded
别在 5.7 上硬凑 SHA256——不是配置不对,是引擎不支持。真正的安全升级,是版本升级本身,而不是在旧框架里打补丁。










