1. 程式人生 > >【mysql】【You must reset your password using ALTER USER statement before executing this statement報錯處理】

【mysql】【You must reset your password using ALTER USER statement before executing this statement報錯處理】

安裝完mysql 之後,登陸以後,不管執行任何命令,總是提示這個

mysql> show databases;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

mysql> use mysql;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

 

解決方式如下:

MySQL版本5.7.6版本以前使用者可以使用如下命令:

mysql> SET PASSWORD = PASSWORD('xxxxxxxxx');

MySQL版本5.7.6版本開始的使用者可以使用如下命令:

mysql> ALTER USER USER() IDENTIFIED BY 'xxxxxxxxxx';

 

原因分析:

MySQL版本5.6.6版本起,添加了password_expired功能,它允許設定使用者的過期時間。這個特性已經新增到mysql.user資料表,但是它的預設值是”N”,可以使用ALTER USER語句來修改這個值。

輸入以下命令,將賬號密碼強制到期:

mysql> ALTER USER 'xiaoming'@'localhost' PASSWORD EXPIRE;

此時,使用者可以登入到MYSQL伺服器,但是在使用者為設定新密碼之前,不能執行任何命令,就會得到上圖的報錯,修改密碼即可正常執行賬戶許可權內的所有命令。由於此版本密碼過期天數無法通過命令來實現,所以DBA可以通過cron定時器任務來設定MySQL使用者的密碼過期時間。

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

[mysqld]

default_password_lifetime=120   如果要設定密碼永不過期,my.cnf配置如下: [mysqld] default_password_lifetime=0   如果要為每個具體的使用者賬戶設定單獨的特定值,可以使用以下命令完成(注意:此命令會覆蓋全域性策略),單位是“天”,命令如下: ALTER USER ‘xiaoming’@‘localhost' PASSWORD EXPIRE INTERVAL 250 DAY;   如果讓使用者恢復預設策略,命令如下: ALTER USER 'xiaoming'@'localhost' PASSWORD EXPIRE DEFAULT;   個別使用者為了後期麻煩,會將密碼過期功能禁用,命令如下: ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE NEVER;   如想進一步學習請參考官網:https://dev.mysql.com/doc/refman/5.7/en/password-management.html