精细的访问权限控制权限

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

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

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

SELECT

允许此角色对表执行 SELECT 语句。如果指定了列列表,则该权限仅对这些列有效。如果未指定列列表,则该权限适用于表中的所有列,包括之后添加的列。

  • 针对某个表的列子集授予 SELECT 权限后,FGAC 用户便无法再对该表使用 SELECT *。对该表中的查询必须命名所有要包含的列。

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

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

  • 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;

在前面的最终示例中,两个已命名的所有列都必须存在于两个表中。

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 admin;

更多信息

有关详情,请参阅: