MySQL 5.7设置用户密码过期

时间:2022-06-01 17:02:37

数据库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;