本页面介绍您可为以下项目的数据库角色授予的权限: 精细的访问权限控制
如需了解数据库角色和精细的访问权限控制,请参阅 精细访问权限控制简介。
下表显示了精细的访问权限控制权限和数据库对象 权限。
选择 | INSERT | 更新 | 删除 | 执行 | 用法 | |
---|---|---|---|---|---|---|
架构 | ✓ | |||||
表 | ✓ | ✓ | ✓ | ✓ | ||
列 | ✓ | ✓ | ✓ | ✓ | ||
查看 | ✓ | |||||
变更数据流 | ✓ | |||||
变更数据流 读取函数 | ✓ | |||||
序列 | ✓ | ✓ | ||||
模型 | ✓ |
以下部分详细介绍了每项权限。
SELECT
允许此角色对表、视图、变更数据流、序列或模型进行读取或查询。
如果列列表是 则该权限仅对 列。如果未指定列列表,则该权限对所有 表中的列,包括之后添加的列。列列表不 允许的一种观看行为
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
权限 并且必须拥有SELECT
三个引用的列或 整个Singers
表。如果您创建了一个具有定义者权限的视图,那么要查询该视图,数据库 角色或用户只需要拥有数据视图的
SELECT
权限。例如: 假设在Albums
表上创建了视图AlbumsBudget
。CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
假设数据库角色
Analyst
执行查询SELECT * FROM AlbumsBudget
。此角色只需要对以下角色拥有SELECT
权限: 视图。它不需要对三个引用的列拥有SELECT
权限 或在Albums
表中添加。针对表的部分列授予
SELECT
权限后,FGAC 用户可以 不再对该表使用SELECT *
。针对该表的查询必须将所有 要包含的列。对生成的列授予
SELECT
权限时,未授予底层的SELECT
权限 基列。对于交错表,对父表授予的
SELECT
不会 传播到子表。如果您向变更数据流授予
SELECT
,则还必须向以下对象授予EXECUTE
: 变更数据流的表值函数。如需了解详情,请参阅 EXECUTE。当
SELECT
与特定列的聚合函数一起使用时, 例如SUM(col_a)
,则该角色必须具有这些列的SELECT
权限。 如果聚合函数未指定任何列(例如COUNT(*)
), 该角色必须具有对表中至少一个列的SELECT
权限。将
SELECT
与序列搭配使用时,您只能查看 拥有查看权限。
示例
GoogleSQL
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 orders_view TO ROLE hr_manager; GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;
PostgreSQL
GRANT SELECT ON TABLE employees TO hr_director; GRANT SELECT ON TABLE customers, orders, items TO account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep; GRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view GRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO hr_package;
INSERT
允许此角色向指定的表中插入行。如果列列表是 则该权限仅对那些 列。如果未指定列列表,则该权限对所有 表格中的列。
如果指定了列名称,则系统不会包含任何列 会在插入时获取默认值。
无法针对生成的列授予“
INSERT
”。
示例
GoogleSQL
GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT INSERT ON TABLE employees, contractors TO hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;
UPDATE
允许此角色更新指定表中的行。更新可以是
表列的子集。将此方法与序列结合使用时,
允许该角色对序列调用 get-next-sequence-value
函数。
除 UPDATE
权限外,该角色还需要具备
对所有键列和所有查询的列拥有 SELECT
权限。已查询
列包括 WHERE
子句中的列以及用于
计算更新后的列和生成的列的新值。
无法针对生成的列授予“UPDATE
”。
示例
GoogleSQL
GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT UPDATE ON TABLE employees, contractors TO hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;
DELETE
允许此角色从指定表中删除行。
无法在列级别授予“
DELETE
”。该角色还需要对所有键列以及可能使用的任何列具有
SELECT
权限, 包含在查询WHERE
子句中。对于 GoogleSQL 方言数据库中的交错表, 仅父级表需要
DELETE
权限。如果子表 指定ON DELETE CASCADE
时,即使子表中的行 子表的DELETE
权限。
示例
GoogleSQL
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
PostgreSQL
GRANT DELETE ON TABLE employees, contractors TO hr_admin;
EXECUTE
针对变更数据流授予 SELECT
权限时,您还必须针对以下内容授予 EXECUTE
权限:
read 函数。如需了解详情,请参阅
更改数据流读取函数和查询语法。
将此选项与模型结合使用时,将允许角色在 机器学习功能。
示例
以下示例显示如何向 EXECUTE
授予
名为“my_change_stream
”的变更数据流。
GoogleSQL
GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;
PostgreSQL
GRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;
用法
将 USAGE
授予命名架构后,该架构会提供访问
多个对象。USAGE
权限的授予者:
默认为默认架构。
后续步骤
如需了解详情,请参阅以下主题:
- 配置精细的访问权限控制
- 精细访问权限控制简介
- GRANT 和 REVOKE 语句(GoogleSQL 方言数据库)
- GRANT 和 REVOKE 语句(PostgreSQL 方言数据库)