文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  複製 PRIVILEGE_CHECKS_USER 帳戶的權限

19.3.3.1 複製 PRIVILEGE_CHECKS_USER 帳戶的權限

使用 CHANGE REPLICATION SOURCE TO 陳述式指定為複製通道的 PRIVILEGE_CHECKS_USER 帳戶的使用者帳戶,必須具有 REPLICATION_APPLIER 權限,否則複製套用程式執行緒不會啟動。如 第 19.3.3 節「複製權限檢查」中所述,該帳戶需要足夠的進一步權限,才能套用複製通道上預期的所有交易。這些權限僅在執行相關交易時才會檢查。

強烈建議對於使用 PRIVILEGE_CHECKS_USER 帳戶保護的複寫通道,採用基於列的二進制日誌(binlog_format=ROW)。若使用基於語句的二進制日誌,PRIVILEGE_CHECKS_USER 帳戶可能需要一些管理員級別的權限才能成功執行交易。您可以將 REQUIRE_ROW_FORMAT 設定應用於受保護的通道,這會限制通道執行需要這些權限的事件。

REPLICATION_APPLIER 權限明確或隱含地允許 PRIVILEGE_CHECKS_USER 帳戶執行複寫執行緒需要執行的以下操作:

  • 設定系統變數 gtid_nextoriginal_commit_timestamporiginal_server_versionimmediate_server_versionpseudo_replica_mode 的值,以便在執行交易時應用適當的元數據和行為。

  • 執行內部使用的 BINLOG 語句以應用 mysqlbinlog 輸出,前提是該帳戶也具有這些語句中表格和操作的權限。

  • 更新系統表格 mysql.gtid_executedmysql.slave_relay_log_infomysql.slave_worker_infomysql.slave_master_info,以更新複寫元數據。(如果事件為了其他目的明確存取這些表格,您必須授予表格的適當權限。)

  • 應用二進制日誌 Table_map_log_event,該事件提供表格元數據,但不會對資料庫進行任何變更。

如果 CHANGE REPLICATION SOURCE TO 語句的 REQUIRE_TABLE_PRIMARY_KEY_CHECK 選項設定為預設值 STREAM,則 PRIVILEGE_CHECKS_USER 帳戶需要足夠的權限來設定受限制的工作階段變數,以便它可以變更工作階段期間的 sql_require_primary_key 系統變數值,使其與來源複寫的設定相符。 SESSION_VARIABLES_ADMIN 權限賦予帳戶此功能。此權限也允許帳戶應用使用 --disable-log-bin 選項建立的 mysqlbinlog 輸出。如果您將 REQUIRE_TABLE_PRIMARY_KEY_CHECK 設定為 ONOFF,複本在複寫操作中始終使用該值來設定 sql_require_primary_key 系統變數,因此不需要這些工作階段管理級別的權限。

如果使用表格加密,則 table_encryption_privilege_check 系統變數設定為 ON,並且任何事件中涉及的表空間的加密設定與套用伺服器的預設加密設定(由 default_table_encryption 系統變數指定)不同,則 PRIVILEGE_CHECKS_USER 帳戶需要 TABLE_ENCRYPTION_ADMIN 權限才能覆寫預設加密設定。強烈建議您不要授予此權限。相反地,請確保複本上的預設加密設定與其複寫的表空間的加密狀態相符,並且複寫群組成員具有相同的預設加密設定,這樣就不需要此權限。

為了執行中繼日誌中的特定複寫交易,或根據需要執行來自 mysqlbinlog 輸出的交易,PRIVILEGE_CHECKS_USER 帳戶必須具有以下權限:

  • 對於以列格式記錄的列插入(記錄為 Write_rows_log_event),需要相關表格的 INSERT 權限。

  • 對於以列格式記錄的列更新(記錄為 Update_rows_log_event),需要相關表格的 UPDATE 權限。

  • 對於以列格式記錄的列刪除(記錄為 Delete_rows_log_event),需要相關表格的 DELETE 權限。

如果使用基於語句的二進制日誌(不建議使用 PRIVILEGE_CHECKS_USER 帳戶),對於諸如 BEGINCOMMIT 之類的交易控制語句,或以語句格式記錄的 DML(記錄為 Query_log_event),PRIVILEGE_CHECKS_USER 帳戶需要執行事件中包含的語句的權限。

如果需要在複寫通道上執行 LOAD DATA 操作,請使用基於列的二進制日誌(binlog_format=ROW)。使用此日誌格式,不需要 FILE 權限即可執行事件,因此請勿授予 PRIVILEGE_CHECKS_USER 帳戶此權限。強烈建議在使用 PRIVILEGE_CHECKS_USER 帳戶保護的複寫通道上使用基於列的二進制日誌。如果為通道設定 REQUIRE_ROW_FORMAT,則需要基於列的二進制日誌。Format_description_log_event 會刪除由 LOAD DATA 事件建立的任何暫存檔案,並且在執行時不進行權限檢查。如需更多資訊,請參閱 第 19.5.1.20 節「複寫和 LOAD DATA」

如果 init_replica 系統變數設定為指定在複寫 SQL 執行緒啟動時要執行的一或多個 SQL 語句,則 PRIVILEGE_CHECKS_USER 帳戶必須具有執行這些語句所需的權限。

建議您永遠不要將任何 ACL 權限授予 PRIVILEGE_CHECKS_USER 帳戶,包括 CREATE USERCREATE ROLEDROP ROLEGRANT OPTION,並且不要允許帳戶更新 mysql.user 表格。擁有這些權限,該帳戶可能會被用來在伺服器上建立或修改使用者帳戶。為了避免在來源伺服器上發佈的 ACL 語句被複寫到受保護的通道以進行執行(因為在沒有這些權限的情況下它們會失敗),您可以在所有 ACL 語句之前發佈 SET sql_log_bin = 0,並在之後發佈 SET sql_log_bin = 1,以從來源的二進制日誌中省略這些語句。或者,您可以在執行所有 ACL 語句之前設定專用的目前資料庫,並使用複寫篩選器 (--binlog-ignore-db) 以篩選出複本上的此資料庫。