用於在 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 部署中設定和管理成員伺服器執行個體的使用者帳戶,必須在 metadata 資料表上具有完整讀取和寫入權限,此外還必須具有完整的 MySQL 管理員權限 (SUPER
、GRANT OPTION
、CREATE
、DROP
等)。如需詳細資訊,請參閱MySQL 提供的權限。
您可以針對此目的在伺服器上使用 root
帳戶,但如果您這樣做,部署中每個成員伺服器上的 root
帳戶都必須具有相同的密碼。基於安全理由,不建議使用 root
帳戶。
相反地,建議的方法是使用 AdminAPI 的 JavaScript dba.configureInstance()
和 cluster.setupAdminAccount()
作業來設定使用者帳戶。這些作業接受的使用者名稱格式遵循標準 MySQL 帳戶名稱格式,請參閱指定帳戶名稱。
如果您偏好自行設定使用者帳戶,則所需的權限會列在手動設定 InnoDB Cluster 管理員帳戶中。如果只需要讀取作業,例如用於監控目的,您可以使用具有更多限制權限的帳戶,如本主題中所詳述。
用於設定或管理 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 部署的每個帳戶,必須在部署中所有成員伺服器執行個體上存在,並具有相同的使用者名稱和相同的密碼。
每個要加入 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 部署的伺服器執行個體都需要伺服器設定帳戶。您可以使用 dba.configureInstance()
JavaScript 命令或 dba.configure_instance()
Python 命令 (搭配 clusterAdmin
選項) 來設定此帳戶。
為了提高安全性,請在互動式提示中指定密碼,或者使用 clusterAdminPassword
選項指定密碼。在每個將成為部署一部分的伺服器執行個體上,以相同的方式建立具有相同使用者名稱和密碼的相同帳戶,包括您連線以建立部署的執行個體,以及之後會加入的執行個體。
您可以使用 clusterAdminPasswordExpiration
選項來定義密碼到期時間。此選項可以設定為天數,NEVER
表示永不到期,或 DEFAULT
表示使用系統預設值。
如果您使用 SSL 憑證進行驗證,您可以使用 clusterAdminCertIssuer
和 clusterAdminCertSubject
選項分別新增憑證簽發者和主旨。
您使用 dba.configureInstance()
作業建立的伺服器設定帳戶不會複寫到 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 部署中的其他伺服器。MySQL Shell 會停用 dba.configureInstance()
作業的二進位記錄。基於這個原因,您必須在每個伺服器執行個體上個別建立帳戶。
clusterAdmin
選項必須與基於具有建立具有適當權限之使用者權限的使用者的 MySQL Shell 連線搭配使用。在此 JavaScript 範例中,使用 root 使用者
mysql-js> dba.configureInstance('root@ic-1:3306', {clusterAdmin: "'icadmin'@'ic-1%'"});
同樣地,在此 Python 範例中,使用 root 使用者
mysql-py> dba.configure_instance('root@ic-1:3306', clusterAdmin="'icadmin'@'ic-1%'");
管理員帳戶可以用於在您完成設定程序後管理部署。您可以設定多個管理員帳戶。若要建立管理員帳戶,您可以在將所有執行個體新增至 InnoDB Cluster 或 InnoDB ReplicaSet 後,發出
JavaScript 命令。或者發出 Python 命令:cluster
.setupAdminAccount()<Cluster>setup_admin_account()
。
此命令會建立具有您指定之使用者名稱和密碼,以及所有必要權限的帳戶。使用
建立帳戶的交易會寫入二進位記錄,並傳送至叢集中所有其他伺服器執行個體,以便在其上建立帳戶。cluster
.setupAdminAccount()
若要使用 setupAdminAccount()
作業,您必須以具有建立使用者權限的 MySQL 使用者身分連線,例如以 root 身分連線。setupAdminAccount(
作業也可讓您在執行 user
)dba.upgradeMetadata()
JavaScript 作業或 dba.upgrade_metadata()
Python 作業之前,將現有的 MySQL 帳戶升級為必要的權限。
必要的 user
引數是要建立以用於管理部署的 MySQL 帳戶名稱。setupAdminAccount()
作業接受的使用者名稱格式遵循標準 MySQL 帳戶名稱格式。如需詳細資訊,請參閱指定帳戶名稱。使用者引數格式為
,其中 username
[@host
]host
是選用的,如果未提供,則預設為 %
萬用字元。
例如,若要建立名為 icadmin
的使用者以使用 JavaScript 管理指派給變數 myCluster
的 InnoDB Cluster,請發出
mysql-js> myCluster.setupAdminAccount('icadmin')
Missing the password for new account icadmin@%. Please provide one.
Password for new account: ********
Confirm password: ********
Creating user icadmin@%.
Setting user password.
Account icadmin@% was successfully created.
或使用 Python
mysql-py> myCluster.setup_admin_account('icadmin')
Missing the password for new account icadmin@%. Please provide one.
Password for new account: ********
Confirm password: ********
Creating user icadmin@%.
Setting user password.
Account icadmin@% was successfully created.
setupAdminAccount()
具有下列與 SSL 相關的選項
requireCertIssuer
:帳戶的選用 SSL 憑證簽發者。requireCertSubject
:帳戶的選用 SSL 憑證主旨。passwordExpiration: numberOfDays | Never | Default
:帳戶的密碼到期設定。
如果設定 requireCertIssuer
或 requireCertSubject
其中一個或兩個,則現有的密碼會變成選用的。
如果您有使用 MySQL Shell 8.0.20 之前的版本建立的伺服器設定帳戶或管理員帳戶,請搭配 setupAdminAccount()
作業使用 update
選項來升級現有使用者的權限。這在升級期間相關,以確保使用者帳戶相容。例如,若要使用 JavaScript 升級名為 icadmin
的使用者,請發出
mysql-js> myCluster.setupAdminAccount('icadmin', {'update':1})
Updating user icadmin@%.
Account icadmin@% was successfully updated.
或使用 Python
mysql-py> myCluster.setup_admin_account('icadmin',update=1})
Updating user icadmin@%.
Account icadmin@% was successfully updated.
這是
命令的特殊用法,不會寫入二進位記錄。cluster
.setupAdminAccount()