1. 程式人生 > >MySQL8.0新特性之預設使用caching_sha2_password作為身份驗證外掛

MySQL8.0新特性之預設使用caching_sha2_password作為身份驗證外掛

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基於的。

相容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