本页面介绍了 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'@'%'。首次使用此账号连接和管理数据库实例。默认用户拥有除 SUPER 和 FILE 以外的所有数据库权限。在 Cloud SQL 中,您无法重命名 'root'@'%'。
root'@'% 的默认设置是没有密码,MySQL 不要求您为 root'@'% 使用密码。但是,由于大多数 MySQL 安装中都存在 root'@'%,因此 root'@'% 用户是未经授权访问的常见目标。一旦获得对您的实例的访问权限,任何人员或程序都可以几乎无限制地访问和控制您的实例和数据。因此,我们建议您使用安全系数高的密码配置 root'@'% 用户或删除此用户。如需有关配置默认用户账号的帮助,请参阅配置默认用户账号。
系统用户
Cloud SQL 支持以下系统用户:
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 群组身份验证。
cloudsqlreadonly用于对系统表执行只读操作。
您不能删除或修改这些用户。
其他 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_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPT
MySQL 8.0.29(已废弃)
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPTSENSITIVE_VARIABLES_OBSERVER
MySQL 8.0.30 及更高版本
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPTSENSITIVE_VARIABLES_OBSERVERFIREWALL_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 文档。
- 了解连接到实例的选项。