一、mysql密码过期
如果使用一个过期的密码连接MySQL,会收到一个报错,如下:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
二、mysql.user表
mysql.user表部分列:
password_expired:从MySQL 5.6.6 版本开始,添加了 password_expired 功能,它允许设置用户的过期时间。
password_last_changed :密码最后一次修改的时间
password_lifetime:该用户密码的生存时间,默认值为 NULL,除非手动修改此用户密码过期机制,否则都是 NULL
设置密码永不过期:
ALTER USER ‘root’@’localhost’ PASSWORD EXPIRE NEVER;
设置密码立即过期:
ALTER USER ‘root’@’localhost’ PASSWORD EXPIRE;
设置密码自定义过期天数:
CREATE USER ‘root’@’localhost’ PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER ‘root’@’localhost’ PASSWORD EXPIRE INTERVAL 90 DAY;
修改完可以看到mysql.user的password_lifetime列已经做了修改
三、全局变量default_password_lifetime
从MySQL 5.7.4版本开始,此全局变量可以设置一个全局的自动密码过期策略。
默认值:5.7.10 及之前版本为360,5.7.10 之后版本为0
[mysqld]
default_password_lifetime=90
show variables like "default_password_lifetime";
虽然这个变量设置了,但是mysql.user的password_lifetime列数值不会有任何变化
有一个全局系统变量default_password_lifetime,它为使用默认密码生存期的所有帐户指定策略。在系统表中这将存储一个NULL。NULL值被用作
一个标志,表明所涉及的帐户没有每个用户密码的特殊生存期。通过ALTER USER password EXPIRE NEVER(将列设置为0)或ALTER USER
password EXPIRE INTERVAL N DAY(将列设置为N)设置每个用户的特殊密码生存期。
因此,没有设置特定密码生存期的所有用户的所有密码生存期都将跟随全局变量的值。