精细的访问权限控制特权

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本页面介绍了您可以为数据库角色授予的权限,以便进行精细的访问权限控制。

如需了解数据库角色和精细的访问权限控制,请参阅精细访问权限控制简介

下表显示了精细的访问权限控制权限以及可向其授予的数据库对象。

选择 INSERT UPDATE 删除 执行
柱形图
查看
变更数据流
更改数据流的 TVF

以下部分提供了有关每项权限的详细信息。

SELECT

允许此角色读取、查询表或更改数据流。

  • 如果为某个表指定了列列表,则该权限仅对这些列有效。如果未指定列列表,则该权限适用于表中的所有列,包括后续添加的列。视图不允许列列表。

  • 由于 Cloud Spanner 目前仅支持调用方权限视图,因此数据库角色需要对视图具有 SELECT 权限,还需要对视图中引用的底层对象拥有 SELECT 权限。例如,假设对 Singers 表创建了 SingerNames 视图。

    CREATE VIEW SingerNames SQL SECURITY INVOKER AS
      SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
    

    再假设数据库角色 myRole 执行查询 SELECT * FROM SingerNames。该角色必须在视图上具有 SELECT,并且必须在三个引用列或整个 Singers 表中具有 SELECT

  • 向某个表的子集启用 SELECT 后,FGAC 用户无法再对该表使用 SELECT *。对该表的查询必须将要包含的所有列命名为。

  • 对生成的列授予的 SELECT 不会针对基础基本列授予 SELECT

  • 对于交错表,对父表授予的 SELECT 不会传播到子表。

  • 在变更流上授予 SELECT 时,您还必须为变更流的表值函数授予 EXECUTE。如需了解详情,请参阅执行

  • SELECT 与特定列(例如 SUM(col_a))上的聚合函数结合使用时,角色必须对这些列具有 SELECT 权限。如果聚合函数未指定任何列(例如 COUNT(*)),则该角色必须对表中的至少一个列具有 SELECT 权限。

示例

GRANT SELECT ON TABLE employees TO ROLE hr_director;

GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr;

GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager;

GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep;

GRANT SELECT ON VIEW ordersSummary TO ROLE hr_manager;

GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst;

INSERT

允许此角色向指定表插入行。如果指定了列列表,则该权限仅对这些列有效。如果未指定列列表,则该权限适用于表中的所有列。

  • 如果指定了列名称,则任何不包含的列都将在插入时获取默认值。

  • 无法对生成的列授予 INSERT

示例

GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager;

GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;

UPDATE

允许此角色更新指定表中的行。更新可以仅限于表列的子集。

  • 除了 UPDATE 权限之外,该角色还需要所有键列和所有查询的列的 SELECT 权限。查询的列包括 WHERE 子句中的列,以及用于计算更新后的列和生成的列的新值的列。

  • 无法对生成的列授予 UPDATE

示例

GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager;

GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;

DELETE

允许此角色删除指定表中的行。

  • 无法在列级别授予 DELETE

  • 该角色还需要对所有键列以及查询 WHERE 子句中可能包含的任何列使用 SELECT

  • 对于交错表,只需对父表具有 DELETE 权限。如果子表指定了 ON DELETE CASCADE,那么即使没有子表的 DELETE 权限,系统也会删除子表中的行。

示例

GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;

EXECUTE

在变更流上授予 SELECT 时,您还必须针对该变更流的表值函数 (TVF) 授予 EXECUTE。如需了解 TVF,请参阅更改流查询语法

示例

GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;

更多信息

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