本页面介绍了 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_expanded
、audit_log_supported_ops
、audit_log_rules
、cloudsql_replica_index
、db
、event
、func
、heartbeat
、plugin
、proc
、user
和 tables_priv
。
对于 MySQL 5.7,列表如下:
audit_log_rules_expanded
、audit_log_supported_ops
、audit_log_rules
、cloudsql_replica_index
、db
、event
、func
、gtid_executed
、heartbeat
、plugin
、proc
、user
和 tables_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'@'%'
。首次使用此账号连接和管理数据库实例。默认用户拥有除 SUPER 和 FILE 以外的所有数据库权限。在 Cloud SQL 中,您无法重命名 'root'@'%'
。
root'@'%
的默认设置是没有密码,MySQL 不要求您为 root'@'%
使用密码。但是,由于大多数 MySQL 安装中都存在 root'@'%
,因此 root'@'%
用户是未经授权访问的常见目标。一旦获得对您的实例的访问权限,任何人员或程序都可以几乎无限制地访问和控制您的实例和数据。因此,我们建议您使用安全系数高的密码配置 root'@'%
用户或删除此用户。如需有关配置默认用户账号的帮助,请参阅配置默认用户账号。
系统用户
系统用户有七个:
root@localhost
、root@127.0.0.1
、root@::1
用于提供代管式数据库服务。
cloudsqlreplica@%
用作副本的复制用户。
cloudsqlimport@localhost
,cloudsqlimport@127.0.0.1
用于数据导入。
cloudsqlexport@localhost
,cloudsqlexport@127.0.0.1
用于数据导出。
cloudsqloneshot
用于其他数据库操作。
cloudsqlapplier@localhost
用于外部服务器副本中的复制操作或跨主要版本复制。
cloudsqlobservabilityadmin
用于数据库可观测性。
cloudiamgroup@'%'
用于 IAM 群组身份验证。
您不能删除或修改这些用户。
其他 MySQL 用户账号
您也可以创建其他 MySQL 用户账号,这是一种很好的做法,它让您可以为不同目的使用不同的 MySQL 用户账号。
您可以创建受限主机名的用户账号,或使用 SQL 命令限制用户账号的权限。
如需详细了解用户账号名称,请参阅 MySQL 文档中的指定账号名称。如需在 Cloud SQL 中创建新的 MySQL 用户,请参阅创建用户。
MySQL 5.6 和 5.7 用户权限
MySQL 提供了可以为用户授予或移除的细化权限。这样,您就可以控制用户能在您的实例上执行的操作。
使用 Cloud SQL 创建的用户拥有与默认 MySQL 用户相同的权限。您可以使用 GRANT
或 REVOKE
语句更改他们的权限。
使用 mysql
客户端创建用户时,您必须使用 GRANT
语句明确授予该用户权限。
如需详细了解 MySQL 支持的权限,请参阅 MySQL 提供的权限。
MySQL 8.0 用户权限 (cloudsqlsuperuser
)
在 MySQL 8.0 for Cloud SQL 中,当您创建新用户时,用户会被自动授予 cloudsqlsuperuser
角色。cloudsqlsuperuser
角色是一个包含多个 MySQL 权限的 Cloud SQL 角色。此角色会向用户授予所有 MySQL 静态权限,但 SUPER
和 FILE
除外。
cloudsqlsuperuser
角色仅支持基于 MySQL 8.0 小版本的以下动态权限:
MySQL 8.0.18
MySQL 8.0.26
MySQL 8.0.27
MySQL 8.0.28
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
MySQL 8.0.29(已废弃)
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
SENSITIVE_VARIABLES_OBSERVER
MySQL 8.0.30 及更高版本
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
SENSITIVE_VARIABLES_OBSERVER
FIREWALL_EXEMPT
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 存在以下主要差异:
- 移除了
SET_USER_ID
权限,并将其替换为新引入的ALLOW_NONEXISTENT_DEFINER
和SET_ANY_DEFINER
权限。 - 授予
FLUSH_PRIVILEGES
作为RELOAD
权限的子集。此授权并非替代RELOAD
权限,并且RELOAD
权限仍会授予以实现向后兼容性。 - 授予新的
OPTIMIZE_LOCAL_TABLE
权限。
此外,Cloud SQL for MySQL 8.4 不会授予 MySQL 8.4 中引入的 TRANSACTION_GTID_TAG
或 TELEMETRY_LOG_ADMIN
权限。
后续步骤
- 为实例配置
root
用户账号。 - 创建和管理用户。
- 创建和管理数据库。
- 查看关于 MySQL 用户的 MySQL 文档。
- 请参阅关于 MySQL 所提供权限的 MySQL 文档。
- 了解连接到实例的选项。