Spanner 的精细访问权限控制结合了 搭配使用 Identity and Access Management (IAM) 基于 SQL 角色的访问权限控制。借助精细的访问权限控制,您可以定义数据库角色、向角色授予特权,以及创建 IAM 政策,以向 IAM 主体授予数据库角色的权限。
作为管理员,您必须为各个 IAM 启用精细的访问权限控制机制 多个主账号主账号 启用了精细访问权限控制的用户(“精细访问权限控制用户”)必须假定使用数据库 角色才能访问 Spanner 资源。
非精细访问权限控制用户的资源访问权限受 IAM 数据库级角色的约束。精细访问权限控制功能与现有的 IAM 数据库级访问权限控制功能完全兼容,并且可以共存。您可以使用它 单个数据库对象。如需控制对整个数据库的访问权限,请使用 IAM 角色。
借助精细的访问权限控制机制,您可以控制对表、列、视图和 变更数据流。
如需管理精细的访问权限控制,您可以使用以下 DDL 语句:
- 用于创建和删除数据库角色的
CREATE
和DROP
语句。 数据库角色是权限的集合。您可以创建 一个数据库最多 100 个角色 用于授予和撤消权限的
GRANT
和REVOKE
语句 数据库角色权限包括SELECT
、INSERT
、UPDATE
、DELETE
和EXECUTE
。权限名称与同名 SQL 语句相对应。例如,具有INSERT
权限的角色可以对GRANT
语句中指定的表执行INSERT
SQL 语句。以下 DDL 语句会将表
employees
上的SELECT
授予hr_rep
数据库角色。GoogleSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO ROLE hr_rep;
PostgreSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO hr_rep;
有关权限的详细信息,请参阅 精细访问权限控制权限参考。
GRANT
语句,用于向其他角色授予角色以创建 具有继承的权限。
使用场景
以下是精细访问控制的示例用例:
- 角色为销售薪酬分析师的人力资源信息系统 销售管理和 HR 分析师,每个人都有不同的数据访问权限级别。 例如,薪酬分析师和销售管理人员不应看到社会保障号。
- 一款为乘客和司机提供不同服务账号和权限的共享车辆应用。
- 允许执行
SELECT
和INSERT
操作,但不允许执行UPDATE
和DELETE
操作的分类账。
Spanner 资源及其权限
下面列出了 Spanner 资源和精细访问权限控制 授予的权限。
- 架构
- 您可以向特定数据库角色授予架构的
USAGE
特权。对于 非默认架构,数据库角色必须具有USAGE
权限才能访问 数据库对象。权限检查如下所示 :
架构中是否有 USAGE
?
否:拒绝授予访问权限。
是:您对该表格还有适当的权限吗?
否:拒绝授予访问权限。
是:您可以访问该表。
- Tables
- 您可以向数据库角色授予表的
SELECT
、INSERT
、UPDATE
和DELETE
权限。对于交错表, 父表不会传播到子表。 - Columns
- 您可以针对
SELECT
INSERT
UPDATE
表格。此时,该权限仅适用于这些列。“DELETE
”不是 数据列。 - 视图
- 您可以授予一个数据视图的“
SELECT
”权限。视图仅支持SELECT
。Spanner 同时支持调用方的权限视图和定义方的权限视图。如果您使用调用方的权限创建视图,则数据库角色或用户需要对视图拥有SELECT
权限,还需要对视图中引用的底层对象拥有SELECT
权限,才能查询该视图。如果您 创建具有定义者权限的视图,以便查询视图、数据库角色或 用户只需要拥有数据视图的SELECT
权限。如需了解详情,请参阅 “观看次数”概览。 - 变更流
- 您可以针对变更数据流授予“
SELECT
”权限。您还必须向与变更数据流关联的读取函数授予EXECUTE
。如需了解详情,请参阅变更数据流的精细访问权限控制。 - 序列
- 您可以对序列授予
SELECT
和UPDATE
。如需了解详情,请参阅序列的精细访问权限控制。 - 模型
- 您可以为模型授予
EXECUTE
。如需了解详情,请参阅对模型的精细访问权限控制。
精细的访问权限控制系统角色
精细的访问权限控制会为每个数据库预定义的系统角色。 与用户定义的数据库角色一样,系统角色可以控制对 Spanner 资源的访问权限。
例如,精细访问控制用户需要被授予 spanner_sys_reader
系统角色才能访问密钥可视化工具,并且需要拥有 spanner_info_reader
系统角色才能在查询 INFORMATION_SCHEMA
表时查看未过滤的结果。
如需了解详情,请参阅精细访问权限控制系统角色。
数据库角色层次结构和继承
您可以创建数据库角色的层次结构,其中子角色会继承父级角色的特权。子角色称为成员 父级角色
例如,请考虑以下 GRANT
语句:
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE pii_access;
GRANT ROLE pii_access TO ROLE hr_manager, hr_director;
PostgreSQL
GRANT SELECT ON TABLE employees TO pii_access;
GRANT pii_access TO hr_manager, hr_director;
hr_manager
和 hr_director
是角色 pii_access
的成员,并继承了表 employees
上的 SELECT
权限。
hr_manager
和hr_director
也可以拥有成员,而这些成员
继承对“employees
”的“SELECT
”权限。
角色层次结构的深度没有限制,但查询性能 深入而广泛的角色层次结构可能会降低。
备份和恢复
Spanner 备份包含数据库角色 定义。从备份恢复数据库时,系统会重新创建数据库角色及其已授予的权限。但 IAM 政策不是数据库备份的一部分,因此您必须重新授予对 授予恢复数据库中主账号的数据库角色。
精细访问权限控制设置概览
下面简要说明了 通过精细的访问权限控制来保护数据。如需了解详情,请参阅配置精细访问权限控制。
您必须获得roles/spanner.admin
或
有 roles/spanner.databaseAdmin
个 IAM 角色可执行这些任务。
- 创建数据库角色并向这些角色授予权限。
- 可选:通过向其他角色授予角色,创建具有继承关系的角色层次结构。
- 对于每个要成为精细访问权限控制用户的主账号,请执行以下步骤:
- 为主体启用精细的访问权限控制。然后,系统会自动向主账号授予
public
数据库角色,该角色默认没有任何权限。这对每个主体来说都是一次性操作。 - 针对一个或多个项目授予 IAM 权限 授予主账号的数据库角色
- 在主账号被授予所有必需的数据库角色后, 如果主账号具有数据库级 IAM 角色, 请考虑撤消数据库级角色 确保主账号的访问权限控制仅通过一种方法管理。
- 为主体启用精细的访问权限控制。然后,系统会自动向主账号授予
限制
- 导出操作不会导出数据库角色和权限, 不能将其导入导入完成后,您必须手动设置角色和权限。
- Google Cloud 控制台中表页面的数据标签页不适用于 精细的访问权限控制用户
后续步骤
如需了解详情,请参阅以下主题:
- 使用精细访问权限控制访问数据库
- 变更数据流的精细访问权限控制
- 配置精细访问权限控制
- 精细访问权限控制权限参考
- 精细访问权限控制系统角色
- GoogleSQL
GRANT
和REVOKE
语句 - PostgreSQL
GRANT
和REVOKE
语句 - 对序列的精细访问权限控制
- 对模型的精细访问权限控制