精细访问权限控制概览

Spanner 的精细访问权限控制结合了 使用 Identity and Access Management (IAM) 基于 SQL 角色的访问权限控制。通过精细的访问权限控制, 向这些角色授予权限,以及创建 用于授予数据库角色权限的 IAM 政策 IAM 主账号。

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

非精细访问权限控制用户的资源访问权限受制于 按 IAM 数据库级角色分配 精细的访问权限控制完全兼容,可与现有 IAM 数据库级访问权限控制。您可以使用它 单个数据库对象。如需控制对整个数据库的访问权限,请使用 IAM 角色

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

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

  • 用于创建和删除数据库角色的 CREATEDROP 语句。 数据库角色是权限的集合。您可以创建 一个数据库最多 100 个角色
  • 用于授予和撤消权限的 GRANTREVOKE 语句 数据库角色权限包括 SELECTINSERTUPDATEDELETEEXECUTE。权限名称 对应于名称相似的 SQL 语句。例如,具有 INSERT 特权可以在 INSERT 特权表上执行 SQL 语句, 在 GRANT 语句中指定。

    以下 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 系统角色来访问 Key Visualizer,并且需要 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. 对于每个要成为精细访问权限控制用户的主账号,请执行以下步骤: <ph type="x-smartling-placeholder">
      </ph>
    1. 为主账号启用精细的访问权限控制机制。 然后,系统会自动向主账号授予 public 数据库角色。 后者默认没有权限此操作只需执行一次 主账号。
    2. 针对一个或多个项目授予 IAM 权限 授予主账号的数据库角色
    3. 向主账号授予所有必需的数据库角色后, 如果主账号具有数据库级 IAM 角色, 请考虑撤消数据库级角色 确保主账号的访问权限控制仅通过一种方法管理。

限制

  • 导出操作不会导出数据库角色和权限, 不能将其导入您必须手动设置角色和权限 。
  • Google Cloud 控制台中页面的数据标签页不适用于 精细的访问权限控制用户
  • UPDATEDELETE 操作需要对所有键列执行 SELECT 操作。

后续步骤

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