InnoDB Cluster 中的成員伺服器會使用三種使用者帳戶。一個 InnoDB Cluster 伺服器組態帳戶用於設定叢集的伺服器執行個體。可以建立一個或多個 InnoDB Cluster 管理員帳戶,供管理員在設定叢集後管理伺服器執行個體。可以為 MySQL Router 執行個體建立一個或多個 MySQL Router 帳戶,以連線至叢集。每個使用者帳戶都必須存在於 InnoDB Cluster 的所有成員伺服器上,且使用者名稱和密碼都相同。
- InnoDB Cluster 伺服器組態帳戶
-
此帳戶用於建立和設定 InnoDB Cluster 的成員伺服器。每個成員伺服器只有一個伺服器組態帳戶。叢集中的每個成員伺服器都必須使用相同的使用者帳戶名稱和密碼。您可以將伺服器上的
root
帳戶用於此目的,但如果這樣做,叢集中每個成員伺服器上的root
帳戶都必須具有相同的密碼。基於安全性考量,不建議這樣做。較佳的做法是使用具有
clusterAdmin
選項的dba.configureInstance()
命令建立 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 管理員帳戶的流程相同,但使用的是
命令。如需建立或升級 MySQL Router 帳戶的說明,請參閱「第 6.10.2 節,設定 MySQL Router 使用者」。cluster
.setupRouterAccount()
如果您想要手動設定 InnoDB Cluster 管理使用者,該使用者需要此處列出的權限,所有權限都需使用 GRANT OPTION
。
此權限清單是根據目前版本的 MySQL Shell 而定。權限可能會在版本之間變更。因此,建議使用 dba.configureInstance()
或
作業來設定管理帳戶。cluster
.setupAdminAccount()
用於管理 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 部署的每個帳戶都必須存在於部署中的所有成員伺服器執行個體上,且使用者名稱和密碼都相同。
-
在 *.* 上使用的全域權限,用於
RELOAD
、SHUTDOWN
、PROCESS
、FILE
、SELECT
、SUPER
、REPLICATION SLAVE
、REPLICATION CLIENT
、REPLICATION_APPLIER
、CREATE USER
、SYSTEM_VARIABLES_ADMIN
、PERSIST_RO_VARIABLES_ADMIN
、BACKUP_ADMIN
、CLONE_ADMIN
,以及EXECUTE
。 針對
mysql_innodb_cluster_metadata.*
、mysql_innodb_cluster_metadata_bkp.*
和mysql_innodb_cluster_metadata_previous.*
的特定綱要權限為ALTER
、ALTER ROUTINE
、CREATE
、CREATE ROUTINE
、CREATE TEMPORARY TABLES
、CREATE VIEW
、DELETE
、DROP
、EVENT
、EXECUTE
、INDEX
、INSERT
、LOCK TABLES
、REFERENCES
、SHOW VIEW
、TRIGGER
、UPDATE
;而針對mysql.*
則為INSERT
、UPDATE
、DELETE
。
如果只需要讀取操作,例如為了監控目的而建立使用者,則可以使用具有較受限權限的帳戶。要給予使用者 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;
如需更多資訊,請參閱 帳戶管理語句。
作為使用 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;
內部使用者帳戶是在 seed 實例上建立,然後複製到叢集中的其他實例。內部使用者為
透過發出
dba.createCluster()
建立新叢集時產生透過發出
將新實例新增至叢集時產生Cluster
.addInstance()使用主要成員使用的驗證外掛程式產生
如需 Group Replication 所需內部使用者的更多資訊,請參閱 分散式復原的使用者憑證。
您可以使用
操作,重設 InnoDB Cluster 建立的內部復原帳戶的密碼,例如為了遵循自訂的密碼生命週期政策。使用 Cluster
.resetRecoveryAccountsPassword()
操作,重設叢集使用的所有內部復原帳戶的密碼。此操作會為每個在線實例上的內部復原帳戶設定新的隨機密碼。如果無法連線到實例,則此操作會失敗。您可以使用 Cluster
.resetRecoveryAccountsPassword()force
選項來忽略這類實例,但不建議這樣做,在執行此操作之前,將實例重新上線會更安全。此操作僅適用於 InnoDB Cluster 建立的密碼,不能用於更新手動建立的密碼。
執行此操作的使用者必須具有所有必要的管理權限,特別是 CREATE USER
,以確保無論密碼驗證要求政策為何,都可以變更復原帳戶的密碼。換句話說,無論是否啟用 password_require_current
系統變數。