数据库mysql的user表里有三个字段用于控制用户密码过期的设置:
`password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`password_last_changed` timestamp NULL DEFAULT NULL,
`password_lifetime` smallint(5) unsigned DEFAULT NULL,
- password_expired:枚举值,设置用户密码是否过期的开关,默认为N。
- password_last_changed:记录密码最近修改的时间
- password_lifetime:设置密码的有效时间,天数
即使password_expired为"Y",用户也是可以使用密码登录MySQL,但是不允许做任何操作。使用过期密码登录执行操作报错如下:
mysql> SHOW DATABASES;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
Keep in mind that this does not affect any current connections the account has open.
MySQL支持全局设置和针对单独用户设置两种方式密码过期。
全局设置密码过期:default_password_lifetime
MySQL 5.7.4改进了用户密码过期的功能,新增了全局变量default_password_lifetime用于设置全局的用户密码过期策略。
default_password_lifetime可以在启动的配置文件my.cnf中配置,也可以使用命令行设置。
在my.cnf配置
[mysqld]
default_password_lifetime=90
default_password_lifetime的值为密码的有效天数。密码设置超过有效天数,密码过期失效。
default_password_lifetime的值为0时,表示用户设置的密码永不过期。
[mysqld]
default_password_lifetime=0
使用命令行配置
使用命令行设置需要有超级权限。
mysql> SET GLOBAL default_password_lifetime = 90;
Query OK, 0 rows affected (0.00 sec)
单个用户设置密码过期
针对单个用户设置密码过期将会覆盖全局的设置。
直接让用户密码过期
mysql> ALTER USER 'demo'@'localhost' PASSWORD EXPIRE;
指定过期天数
ALTER USER ‘demo’@‘localhost' PASSWORD EXPIRE INTERVAL 30 DAY;
设置用户密码永不过期
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE NEVER;