MySQL的使用者密碼過期功能介紹

chenfeng發表於2017-03-24
從MySQL版本5.6.6版本起,新增了password_expired功能,它允許設定使用者的過期時間。

這個特性已經新增到mysql.user資料表,但是它的預設值是”N”。可以使用ALTER USER語句來修改這個值。
例如:
mysql> ALTER USER mdba@'localhost' PASSWORD EXPIRE;
Query OK, 0 rows affected (0.04 sec)


在使用者未設定新密碼之前不能執行任何查詢語句,而且會得到如下錯誤訊息提示:
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.


按照以下操作執行完後此使用者的所有操作就又會被允許執行:

mysql>  alter user mdba@localhost identified by 'Aisino123!';
Query OK, 0 rows affected (0.03 sec)


mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)


在MySQL 5.7.8版開始使用者管理方面新增了鎖定/解鎖使用者賬戶的新特性
例如:

mysql> alter user mdba@localhost account lock;
Query OK, 0 rows affected (0.04 sec)


重新登入發現被拒絕:
[root@localhost ~]# mysql -u mdba -p
Enter password:
ERROR 3118 (HY000): Access denied for user 'mdba'@'localhost'. Account is locked.


解鎖後恢復正常:

mysql> alter user mdba@localhost account unlock;
Query OK, 0 rows affected (0.03 sec)


[root@localhost ~]# mysql -u mdba -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 942539
Server version: 5.7.17-debug-log Source distribution


Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>


從MySQL 5.7.4版開始,使用者的密碼過期時間這個特性得以改進,可以透過一個全域性變數default_password_lifetime來設定密碼過期的策略,
此全域性變數可以設定一個全域性的自動密碼過期策略。
在MySQL5.7的配置檔案中設定一個預設值,這會使得所有MySQL使用者的密碼過期時間都為90天,MySQL會從啟動時開始計算時間。
例如在my.cnf裡新增:

[mysqld]
default_password_lifetime=90

這會使得所有MySQL使用者的密碼過期時間都為90天,MySQL會從啟動時開始計算時間。
如果要設定密碼永不過期的全域性策略,可以設定default_password_lifetime=0,或者在命令列設定:
mysql> SET GLOBAL default_password_lifetime = 0;
Query OK, 0 rows affected (0.00 sec)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2135972/,如需轉載,請註明出處,否則將追究法律責任。

相關文章