天天看點

生産系統如何給MySQL使用者改密碼

這是一個非常特殊的問題,有以下幾種情況可能需要更改現網使用者的密碼:

  1. 現在資料庫密碼被掃描到密碼屬于弱密碼
  2. 内網安全管理機制要求
  3. 需要阻止某些業務連接配接到MySQL中

在MySQL8.0以前版本,給MySQL更改密碼,明确寫到開發規範中,拒絕更線上更改更密碼,因為在8.0以前操作非常麻煩且不太完美。

MySQL 8.0之前的處理方法:

1. 建立一個同樣權限的帳号通過

show grants for ‘user_name'@’172.168.0.%';           

複制

擷取到原始權限,然後建立新帳号,可以添加_vX這種形式,例如:

create user 'user_name_v2'@'172.168.0.%' identified by 'new_password';           

複制

利用show grants for擷取的授權語句,對新使用者授權。

2. 确認新帳号可以登入且權限Ok

3. 更新現網應用配置,并重新開機或是重新整理配置,讓配置生效

4. 删除老使用者:

mysql>drop user 'user_name'@'172.168.0.%';           

複制

通過一個變通的辦法實作用一個新使用者替代老使用者,進而實作改使用者密碼的需求。但這裡并不太太完美,使用者名變更了。如裡需要還是原來的使用者名,這個感覺還需要在來一次這樣的操作。

現在福利來了:

從MySQL 8.0.14版本開始,對于使用者密碼這塊引入了一個新特性:一個使用者支援同時有兩個密碼。

直接上操作:

生産系統如何給MySQL使用者改密碼

上面同一個帳号兩個密碼都是可以登入成功。

當運作完:alter user 'wubx'@'%' discard old password; 後

生産系統如何給MySQL使用者改密碼

原來密碼: wubxwubx 已經失效。

通過這個特性對今後MySQL 8.0.14後的版本變密碼流程就相對簡單很多。

特别提示:想使用這個特性的使用者需要具備MySQL8.0後的新權限:APPLICATION_PASSWORD_ADMIN。另外要注意以下幾點:

  1. retain current password是聲明目前的第二個密碼,多次聲明,最後一個生效。使用者可以同時用原來密碼和聲明的新密碼登入
  2. retain current password語句中不能指定空密碼
  3. 在指定了retain current password後 ,又使用alter user更改原來的主密碼,利用retain current password聲明的第二密碼不會變更。
  4. 如果在使用retain current password後,又更改認正模式,聲明的第二密碼失效。
  5. 如果沒有使用retain current passwod,使用alter user .. discard old password ;不會把原來的密碼删掉。

最後,祝各位老闆玩的開心。

關于「3306π」社群

圍繞 MySQL 核心技術,将網際網路行業中最重要的資料化解決方案帶到傳統行業中;囊括其他開源技術Redis、MongoDB、Hbase、Hadoop、ElasticSearch、Storm、Spark等;分享幹貨知識,即便是贊助商,也要求如此,拒絕放水。