在mysql 8.0的数据库管理中,通过PASSWORD EXPIRE选项可以灵活控制用户密码的有效期,强制用户下次登录时修改密码是提升数据库安全性的常用操作,能够有效避免长期使用固定密码带来的安全风险。
PASSWORD EXPIRE选项的作用
PASSWORD EXPIRE是mysql中用于控制用户密码过期策略的选项,当设置用户密码过期后,用户下次登录数据库时会被要求立即修改密码,否则无法正常执行数据库操作。该选项支持在创建用户、修改用户属性时配置,也可以设置全局的密码过期策略。
创建用户时强制下次登录改密码
在创建新用户的时候,可以直接附带PASSWORD EXPIRE选项,让该用户首次登录就必须修改密码。具体语法如下:
-- 创建用户并强制下次登录改密码 CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'InitPass123!' PASSWORD EXPIRE;
上述语句创建了用户名为test_user、允许本地登录的用户,初始密码为InitPass123!,同时设置PASSWORD EXPIRE,该用户首次登录时就会被要求修改密码。
修改已有用户强制下次登录改密码
如果已经存在用户,需要强制其下次登录修改密码,可以通过ALTER USER语句修改用户的密码过期属性:
-- 修改已有用户,强制下次登录改密码 ALTER USER 'old_user'@'localhost' PASSWORD EXPIRE;
执行该语句后,old_user用户下次登录mysql时就会触发密码修改要求。
设置密码过期时间策略
除了直接强制下次登录改密码,还可以设置密码的过期天数,让密码在指定天数后自动过期,用户登录时就需要修改密码。可以通过全局变量default_password_lifetime设置,也可以在用户级别单独设置。
全局密码过期策略配置
设置全局密码90天过期:
-- 设置全局密码90天过期,0表示密码永不过期 SET GLOBAL default_password_lifetime = 90; -- 永久生效需要写入配置文件 -- [mysqld] -- default_password_lifetime=90
用户级别单独设置过期时间
为用户单独设置密码30天过期:
ALTER USER 'test_user'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY;
也可以设置用户密码永不过期:
ALTER USER 'test_user'@'localhost' PASSWORD EXPIRE NEVER;
查看用户密码过期状态
可以通过查询mysql.user系统表来查看用户的密码过期相关信息,主要字段包括password_lifetime和password_expired:
-- 查看用户密码过期状态 SELECT user, host, password_lifetime, password_expired FROM mysql.user WHERE user = 'test_user';
其中password_expired为Y表示该用户密码已过期,为N表示未过期;password_lifetime为密码的有效天数,NULL表示使用全局策略。
密码过期后的登录与修改操作
当用户密码过期后,使用原密码登录mysql时,只能执行修改密码的操作,其他操作会被拒绝,提示密码已过期。修改密码的语句如下:
-- 密码过期后登录,执行修改密码操作 ALTER USER USER() IDENTIFIED BY 'NewPass456!';
修改完成后,用户就可以正常使用新密码执行各类数据库操作了。
注意事项
- 设置PASSWORD EXPIRE选项需要有mysql的CREATE USER或者ALTER USER权限,一般只有管理员账户可以操作。
- 密码修改需要符合mysql的密码强度策略,如果密码过于简单会修改失败,需要先调整密码策略或者设置符合要求的密码。
- 如果设置了全局密码过期策略,新创建的用户会默认继承该策略,除非在创建时单独指定PASSWORD EXPIRE属性。
mysql_8.0PASSWORD_EXPIRE用户密码管理数据库安全修改时间:2026-07-06 11:45:23