用於在 InnoDB 叢集、InnoDB 叢集集或 InnoDB ReplicaSet 部署中設定和管理成員伺服器實例的使用者帳戶,除了完整的 MySQL 管理員權限(SUPER
、GRANT OPTION
、CREATE
、DROP
等)之外,還必須具有中繼資料表格的完整讀取和寫入權限。如需更多資訊,請參閱 MySQL 提供的權限。
您可以為此目的在伺服器上使用 root
帳戶,但如果您這樣做,部署中每個成員伺服器上的 root
帳戶都必須具有相同的密碼。基於安全考量,不建議使用 root
帳戶。
相反地,建議的方法是使用 AdminAPI 的 JavaScript dba.configureInstance()
和 cluster.setupAdminAccount()
操作來設定使用者帳戶。這些操作接受的使用者名稱格式遵循標準 MySQL 帳戶名稱格式,請參閱 指定帳戶名稱。
如果您偏好設定使用者帳戶,所需的權限會列在 手動設定 InnoDB 叢集管理員帳戶。如果只需要讀取操作,例如用於監控目的,您可以使用具有更多限制權限的帳戶,如本主題所述。
用於設定或管理 InnoDB 叢集、InnoDB 叢集集或 InnoDB ReplicaSet 部署的每個帳戶,在部署中的所有成員伺服器實例上都必須存在,且具有相同的使用者名稱和相同的密碼。
在要加入 InnoDB 叢集、InnoDB 叢集集或 InnoDB ReplicaSet 部署的每個伺服器實例上,都需要伺服器設定帳戶。您可以使用 dba.configureInstance()
JavaScript 命令或 dba.configure_instance()
Python 命令搭配 clusterAdmin
選項來設定此帳戶。
為了提高安全性,請在互動式提示中指定密碼,否則請使用 clusterAdminPassword
選項指定密碼。在部署中的每個伺服器實例上,以相同方式建立相同的帳戶,具有相同的使用者名稱和密碼,包括您連線以建立部署的實例,以及之後加入的實例。
您可以使用 clusterAdminPasswordExpiration
選項來定義密碼到期日。此選項可以設定為天數、NEVER
表示永不到期,或 DEFAULT
表示使用系統預設值。
如果您使用 SSL 憑證進行驗證,您可以使用 clusterAdminCertIssuer
和 clusterAdminCertSubject
選項分別新增憑證簽發者和主體。
您使用 dba.configureInstance()
操作建立的伺服器設定帳戶,不會 複寫到 InnoDB 叢集、InnoDB 叢集集或 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 叢集或 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
是選用的,如果未提供,則預設為 %
通配符。
例如,若要使用 JavaScript 建立名為 icadmin
的使用者來管理指派給變數 myCluster
的 InnoDB 叢集,請發出
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()