從二進位記錄檔進行狀態傳輸需要具有正確權限的複製使用者,以便群組複製可以建立直接的成員對成員複製通道。相同的複製使用者用於所有群組成員上的分散式復原。如果群組成員已設定為支援使用遠端複製作業作為分散式復原的一部分,則此複製使用者也將用作捐贈者上的複製使用者,並且需要此角色的正確權限。如需設定此使用者的詳細指示,請參閱第 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.1 節「快取 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
的一部分,也會使用這些憑證。