MySQL 密码过期的修改方法

密码失效

查询 MySQL 异常:

mysql> select host,user from mysql.user limit 1;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

执行以下命令

mysql> SET PASSWORD = PASSWORD('your new password');
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
mysql> flush privileges;

MySQL 设置密码过期时间

mysql> SET GLOBAL default_password_lifetime = 90;
mysql> ALTER  USER 'root'@'localhost' PASSWORD  EXPIRE INTERVAL 90 DAY;

MySQL 设置密码用不过期

设定密码的有效期为 0,即永不过期。

命令行修改:

mysql> set global default_password_lifetime=0;

配置文件修改(改完后要重启服务才生效):

[mysqld]
default_password_lifetime=0

查看系统参数:

mysql> show global variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 0     |
+---------------------------+-------+
1 row in set (0.01 sec)

普通用户过期处理

普通用户一旦过期了,root 用户哪怕修改了它的密码,但是无法触发到过期状态的改变。

而改变过期状态的方法有两种:

  1. 使用普通用户登陆后,自己修改密码,也可以改回旧密码:

    mysql> set password=password('12345678');
    
    Query OK, 0 rows affected, 1 warning (0.00 sec)
  2. 使用 root 用户把过期的值改为 N;

    mysql> update mysql.user set password_expired='N' where user='test';
    
    Query OK, 1 row affected (0.01 sec)
    
    Rows matched: 1 Changed: 1 Warnings: 0
    
    mysql> flush privileges;
    
    Query OK, 0 rows affected (0.00 sec)

    root 用户改了状态,记录要 flush 权限不然用普通用户立刻登陆还是不生效的。

查看过期时间

select host,user,password_expired,password_lifetime from mysql.user;
+-----------+-----------+------------------+-------------------+
| host      | user      | password_expired | password_lifetime |
+-----------+-----------+------------------+-------------------+
| localhost | root      | N                |                 0 |
| %         | test      | N                |                 0 |
| %         | root      | N                |              NULL |
| localhost | mysql.sys | N                |              NULL |
+-----------+-----------+------------------+-------------------+
4 rows in set (0.00 sec)