mysql-5.7 密碼到期詳解

來源:互聯網
上載者:User

標籤:多少   簡單   修改   log   res   預設值   上班   host   sys   

一、起源:

  今天一上班就聽到說error-log裡記錄了大量的

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

  

二、mysql 使用者密碼到期的處理:

 

  1、從一條簡單的create user 看mysql密碼到期的內在邏輯

mysql> create user [email protected]‘%‘ identified by ‘[email protected]‘;                                                    Query OK, 0 rows affected (0.01 sec)mysql> show create user [email protected]‘%‘;+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+| CREATE USER for [email protected]%                                                                                                                                            |+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+| CREATE USER ‘exuser‘@‘%‘ IDENTIFIED WITH ‘mysql_native_password‘ AS ‘*CD089516E876A47FEBF3BB6A9ADD45F02F4BF73B‘ REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK |+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)

  

  2、從上面的show create user 可以看出 mysql會悄悄的在create user 語句的後面加上一個 password expire defautl 子句;這個

  password expire default 子句就是用來設定mysql 帳號的密碼到期時間的(單位天)。

 

  3、看寫死mysql 帳號密碼的到期時間時mysql是怎麼處理的

mysql> create user [email protected]‘%‘ identified by ‘123456‘ password expire interval 30 day;Query OK, 0 rows affected (0.00 sec)mysql> show create user [email protected]‘%‘;                                                                              +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| CREATE USER for [email protected]%                                                                                                                                                    |+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| CREATE USER ‘tt‘@‘%‘ IDENTIFIED WITH ‘mysql_native_password‘ AS ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ REQUIRE NONE PASSWORD EXPIRE INTERVAL 30 DAY ACCOUNT UNLOCK |+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

 

  4、password expire default 這裡的default的值是參照default_password_lifetime這個variable的,也就是說可以通過

  改變default_password_lifetime的值來靈活的控制帳號的到期時間。

 

三、default_password_lifetime 地預設值

  目前 default_password_lifetime 這個參數的預設值是0 ,也就是說預設情況下 create user [email protected] identified by ‘xxx‘ 這樣

  建立出來的帳號密碼是永不到期的。

 

四、回答一下起源中的問題:

  “起源”中提到的密碼到期是因為在mysql-5.7.4 ~ mysql-5.7.10 這些版本中default_password_lifetime的預設值是360,

  這樣就尷尬了,這樣的設定使得預設情況下mysql運行個360天就要改一下密碼,這不科學!於是呢在mysql-5.7.11 以後

  的mysql就把default_password_lifetime這個參數的預設值設定成了0.

 

五、給你一個環境怎麼才看出來使用者的密碼有沒有到期

  對於這裡所提到的密碼到期的判定不能簡單的看user.password_expired 這個列來區分帳號的密碼有沒有到期,而是要根據mysql帳號到期的 

  內在邏輯來看

  

  1、第一步:查看user.assword_last_changed 列來看對應帳號密碼的最近一次的修改時間

mysql> select user,host,password_expired,password_last_changed,password_lifetime from user;                  +---------------+-----------+------------------+-----------------------+-------------------+| user          | host      | password_expired | password_last_changed | password_lifetime |+---------------+-----------+------------------+-----------------------+-------------------+| root          | localhost | N                | 2017-10-15 10:07:32   |              NULL || mysql.session | localhost | N                | 2017-10-04 12:27:10   |              NULL || mysql.sys     | localhost | N                | 2017-10-04 12:27:10   |              NULL || jianglexing   | localhost | N                | 2017-10-07 09:48:14   |              NULL || repl          | %         | N                | 2017-10-07 19:16:44   |              NULL || tstuser       | localhost | N                | 2017-10-12 10:04:17   |              NULL |+---------------+-----------+------------------+-----------------------+-------------------+

  2、第二步:查看default_password_lifetime這個變數的值是多少

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

  3、確定使用者是不是用的mysql全域的密碼到期策略

mysql> show create user [email protected]‘localhost‘;                                                                 +-------------------------------------------------------------------------------------------------------------------------------+| CREATE USER for tstuser@localhost                                                                                             |+-------------------------------------------------------------------------------------------------------------------------------+| CREATE USER ‘tstuser‘@‘localhost‘ IDENTIFIED WITH ‘mysql_native_password‘ REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK |+-------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)

  4、確定當前的時間

mysql> select now();+---------------------+| now()               |+---------------------+| 2017-10-15 11:02:36 |+---------------------+1 row in set (0.00 sec)

 

  5、結論:

  對於tstuser來說它用的是全域的密碼到期策略,也就是一天后密碼就到期,然而它最近一次更新密碼的時間是2017-10-12,而當前的時間已經是

  2017-10-15 所以可以確定的說tstuser的密碼已經到期了。

 

mysql-5.7 密碼到期詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.