1. 程式人生 > >MySQL8.0新特性——默認使用caching_sha2_password作為身份驗證插件

MySQL8.0新特性——默認使用caching_sha2_password作為身份驗證插件

ref man fss 文件中 password col defaults 安全 所有

mysql5.8開始將caching_sha2_password作為默認的身份驗證插件

該caching_sha2_password和 sha256_password認證插件提供比mysql_native_password插件更安全的密碼加密 ,並 caching_sha2_password提供了比更好的性能sha256_password。由於這些優越的安全性和性能特性 caching_sha2_password它是MySQL 8.0首選的身份驗證插件,而且也是默認的身份驗證插件而不是 mysql_native_password。此更改會影響服務器和libmysqlclient 客戶端庫;目前來說和經常使用的客戶端軟件兼容性不好。

在MySQL 5.7中,默認的身份驗證插件是 mysql_native_password!


libmysqlclient8.0之前的MySQL版本 的客戶端庫能夠連接到MySQL 8.0服務器(通過身份驗證的帳戶除外 caching_sha2_password)。這意味著基於的8.0之前的客戶端libmysqlclient也應該能夠連接。例子:

①:標準的MySQL客戶端,如mysql 和mysqladmin都是 libmysqlclient基於的。

②:Perl DBI的DBD :: mysql驅動程序是 libmysqlclient基於的。

③:MySQL Connector / Python有一個libmysqlclient基於C擴展模塊 。要使用它,請use_pure=False在連接時包含該選項。


兼容caching_sha2_password身份驗證的客戶端:

①:libmysqlclientMySQL 8.0(8.0.4或更高版本)中 的客戶端庫。標準MySQL客戶端(如mysql和 mysqladmin)是 libmysqlclient基於的,因此它們也是兼容的。

②:libmysqlclientMySQL 5.7(5.7.23或更高版本)中 的客戶端庫。標準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。

PHP:PDO_MySQL和ext / mysqli擴展不支持caching_sha2_password。此外,當與7.1.16之前的PHP版本和7.2.4之前的PHP 7.2一起使用時,default_authentication_plugin=caching_sha2_password 即使caching_sha2_password未使用它們也無法連接 。


註意:

①:此更改僅適用於安裝或升級到MySQL 8.0或更高版本後創建的新帳戶。對於已升級安裝中已存在的帳戶,其身份驗證插件保持不變,還是mysql_native_password。當然也可以使用命令將用戶的身份驗證改為:caching_sha2_password;

如:ALTER USER user IDENTIFIED WITH caching_sha2_password BY 'password';

②:新安裝MySQL8.0的數據庫默認是使用caching_sha2_password身份驗證的,必須使用5.8版本安裝包內的客戶端軟件登錄數據庫,如果要更改root用戶的身份認證方式,可以使用命令:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';


1、caching_sha2_password兼容性問題和解決方案

如果您的MySQL安裝必須服務於8.0之前的客戶端,並且在升級到MySQL 8.0或更高版本後遇到兼容性問題,解決這些問題並恢復8.0之前的兼容性的最簡單方法是重新配置服務器以恢復到以前的默認身份驗證插件(mysql_native_password)。例如,在配置文件my.cnf中使用以下行:

[mysqld]

default_authentication_plugin=mysql_native_password


該設置允許8.0之前的客戶端連接到8.0服務器,直到安裝使用的客戶端和連接器升級為了 caching_sha2_password。但是,該設置應被視為臨時設置,而不是長期或永久性解決方案,因為它會導致使用有效設置創建的新帳戶放棄提供的改進的身份驗證安全性 caching_sha2_password。


註意:

如果目前使用的客戶端和連接器不支持caching_sha2_password,則可以使用修改後的數據目錄初始化過程,該過程會在創建root帳戶後mysql_native_password立即關聯該帳戶,可以在初始化數據庫的時候使用以下的方法解決:

①:初始化數據庫的時候使用參數:--default-authentication-plugin=mysql_native_password 加上--initialize或 --initialize-insecure 選項

②:在配置文件中設置 default_authentication_plugin 為mysql_native_password選項,並使用--defaults-file選項和--initializeor 或 --initialize-insecure。(在這種情況下,如果您繼續將該選項文件用於後續服務器啟動,則將創建新帳戶,mysql_native_password而不是 caching_sha2_password除非您default_authentication_plugin 從選項文件中刪除該 設置。)



2、caching_sha2_password和復制

在所有服務器已升級到MySQL 8.0.4或更高版本的復制方案中,與主/主服務器的從/副本連接可以使用通過caching_sha2_password身份驗證的帳戶。對於此類連接,同樣的要求適用於使用通過caching_sha2_password身份驗證的帳戶的其他客戶端,使用安全連接或基於RSA的密碼交換。


--:要連接到caching_sha2_password 主/從復制的帳戶:

①:對於使用OpenSSL構建的MySQL,請使用以下任一 CHANGE MASTER TO選項:

MASTER_SSL = 1

GET_MASTER_PUBLIC_KEY = 1

MASTER_PUBLIC_KEY_PATH='path to RSA public key file'

②:對於MySQL使用wolfSSL,使用 MASTER_SSL=1帶 CHANGE MASTER TO。或者,

如果在服務器啟動時提供了所需的密鑰,則可以使用與RSA公鑰相關的選項。


--:要連接到caching_sha2_password 組復制的帳戶:

①:對於使用OpenSSL構建的MySQL,請設置以下任何系統變量:

SET GLOBAL group_replication_recovery_use_ssl = ON;

SET GLOBAL group_replication_recovery_get_public_key = 1;

SET GLOBAL group_replication_recovery_public_key_path = 'path to RSA public key file';

②:對於使用wolfSSL構建的MySQL,請設置此系統變量:

SET GLOBAL group_replication_recovery_use_ssl = ON;

或者,如果在服務器啟動時提供了所需的密鑰,則可以使用與RSA公鑰相關的選項。



官方文檔:

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password












MySQL8.0新特性——默認使用caching_sha2_password作為身份驗證插件