MySQL 用户简介

本页面介绍了 Cloud SQL 如何与 MySQL 用户配合工作。MySQL 用户账号通过控制对 MySQL 数据库的访问来提供安全性。

如需查看有关 MySQL 中用户的完整文档,请参阅 MySQL 文档中的访问权限控制和账号管理。如需了解如何在 Cloud SQL 中创建和管理 Cloud SQL 用户,请参阅创建和管理用户

您为什么需要 MySQL 用户账号

MySQL 用户账号让您能够登录并管理您的 Cloud SQL 实例。用户账号也是应用访问您的实例所必需的信息。

超级用户限制

在 Cloud SQL 中,客户无法创建或访问具有超级用户特性的用户。

由于 Cloud SQL for MySQL 是一项托管式服务,因此它会限制对某些系统过程和表的访问。

某些架构表的数据操纵语言 (DML) 和数据定义语言 (DDL) 权限受到限制。

下面列出了 mysqlmysql 架构中需要写入权限的 MySQL 5.6 系统表:audit_log_rules_expandedaudit_log_supported_opsaudit_log_rulescloudsql_replica_indexdbeventfuncheartbeatpluginprocusertables_priv

对于 MySQL 5.7,列表如下: audit_log_rules_expandedaudit_log_supported_opsaudit_log_rulescloudsql_replica_indexdbeventfuncgtid_executedheartbeatpluginprocusertables_priv

如需了解 MySQL 8.0 和 MySQL 8.4 的相关信息,请参阅 MySQL 8.0 用户权限 (cloudsqlsuperuser)MySQL 8.4 用户权限 (cloudsqlsuperuser)

MySQL 用户账号格式

MySQL 用户账号有两个组成部分:用户名和主机名。用户名标识用户,主机名指定用户可用于连接的主机。用户名和主机名组合起来构成一个用户账号:

'<user_name>'@'<host_name>'

您可以为主机名指定特定的 IP 地址或地址范围,或使用百分号(“%”)使主机名不受限制。请注意,如果使用 IP 地址连接到实例,那么即使用户的主机名不受限制,也必须将您的客户端 IP 地址添加为已获授权的地址

用户账号由用户名和主机名同时定义。例如,'user'@'%' 是与 'user'@'localhost' 不同的用户账号。

默认的 MySQL 用户

创建后,MySQL 实例有一个默认用户账号:'root'@'%'。首次使用此账号连接和管理数据库实例。默认用户拥有除 SUPERFILE 以外的所有数据库权限。在 Cloud SQL 中,您无法重命名 'root'@'%'

root'@'% 的默认设置是没有密码,MySQL 不要求您为 root'@'% 使用密码。但是,由于大多数 MySQL 安装中都存在 root'@'%,因此 root'@'% 用户是未经授权访问的常见目标。一旦获得对您的实例的访问权限,任何人员或程序都可以几乎无限制地访问和控制您的实例和数据。因此,我们建议您使用安全系数高的密码配置 root'@'% 用户或删除此用户。如需有关配置默认用户账号的帮助,请参阅配置默认用户账号

系统用户

系统用户有七个:

  • root@localhost[email protected]root@::1

    用于提供代管式数据库服务。

  • cloudsqlreplica@%

    用作副本的复制用户。

  • cloudsqlimport@localhost[email protected]

    用于数据导入。

  • cloudsqlexport@localhost[email protected]

    用于数据导出。

  • cloudsqloneshot

    用于其他数据库操作。

  • cloudsqlapplier@localhost

    用于外部服务器副本中的复制操作或跨主要版本复制。

  • cloudsqlobservabilityadmin

    用于数据库可观测性。

  • cloudiamgroup@'%'

    用于 IAM 群组身份验证。

您不能删除或修改这些用户。

其他 MySQL 用户账号

您也可以创建其他 MySQL 用户账号,这是一种很好的做法,它让您可以为不同目的使用不同的 MySQL 用户账号。

您可以创建受限主机名的用户账号,或使用 SQL 命令限制用户账号的权限。

如需详细了解用户账号名称,请参阅 MySQL 文档中的指定账号名称。如需在 Cloud SQL 中创建新的 MySQL 用户,请参阅创建用户

MySQL 5.6 和 5.7 用户权限

MySQL 提供了可以为用户授予或移除的细化权限。这样,您就可以控制用户能在您的实例上执行的操作。

使用 Cloud SQL 创建的用户拥有与默认 MySQL 用户相同的权限。您可以使用 GRANTREVOKE 语句更改他们的权限。

使用 mysql 客户端创建用户时,您必须使用 GRANT 语句明确授予该用户权限。

如需详细了解 MySQL 支持的权限,请参阅 MySQL 提供的权限

MySQL 8.0 用户权限 (cloudsqlsuperuser)

在 MySQL 8.0 for Cloud SQL 中,当您创建新用户时,用户会被自动授予 cloudsqlsuperuser 角色。cloudsqlsuperuser 角色是一个包含多个 MySQL 权限的 Cloud SQL 角色。此角色会向用户授予所有 MySQL 静态权限,但 SUPERFILE 除外。

cloudsqlsuperuser 角色仅支持基于 MySQL 8.0 小版本的以下动态权限

MySQL 8.0.18

MySQL 8.0.26

MySQL 8.0.27

MySQL 8.0.28

MySQL 8.0.29(已废弃)

MySQL 8.0.30 及更高版本

cloudsqlsuperuser 角色不支持 mysql 数据库上的任何数据定义语言 (DDL) 操作。

如需查看 cloudsqlsuperuser 角色被授予的完整权限列表,请在 mysql 客户端中执行 SHOW GRANTS 语句:

SHOW GRANTS FOR 'cloudsqlsuperuser'

MySQL 8.4 用户权限 (cloudsqlsuperuser)

与 Cloud SQL for MySQL 8.0 类似,在 Cloud SQL for MySQL 8.4 中,当您创建新用户时,用户会被自动授予 cloudsqlsuperuser 角色。

在 MySQL 8.4 中,cloudsqlsuperuser 角色具有与 MySQL 8.0.x 相同的权限。不过,MySQL 8.4 与 MySQL 8.0.x 存在以下主要差异:

此外,Cloud SQL for MySQL 8.4 不会授予 MySQL 8.4 中引入的 TRANSACTION_GTID_TAGTELEMETRY_LOG_ADMIN 权限。

后续步骤