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 @@default_password_lifetime;(默认值为 0,表示永不过期) 设为180天:
SET PERSIST default_password_lifetime = 180;永久生效需写入配置文件(
my.cnf):
[mysqld]
default_password_lifetime = 180
检查与验证密码状态
确认策略是否生效,避免误配导致业务中断:
查指定用户过期时间: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;(要求大小写字母+数字+特殊字符) 这样密码重置时也会被强度规则拦截,防止用户设弱密码“应付”过期要求
