從二進位記錄檔傳輸狀態需要具有正確權限的複製使用者,以便群組複製可以建立直接的成員對成員複製通道。相同的複製使用者會用於所有群組成員的分散式復原。如果已設定群組成員以支援使用遠端複製作業作為分散式復原的一部分,則此複製使用者也會在捐贈者上用作複製使用者,並且需要此角色的正確權限。如需設定此使用者的詳細指示,請參閱第 20.2.1.3 節「分散式復原的使用者憑證」。
為了保護使用者憑證,您可以要求使用者帳戶的連線使用 SSL,並在啟動群組複製時提供使用者憑證,而不是將其儲存在複本狀態資料表中。此外,如果您使用的是快取 SHA-2 驗證,則必須在群組成員上設定 RSA 金鑰組。
當使用 MySQL 通訊堆疊 (group_replication_communication_stack=MYSQL
) 且成員之間有安全連線 (group_replication_ssl_mode
未設定為 DISABLED
) 時,必須正確設定復原使用者,因為它們也是群組通訊的使用者。請遵循第 20.6.3.1.2 節「使用 SSL 的複製使用者」和第 20.6.3.1.3 節「安全地提供複製使用者憑證」中的指示。
預設情況下,在 MySQL 8 中建立的使用者會使用第 8.4.1.2 節「快取 SHA-2 可插拔驗證」。如果為分散式復原設定的複製使用者使用快取 SHA-2 驗證外掛程式,並且您未針對分散式復原連線使用 SSL,則會使用 RSA 金鑰組進行密碼交換。如需 RSA 金鑰組的詳細資訊,請參閱第 8.3.3 節「建立 SSL 和 RSA 憑證與金鑰」。
在這種情況下,您可以將 rpl_user
的公開金鑰複製到加入的成員,或設定捐贈者在要求時提供公開金鑰。更安全的方法是將複製使用者帳戶的公開金鑰複製到加入的成員。然後,您需要設定加入成員上的 group_replication_recovery_public_key_path
系統變數,其中包含複製使用者帳戶公開金鑰的路徑。
較不安全的方法是在捐贈者上設定 group_replication_recovery_get_public_key=ON
,以便它們將複製使用者帳戶的公開金鑰提供給加入的成員。沒有辦法驗證伺服器的身分,因此只有在確定沒有伺服器身分被洩漏的風險時,例如受到中間人攻擊時,才設定 group_replication_recovery_get_public_key=ON
。
必須在加入群組的伺服器 (加入成員) 連線到捐贈者之前建立需要 SSL 連線的複製使用者。通常,這是您在佈建伺服器以加入群組時設定的。若要建立需要 SSL 連線的分散式復原複製使用者,請在所有將參與群組的伺服器上發出這些陳述式
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER 'rec_ssl_user'@'%' IDENTIFIED BY 'password' REQUIRE SSL;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'rec_ssl_user'@'%';
mysql> GRANT CONNECTION_ADMIN ON *.* TO 'rec_ssl_user'@'%';
mysql> GRANT BACKUP_ADMIN ON *.* TO 'rec_ssl_user'@'%';
mysql> GRANT GROUP_REPLICATION_STREAM ON *.* TO rec_ssl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
當同時使用 MySQL 通訊堆疊 (group_replication_communication_stack=MYSQL
) 和成員之間的安全連線 (group_replication_ssl_mode
未設定為 DISABLED
) 時,需要 GROUP_REPLICATION_STREAM
權限。請參閱第 20.6.1 節「連線安全性管理的通訊堆疊」。
若要提供用於複製的使用者憑證,您可以使用 CHANGE REPLICATION SOURCE TO
陳述式,將其永久設定為 group_replication_recovery
通道的憑證。或者,您也可以在每次啟動群組複製時,於 START GROUP_REPLICATION
陳述式中指定。在 START GROUP_REPLICATION
中指定的使用者憑證,其優先權高於使用 CHANGE REPLICATION SOURCE TO
陳述式所設定的任何使用者憑證。
使用 CHANGE REPLICATION SOURCE TO
設定的使用者憑證會以純文字形式儲存在伺服器上的複寫中繼資料存放庫中,但是 START GROUP_REPLICATION
上指定的使用者憑證僅儲存在記憶體中,並會在 STOP GROUP_REPLICATION
陳述式或伺服器關機時移除。因此,使用 START GROUP_REPLICATION
指定使用者憑證有助於保護群組複製伺服器免受未經授權的存取。但是,此方法與自動啟動群組複製不相容,如 group_replication_start_on_boot
系統變數所指定。
如果您想要使用 CHANGE REPLICATION SOURCE TO
陳述式永久設定使用者憑證,請在將加入群組的成員上發出此陳述式
mysql> CHANGE REPLICATION SOURCE TO SOURCE_USER='rec_ssl_user',
-> SOURCE_PASSWORD='password'
-> FOR CHANNEL 'group_replication_recovery';
若要在 START GROUP_REPLICATION
上提供使用者憑證,請在第一次啟動群組複製時或伺服器重新啟動後發出此陳述式
mysql> START GROUP_REPLICATION USER='rec_ssl_user', PASSWORD='password';
如果您切換為使用 START GROUP_REPLICATION
在先前使用 CHANGE REPLICATION SOURCE TO
提供憑證的伺服器上指定使用者憑證,您必須完成以下步驟才能獲得此變更的安全性優勢。
使用
STOP GROUP_REPLICATION
陳述式停止群組成員上的群組複製。儘管可以在群組複製執行時執行以下兩個步驟,但您需要重新啟動群組複製才能實作變更。將
group_replication_start_on_boot
系統變數的值設定為OFF
(預設值為ON
)。透過發出此陳述式,從複本狀態表移除分散式復原憑證
mysql> CHANGE REPLICATION SOURCE TO SOURCE_USER='', SOURCE_PASSWORD='' -> FOR CHANNEL 'group_replication_recovery';
使用
START GROUP_REPLICATION
陳述式重新啟動群組成員上的群組複製,該陳述式指定分散式復原使用者憑證。
如果沒有這些步驟,憑證會保留在複本狀態表中,並且在分散式復原的遠端複製作業期間,也可以傳輸到其他群組成員。然後,可能會在原始成員或從其複製的成員上,不經意地使用儲存的憑證啟動 group_replication_recovery
通道。在伺服器啟動時自動啟動群組複製(包括遠端複製作業後)將使用儲存的使用者憑證,如果操作員未將分散式復原憑證指定為 START GROUP_REPLICATION
的一部分,也將使用這些憑證。