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 的收益
- 未来可以在不更换认证插件的前提下切换默认存储格式;
- 客户端不需要任何改动;
- 提供从 crypt5 到 PBKDF2 的迁移路径,且不必更换插件。
PBKDF2 的序列化字符串使用带 digest_type 标识的格式:A => CRYPT5,B => PBKDF2;迭代次数为 3 位十六进制数 × 1000。