本页面介绍了您可以为数据库角色授予的权限,以便进行精细的访问权限控制。
如需了解数据库角色和精细的访问权限控制,请参阅精细访问权限控制简介。
下表显示了精细的访问权限控制权限以及可向其授予的数据库对象。
选择 | 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;
更多信息
如需了解详情,请参阅以下主题: