文件首頁
MySQL Shell 8.4
下載本手冊
PDF (美式信紙) - 2.2Mb
PDF (A4) - 2.3Mb


MySQL Shell 8.4  /  MySQL InnoDB Cluster  /  InnoDB Cluster 的使用者帳戶

7.3 InnoDB Cluster 的使用者帳戶

InnoDB Cluster 中的成員伺服器會使用三種類型的使用者帳戶。一個 InnoDB Cluster 伺服器設定帳戶用於設定叢集的伺服器執行個體。可以建立一個或多個 InnoDB Cluster 管理員帳戶,供管理員在設定叢集後管理伺服器執行個體。可以為 MySQL Router 執行個體建立一個或多個 MySQL Router 帳戶,以便連線到叢集。每個使用者帳戶必須存在於 InnoDB Cluster 中的所有成員伺服器上,且使用者名稱和密碼相同。

InnoDB Cluster 伺服器設定帳戶

此帳戶用於建立和設定 InnoDB Cluster 的成員伺服器。每個成員伺服器只有一個伺服器設定帳戶。叢集中每個成員伺服器上都必須使用相同的使用者帳戶名稱和密碼。您可以為此目的使用伺服器上的 root 帳戶,但如果這樣做,叢集中每個成員伺服器上的 root 帳戶都必須具有相同的密碼。基於安全考量,不建議這樣做。

較佳的方法是使用 dba.configureInstance() 命令搭配 clusterAdmin 選項來建立 InnoDB Cluster 伺服器設定帳戶。為了提高安全性,請在互動提示中指定密碼,否則請使用 clusterAdminPassword 選項指定密碼。在每個將成為 InnoDB Cluster 一部分的伺服器執行個體上,以相同方式建立相同的帳戶,並使用相同的使用者名稱和密碼 – 包括您連線以建立叢集的執行個體,以及之後將加入叢集的執行個體。

dba.configureInstance() 命令會自動授予帳戶所需的權限。如果您偏好,可以手動設定帳戶,授予其中列出的權限,如手動設定 InnoDB Cluster 管理員帳戶中所述。除了完整的 MySQL 管理員權限之外,該帳戶還需要 InnoDB Cluster 中繼資料表上的完整讀取和寫入權限。

您使用 dba.configureInstance() 操作建立的 InnoDB Cluster 伺服器設定帳戶 不會 複寫到 InnoDB Cluster 中的其他伺服器。MySQL Shell 會停用 dba.configureInstance() 操作的二進位日誌記錄。這表示您必須在每個伺服器執行個體上個別建立帳戶。

InnoDB Cluster 管理員帳戶

完成設定程序後,可以使用這些帳戶來管理 InnoDB Cluster。您可以設定多個帳戶。每個帳戶都必須存在於 InnoDB Cluster 中的每個成員伺服器上,且使用者名稱和密碼相同。

若要為 InnoDB ClusterSet 部署建立 InnoDB Cluster 管理員帳戶,請在將所有執行個體新增至該叢集後,發出 cluster.setupAdminAccount() 命令。此命令會建立具有您指定的使用者名稱和密碼的帳戶,並具有所有必要的權限。使用 cluster.setupAdminAccount() 建立帳戶的交易會寫入二進位日誌,並傳送至叢集中的所有其他伺服器執行個體,以在其上建立帳戶。

注意

如果主要的 InnoDB Cluster 是由 MySQL Shell 8.0.20 之前的 MySQL Shell 版本設定的,則 cluster.setupAdminAccount() 命令可能已與 update 選項搭配使用,以更新 InnoDB Cluster 伺服器設定帳戶的權限。這是此命令的特殊用途,不會寫入二進位日誌。

MySQL Router 帳戶

MySQL Router 使用這些帳戶來連線到 InnoDB Cluster 中的伺服器執行個體。您可以設定多個帳戶。每個帳戶都必須存在於 InnoDB Cluster 中的每個成員伺服器上,且使用者名稱和密碼相同。建立 MySQL Router 帳戶的程序與 InnoDB Cluster 管理員帳戶的程序相同,但使用 cluster.setupRouterAccount() 命令。如需建立或升級 MySQL Router 帳戶的指示,請參閱第 6.10.2 節,「設定 MySQL Router 使用者」

