综合 MySQL 9.7 的 caching_sha2_password:切到 PBKDF2_SHA512 后,enforce 会把账号按在登录口改密

2026-09-26 21:04:34

MySQL 9.7 的 caching_sha2_password:切到 PBKDF2_SHA512 后,enforce 会把账号按在登录口改密

文档:,相关 WorkLog:WL#17160。

存储格式:CRYPT5 之外新增 PBKDF2_SHA512

caching_sha2_password 支持多种密码存储格式。原有格式是 CRYPT5 + SHA-256;新版本增加了 PBKDF2_SHA512,提供更强的密码变换格式。

两个全局动态变量控制这件事:

  • caching_sha2_password_storage_format:控制通过 CREATE USER 或 ALTER USER 创建/修改密码时使用的首选格式。可取值 CRYPT5、PBKDF2_SHA512,默认 CRYPT5。
  • caching_sha2_password_enforce_storage_format:控制密码以非首选格式存储的账号,是允许继续正常认证,还是登录后被强制改密。取值 1(TRUE)、0(FALSE),默认 0。

改首选格式不会重写已有哈希

关键行为:验证时以实际存储的密码变换为准。因此修改首选存储格式不会立即转换已有的密码哈希——已有账号必须先改密码,其存储格式才会更新。

把 enforce 打开后,密码存储为非首选格式的用户在登录后会被要求改密。在密码改成首选格式之前,这些账号不会使用快速认证缓存。

需要注意的破坏面:服务账号、应用账号、复制用户以及非交互用户,如果在未被预期的情况下被强制改密,会直接中断。启用 enforce 之前,应先识别出这些账号,并通过计划内的密码轮换完成迁移。

复制环境:主从同参数,副本先升

在主从环境中,所有 primary 和 replica 节点都应配置相同的 caching_sha2_password_storage_format 与 caching_sha2_password_enforce_storage_format。副本应先于主库升级,这样以新密码存储格式复制的账号变更才能被一致地处理。

操作命令

设置首选格式与强制策略:

SET PERSIST caching_sha2_password_storage_format = 'PBKDF2_SHA512';
SET PERSIST caching_sha2_password_enforce_storage_format = ON;

或写进配置文件 [mysqld]:

caching_sha2_password_storage_format=PBKDF2_SHA512
caching_sha2_password_enforce_storage_format=ON

如果站点对 digest rounds 有审批值,单独设置:

SET PERSIST caching_sha2_password_digest_rounds = ;

交互式用户直接让密码过期:

ALTER USER ''@'' PASSWORD EXPIRE;

应用账号或服务账号,则在计划好的维护窗口内轮换密码:

ALTER USER ''@'' IDENTIFIED BY '';

MySQL 9.7 中的其他认证变化

  • caching_sha2_password 已是默认认证插件;
  • mysql_native_password 不再可用;
  • sha256_password 已弃用。

WL#17160:PBKDF2 + SHA512 的收益

  1. 未来可以在不更换认证插件的前提下切换默认存储格式;
  2. 客户端不需要任何改动;
  3. 提供从 crypt5 到 PBKDF2 的迁移路径,且不必更换插件。

PBKDF2 的序列化字符串使用带 digest_type 标识的格式:A => CRYPT5,B => PBKDF2;迭代次数为 3 位十六进制数 × 1000。

复制全文 生成海报 MySQL 认证 安全 升级 运维

推荐文章

程序员茄子在线接单