這是一個非常特殊的問題,有以下幾種情況可能需要更改現網使用者的密碼:
- 現在資料庫密碼被掃描到密碼屬于弱密碼
- 内網安全管理機制要求
- 需要阻止某些業務連接配接到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版本開始,對于使用者密碼這塊引入了一個新特性:一個使用者支援同時有兩個密碼。
直接上操作:
上面同一個帳号兩個密碼都是可以登入成功。
當運作完:alter user 'wubx'@'%' discard old password; 後
原來密碼: wubxwubx 已經失效。
通過這個特性對今後MySQL 8.0.14後的版本變密碼流程就相對簡單很多。
特别提示:想使用這個特性的使用者需要具備MySQL8.0後的新權限:APPLICATION_PASSWORD_ADMIN。另外要注意以下幾點:
- retain current password是聲明目前的第二個密碼,多次聲明,最後一個生效。使用者可以同時用原來密碼和聲明的新密碼登入
- retain current password語句中不能指定空密碼
- 在指定了retain current password後 ,又使用alter user更改原來的主密碼,利用retain current password聲明的第二密碼不會變更。
- 如果在使用retain current password後,又更改認正模式,聲明的第二密碼失效。
- 如果沒有使用retain current passwod,使用alter user .. discard old password ;不會把原來的密碼删掉。
最後,祝各位老闆玩的開心。
關于「3306π」社群
圍繞 MySQL 核心技術,将網際網路行業中最重要的資料化解決方案帶到傳統行業中;囊括其他開源技術Redis、MongoDB、Hbase、Hadoop、ElasticSearch、Storm、Spark等;分享幹貨知識,即便是贊助商,也要求如此,拒絕放水。