MySQL 8.0+原生支持密码过期策略,可通过ALTER USER设置账户级过期(立即、定时或永不过期),或通过default_password_lifetime配置全局默认有效期,并需结合validate_password组件强化密码强度校验。
MySQL 8.0 及以上版本原生支持密码过期策略,可通过 ALTER USER 或用户创建时直接设定,核心是控制 PASSWORD EXPIRE 属性和全局/账户级策略。
适用于高权限或临时账号,到期后首次登录必须修改密码:
ALTER USER 'admin'@'localhost' PASSWORD EXPIRE; —— 立即过期ALTER USER 'dev'@'%' PASSWORD EXPIRE INTERVAL 90 DAY; —— 90天后自动过期ALTER USER 'backup'@'10.0.2.%' PASSWORD EXPIRE NEVER; —— 取消过期(谨慎使用)影响后续新建账户(除非显式覆盖),需有 SUPER 或 SYSTEM_VARIABLES_ADMIN 权限:
SELECT @@defaul
t_password_lifetime;(默认值为 0,表示永不过期)SET PERSIST default_password_lifetime = 180;
my.cnf):确认策略是否生效,避免误配导致业务中断:
SELECT user, host, password_last_changed, password_expired FROM mysql.user WHERE user = 'app_user';
Your password has expired...,说明策略已触发,必须执行 ALTER USER ... IDENTIFIED BY 'newpass';
caching_sha2_password)的账户有效;旧版 mysql_native_password 在某些版本中可能不完全兼容单独设过期不够,建议同步开启密码复杂度校验:
INSTALL COMPONENT "file://component_validate_password";
SET PERSIST validate_password.policy = MEDIUM;(要求大小写字母+数字+特殊字符)