手動設定 InnoDB Cluster 管理員帳戶

如果您想要手動設定 InnoDB Cluster 管理使用者,該使用者需要此處列出的權限,所有權限都具有 GRANT OPTION

注意

此權限清單以目前版本的 MySQL Shell 為基礎。權限可能會在各版本之間變更。因此,設定管理帳戶的建議方法是使用 dba.configureInstance()cluster.setupAdminAccount() 操作。

重要

用於管理 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 部署的每個帳戶都必須存在於部署中的所有成員伺服器執行個體上,且具有相同的使用者名稱和相同的密碼。

如果只需要讀取操作,例如為了監控目的而建立使用者,則可以使用具有更受限權限的帳戶。要授予使用者 your_user 監控 InnoDB Cluster 所需的權限,請執行

GRANT SELECT ON mysql_innodb_cluster_metadata.* TO your_user@'%';
GRANT SELECT ON mysql.user TO your_user@'%';
GRANT SELECT ON performance_schema.global_status TO your_user@'%';
GRANT SELECT ON performance_schema.global_variables TO your_user@'%';
GRANT SELECT ON performance_schema.replication_applier_configuration TO your_user@'%';
GRANT SELECT ON performance_schema.replication_applier_status TO your_user@'%';
GRANT SELECT ON performance_schema.replication_applier_status_by_coordinator TO your_user@'%';
GRANT SELECT ON performance_schema.replication_applier_status_by_worker TO your_user@'%';
GRANT SELECT ON performance_schema.replication_connection_configuration TO your_user@'%';
GRANT SELECT ON performance_schema.replication_connection_status TO your_user@'%';
GRANT SELECT ON performance_schema.replication_group_member_stats TO your_user@'%';
GRANT SELECT ON performance_schema.replication_group_members TO your_user@'%';
GRANT SELECT ON performance_schema.threads TO your_user@'%' WITH GRANT OPTION;

如需更多資訊,請參閱帳戶管理陳述式

InnoDB Cluster 建立的內部使用者帳戶

作為使用 Group Replication 的一部分,InnoDB Cluster 會建立內部復原使用者,以啟用叢集中伺服器之間的連線。這些使用者是叢集內部的,且產生使用者的使用者名稱遵循 mysql_innodb_cluster_server_id@% 的命名方式,其中 server_id 對於每個執行個體而言是唯一的。在 8.0.17 之前的版本中,產生使用者的使用者名稱遵循 mysql_innodb_cluster_r[10_numbers] 的命名方式。

這些內部使用者所使用的主機名稱設定為 '%’。如需更多資訊,請參閱建立伺服器的允許清單

每個內部使用者都有一個隨機產生的密碼。AdminAPI 可讓您變更內部使用者的產生密碼。請參閱重設復原帳戶密碼。隨機產生的使用者會獲得下列授權

GRANT REPLICATION SLAVE ON *.* to internal_user;

內部使用者帳戶會在種子執行個體上建立,然後複寫到叢集中的其他執行個體。內部使用者為

  • 在執行 dba.createCluster() 建立新叢集時產生

  • 在執行 Cluster.addInstance() 將新執行個體新增至叢集時產生

  • 使用主要成員使用的驗證外掛程式產生

如需有關 Group Replication 所需內部使用者的更多資訊,請參閱分散式復原的使用者認證

重設復原帳戶密碼

您可以使用 Cluster.resetRecoveryAccountsPassword() 操作,重設由 InnoDB Cluster 建立的內部復原帳戶密碼,例如遵循自訂密碼存留期原則。使用 Cluster.resetRecoveryAccountsPassword() 操作,重設叢集使用的所有內部復原帳戶密碼。此操作會為每個在線執行個體上的內部復原帳戶設定新的隨機密碼。如果無法連線到執行個體,操作將會失敗。您可以使用 force 選項來忽略這類執行個體,但不建議這樣做,在執行此操作之前,將執行個體恢復上線會更安全。此操作僅適用於 InnoDB Cluster 建立的密碼,無法用於更新手動建立的密碼。

注意

執行此操作的使用者必須具有所有必要的管理員權限,特別是 CREATE USER,以確保無論密碼驗證要求原則為何,都可以變更復原帳戶的密碼。換句話說,無論是否啟用 password_require_current 系統變數。