default_password_lifetime仅影响新用户,老用户需用ALTER USER显式设置;密码重用限制需同时配置password_history和password_reuse_interval,并依赖validate_password插件及ALTER USER改密才生效。

直接设 default_password_lifetime 不会让老用户过期,必须用 ALTER USER 逐个设置;密码重用限制(password_history 和 password_reuse_interval)也只对启用后首次改密生效,且依赖 validate_password 插件。
为什么改了 default_password_lifetime 却没效果
这个变量只是新用户的“出厂设置”,不影响已有账号。比如你执行 SET PERSIST default_password_lifetime = 90,之后用 CREATE USER 创建的账号才默认 90 天过期;但 'olduser'@'%' 的 password_lifetime 字段仍为 NULL 或旧值,查 mysql.user 表看到全是 NULL 是正常现象,不是配置失败。
常见误操作包括:
- 在生产环境用
SET GLOBAL设置,MySQL 重启后失效 - 以为设成
0就等于“关闭策略”,其实它只表示“新用户默认永不过期” - 把
default_password_lifetime当全局开关,忽略了已有用户必须显式覆盖
如何真正让指定用户密码过期
只有 ALTER USER 能触发真实校验逻辑,UPDATE mysql.user 直接改 password_expired 字段完全无效——该字段是只读快照,不驱动行为。
实操命令示例:
- 立即过期:
ALTER USER 'dev'@'%' PASSWORD EXPIRE; - 90 天后过期:
ALTER USER 'app_rw'@'10.%.%.%' PASSWORD EXPIRE INTERVAL 90 DAY; - 永不过期(适合服务账号):
ALTER USER 'svc_backup'@'localhost' PASSWORD EXPIRE NEVER; - 继承全局设置:
ALTER USER 'admin'@'%' PASSWORD EXPIRE DEFAULT;(注意:不是“不过期”,而是取@@default_password_lifetime值)
验证是否生效:用该用户登录后执行 SELECT 1;,若报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.,才算真正起效。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
怎么防止用户“换汤不换药”重用旧密码
password_history 和 password_reuse_interval 必须同时设置,且仅在 ALTER USER ... IDENTIFIED BY 改密时校验——SET PASSWORD 已弃用,不触发检查。
关键前提:
- MySQL 版本 ≥ 8.0.19
-
validate_password插件/组件已加载(SHOW VARIABLES LIKE 'validate_password%';可确认) - 必须用
SET PERSIST设置(推荐),而非SET GLOBAL(重启失效)
例如:
SET PERSIST password_history = 5; SET PERSIST password_reuse_interval = 365;
设置后,用户第 6 次改密不能选最近 5 次密码;哪怕某密码不在最近 5 次里,365 天内也不准重用。注意:这两个参数对设置前的历史密码不追溯,只从第一次用 ALTER USER ... IDENTIFIED BY 改密开始计数。
容易被忽略的兼容性与权限细节
很多故障源于版本和权限错配:
-
password_expiration_warning_days是 8.0.24+ 才支持的变量,低版本设了会静默忽略 - 用户若有
ALTER USER权限,登录后可跳过ERROR 1820强制改密流程 -
caching_sha2_password认证插件默认启用,但旧客户端可能连不上,别急着降级,优先用ALTER USER ... IDENTIFIED WITH caching_sha2_password BY显式升级 - 所有策略都依赖
SYSTEM_VARIABLES_ADMIN权限才能SET PERSIST,普通 DBA 账号通常没有,得找更高权限账号操作
最常漏掉的一点:default_password_lifetime、password_history、password_reuse_interval 三者要配合使用,单设任何一个都无法闭环防住弱管理习惯——过期不重用,重用不限期,限期不强制,全得靠组合。

















