MySQL8.0密碼管理—(一)
- 2020 年 2 月 25 日
- 筆記
//
MySQL8.0密碼管理—(一)
//
今天來看看MySQL8.0在密碼管理部分所做的一些改動。
01
直觀對比密碼加密演算法
為對比不同,我們用MySQL5.7的密碼和MySQL8.0的密碼進行對比,同樣的密碼,不同的版本中,我們使用show create user語法進行查看,可以略見一些端倪:
#MySQL5.7 mysql> show create user root@'127.0.0.1'G *************************** 1. row *************************** CREATE USER for root@127.0.0.1: CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH 'mysql_native_password' AS '*4639C1B3C042674B279372A92CE75E872C90CD92' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK 1 row in set (0.00 sec) #MySQL8.0 mysql> show create user root@'127.0.0.1'G *************************** 1. row *************************** CREATE USER for root@127.0.0.1: CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH 'caching_sha2_password' AS '$A$005$m8F#M>nG-y+%6L3LokFslnbidccedOaqdEFQLgywdOuMwarlRASB7kJbP5G5' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT 1 row in set (0.00 sec)
可以看見,MySQL5.7和MySQL8.0有不同的加密方法,MySQL5.7的默認加密演算法是"mysql_native_password",而MySQL8.0的默認加密演算法是"caching_sha2_password",同樣的密碼,在MySQL5.7和MySQL8.0中的加密結果是不一樣的,這比較好容易理解,因為加密演算法不一樣。使用caching_sha2_password加密演算法,讓密碼的加密程度更強。加密串的長度也更長,安全性更好。
02
MySQL8.0加密演算法
在MySQL8.0中提供了兩種身份認證插件對用戶密碼進行sha-256哈希加密,sha-256哈希函數是目前被公認的比較安全的加密函數,更多詳情請大家自行了解。當然,舊版本的mysql_native_password的加密方法依舊可以兼容。
MySQL中的兩種身份認證插件分別是sha256-password以及caching-sha2-password,二者都能實現基本的sha-256身份認證,不同的是caching-sha2-password可以在服務端使用高速快取,從而提高性能。
MySQL8.0使用的默認加密演算法是caching-sha2-password,不建議自行更改默認加密演算法。除此之外,如果對MySQL的默認加密演算法進行更改,則需要修改對應的libmysqlclient客戶端庫。
03
MySQL5.7升級MySQL8.0怎麼辦?
如果您恰好要想從MySQL5.7升級到MySQL8.0,那麼在密碼層面,有以下幾點需要注意。
1、對於MySQL伺服器來講,default_authentication_plugin系統變數的默認值需要從mysql_native_password更改為caching_sha2_password
2、上述更改僅適用於MySQL升級之後創建的新帳號,對於原有的mysql_native_password加密演算法所加密的MySQL帳號,高版本的MySQL可以向下兼容低版本。
3、如果要修改默認加密方式為caching_sha2_password,可使用下面的語句進行修改:
alter user xxx@xxx identified with "caching_sha2_password" by "password";
4、如果我們在升級MySQL8.0之後出現了帳號的兼容性問題,為了保證帳號的可用性,則需要我們對插件進行降級,可以使用修改配置文件的辦法進行,如下:
[mysqld] default_authentication_plugin=mysql_native_password
但這會損失MySQL8.0新的加密方法帶來的安全性。
04
可能存在的問題
在升級完MySQL8.0伺服器之後,當我們用其他客戶端或者第三方驅動去連接MySQL服務的時候,還可能碰到如下問題:
1、客戶端或者第三方驅動的協議無法識別基於caching_sha2_password加密演算法的插件。
2、認證時間可能會稍微延長,因為MySQL8.0兼容了MySQL5.7的密碼認證方法,所以在認證過程中,需要判斷到底使用何種演算法對該帳號的密碼進行認證。當然,客戶端本身可以使用進行–default-auth=mysql_native_password選項顯示指定認證方法。
3、官方文檔中制定了一些常用的支援caching-sha2-password的連接器,這裡羅列出來,大家可以作為參考。
這些客戶端和連接器已升級為支援caching_sha2_password:
MySQL 8.0(8.0.4或更高版本)中的libmysqlclient客戶端庫。標準MySQL客戶端(例如mysql和mysqladmin)基於libmysqlclient,因此它們也兼容。
MySQL 5.7(5.7.23或更高版本)中的libmysqlclient客戶端庫。標準MySQL客戶端(例如mysql和mysqladmin)基於libmysqlclient,因此它們也兼容。
MySQL Connector / C ++ 1.1.11或更高版本或8.0.7或更高版本。
MySQL Connector / J 8.0.9或更高版本。
MySQL Connector / NET 8.0.10或更高版本(通過經典的MySQL協議)。
MySQL Connector / Node.js 8.0.9或更高版本。
PHP:X DevAPI PHP擴展(mysql_xdevapi)支援caching_sha2_password。
時間原因,先這麼多吧。