精细访问权限控制概览

Spanner 的精细访问权限控制结合了 搭配使用 Identity and Access Management (IAM) 基于 SQL 角色的访问权限控制。借助精细的访问权限控制,您可以定义数据库角色、向角色授予特权,以及创建 IAM 政策,以向 IAM 主体授予数据库角色的权限。

作为管理员,您必须为各个 IAM 启用精细的访问权限控制机制 多个主账号主账号 启用了精细访问权限控制的用户(“精细访问权限控制用户”)必须假定使用数据库 角色才能访问 Spanner 资源。

非精细访问权限控制用户的资源访问权限受 IAM 数据库级角色的约束。精细访问权限控制功能与现有的 IAM 数据库级访问权限控制功能完全兼容,并且可以共存。您可以使用它 单个数据库对象。如需控制对整个数据库的访问权限,请使用 IAM 角色

借助精细的访问权限控制机制,您可以控制对表、列、视图和 变更数据流。

如需管理精细的访问权限控制,您可以使用以下 DDL 语句:

  • 用于创建和删除数据库角色的 CREATEDROP 语句。 数据库角色是权限的集合。您可以创建 一个数据库最多 100 个角色
  • 用于授予和撤消权限的 GRANTREVOKE 语句 数据库角色权限包括 SELECTINSERTUPDATEDELETEEXECUTE。权限名称与同名 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 分析师,每个人都有不同的数据访问权限级别。 例如,薪酬分析师和销售管理人员不应看到社会保障号。
  • 一款为乘客和司机提供不同服务账号和权限的共享车辆应用。
  • 允许执行 SELECTINSERT 操作,但不允许执行 UPDATEDELETE 操作的分类账。

Spanner 资源及其权限

下面列出了 Spanner 资源和精细访问权限控制 授予的权限

架构
您可以向特定数据库角色授予架构的 USAGE 特权。对于 非默认架构,数据库角色必须具有 USAGE 权限才能访问 数据库对象。权限检查如下所示

架构中是否有 USAGE

否:拒绝授予访问权限。

是:您对该表格还有适当的权限吗?

否:拒绝授予访问权限。

是:您可以访问该表。

Tables
您可以向数据库角色授予表的 SELECTINSERTUPDATEDELETE 权限。对于交错表, 父表不会传播到子表。
Columns
您可以针对SELECTINSERTUPDATE 表格。此时,该权限仅适用于这些列。“DELETE”不是 数据列。
视图
您可以授予一个数据视图的“SELECT”权限。视图仅支持 SELECT。Spanner 同时支持调用方的权限视图和定义方的权限视图。如果您使用调用方的权限创建视图,则数据库角色或用户需要对视图拥有 SELECT 权限,还需要对视图中引用的底层对象拥有 SELECT 权限,才能查询该视图。如果您 创建具有定义者权限的视图,以便查询视图、数据库角色或 用户只需要拥有数据视图的 SELECT 权限。如需了解详情,请参阅 “观看次数”概览
变更流
您可以针对变更数据流授予“SELECT”权限。您还必须向与变更数据流关联的读取函数授予 EXECUTE。如需了解详情,请参阅变更数据流的精细访问权限控制
序列
您可以对序列授予 SELECTUPDATE。如需了解详情,请参阅序列的精细访问权限控制
模型
您可以为模型授予 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_managerhr_director 是角色 pii_access 的成员,并继承了表 employees 上的 SELECT 权限。

权限继承

hr_managerhr_director也可以拥有成员,而这些成员 继承对“employees”的“SELECT”权限。

角色层次结构的深度没有限制,但查询性能 深入而广泛的角色层次结构可能会降低。

备份和恢复

Spanner 备份包含数据库角色 定义。从备份恢复数据库时,系统会重新创建数据库角色及其已授予的权限。但 IAM 政策不是数据库备份的一部分,因此您必须重新授予对 授予恢复数据库中主账号的数据库角色。

精细访问权限控制设置概览

下面简要说明了 通过精细的访问权限控制来保护数据。如需了解详情,请参阅配置精细访问权限控制

您必须获得roles/spanner.admin或 有 roles/spanner.databaseAdmin 个 IAM 角色可执行这些任务。

  1. 创建数据库角色并向这些角色授予权限。
  2. 可选:通过向其他角色授予角色,创建具有继承关系的角色层次结构。
  3. 对于每个要成为精细访问权限控制用户的主账号,请执行以下步骤:
    1. 为主体启用精细的访问权限控制。然后,系统会自动向主账号授予 public 数据库角色,该角色默认没有任何权限。这对每个主体来说都是一次性操作。
    2. 针对一个或多个项目授予 IAM 权限 授予主账号的数据库角色
    3. 在主账号被授予所有必需的数据库角色后, 如果主账号具有数据库级 IAM 角色, 请考虑撤消数据库级角色 确保主账号的访问权限控制仅通过一种方法管理。

限制

  • 导出操作不会导出数据库角色和权限, 不能将其导入导入完成后,您必须手动设置角色和权限。
  • Google Cloud 控制台中页面的数据标签页不适用于 精细的访问权限控制用户

后续步骤

如需了解详情,请参阅以下主题: