Documentation Home
MySQL 外壳 8.0  / 第 6 章 MySQL AdminAPI  /  6.4 为 AdminAPI 创建用户帐户

6.4 为 AdminAPI 创建用户帐户

用于在 InnoDB Cluster、InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 部署中配置和管理成员服务器实例的用户帐户必须具有元数据表的完全读取和写入权限,以及完全的 MySQL 管理员权限 (SUPER、、、、 等等)。有关详细信息,请参阅 MySQL 提供的权限GRANT OPTIONCREATEDROP

root为此, 您可以使用服务器上的帐户,但如果这样做,root 部署中每个成员服务器上的帐户都必须具有相同的密码。root出于安全原因,不建议 使用该帐户。

dba.configureInstance() 相反,推荐的方法是使用 AdminAPI 的 JavaScript和 cluster.setupAdminAccount() 操作 来设置用户帐户。这些操作接受的用户名格式遵循标准的 MySQL 帐户名格式,请参阅 指定帐户名

如果您更喜欢设置用户帐户,所需的权限列在 手动配置 InnoDB 集群管理员帐户中。如果仅需要读取操作,例如出于监控目的,您可以使用具有更多受限权限的帐户,如本主题中所述。

重要的

用于配置或管理 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 部署的每个帐户必须存在于部署中的所有成员服务器实例上,具有相同的用户名和相同的密码。

服务器配置帐户

每个要加入 InnoDB Cluster、InnoDB ClusterSet 或 InnoDB ReplicaSet 部署的服务器实例都需要一个服务器配置帐户。dba.configureInstance()您可以选择使用JavaScript 命令或 dba.configure_instance()Python 命令设置此帐户 clusterAdmin

为了更好的安全性,请在交互式提示中指定密码,否则使用 clusterAdminPassword选项指定。在将成为部署一部分的每个服务器实例上以相同的方式创建具有相同用户名和密码的相同帐户,包括您连接以创建部署的实例和之后将加入的实例。

您使用该 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%'");

管理员帐户

完成配置过程后,管理员帐户可用于管理部署。您可以设置多个。cluster.setupAdminAccount() 要创建管理员帐户,请在将所有实例添加到 InnoDB Cluster 或 InnoDB ReplicaSet 后发出 JavaScript 命令。或者发出 Python 命令: <Cluster>setup_admin_account()

该命令使用您指定的用户名和密码创建一个帐户,并具有所有必需的权限。创建帐户的事务 cluster.setupAdminAccount() 被写入二进制日志并发送到集群中的所有其他服务器实例以在它们上创建帐户。

要使用该setupAdminAccount()操作,您必须以具有创建用户权限的 MySQL 用户身份连接,例如以根用户身份。该 操作还使您能够在JavaScript 操作或Python 操作 之前升级具有必要权限的现有 MySQL 帐户 。setupAdminAccount(user)dba.upgradeMetadata()dba.upgrade_metadata()

强制user参数是您要创建的用于管理部署的 MySQL 帐户的名称。操作接受的用户名格式setupAdminAccount()遵循标准的MySQL账户名格式。有关详细信息,请参阅指定帐户名称。用户参数格式是 可选的,如果未提供,则默认为通配符。 username[@host]host%

例如,要使用 JavaScript 创建一个名为 icadmin管理分配给变量的 InnoDB 集群 的用户myCluster,请发出:

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.

更新旧帐户

如果您有使用MySQL Shell 8.0.20之前的版本创建的服务器配置帐户或管理员帐户,请使用update选项和 setupAdminAccount()操作来升级现有用户的权限。这在升级期间是相关的,以确保用户帐户兼容。例如,要icadmin使用 JavaScript 升级名为 的用户,请发出:

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() 这是不写入二进制日志 的命令的特殊用途 。