CREATE ACCESS POLICY
创建一个访问策略,筛选用户和角色对表数据的访问。您可以为表的行和列创建访问策略。Vertica 对每个查询应用访问策略筛选器,并仅返回当前用户或角色允许的数据。
您不能对原生数组以外的复杂数据类型的列设置访问策略。如果表包含复杂类型的列,您仍然可以对其他列设置行访问策略和列访问策略。
语法
CREATE ACCESS POLICY ON [[database.]schema.]table
{ FOR COLUMN column | FOR ROWS WHERE } expression [GRANT TRUSTED] { ENABLE | DISABLE }
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- 表
- 包含目标列或行的表。
-
FOR COLUMN 列
- 应用此访问策略的列。该列可以是原生数组,但不支持其他复杂类型。(请参阅复杂类型。)
FOR ROWS WHERE
- 应用此访问策略的行。
- 表达式
- 指定访问行或列数据的条件的 SQL 表达式:
GRANT TRUSTED
指定 GRANT 语句在确定用户是否可以对目标表执行 DML 操作时优先于访问策略。如果省略,则只有在访问策略允许用户查看原始未更改状态的存储数据时,用户才能修改表数据。有关详细信息,请参阅访问策略和 DML 操作。
重要
GRANT TRUSTED 仅影响 DML 操作,并且不允许用户查看访问策略将屏蔽的数据。指定此选项可能允许具有某些授权的用户更新他们无法查看的数据。ENABLE | DISABLE
- 是否启用访问策略。您可以使用 ALTER ACCESS POLICY 启用和禁用现有的访问策略。
特权
非超级用户:表的所有权
限制
访问策略具有以下限制:
-
一列只能有一个访问策略。
-
不能为除原生数组以外的复杂类型列设置列访问策略。
-
不能为 Flex 表中的实体化列设置列访问策略。可以为
__raw__
列设置访问策略,但此举将限制对整个表的访问。 -
行访问策略对临时表和具有聚合投影的表无效。
-
访问策略表达式不能包含:
-
子查询
-
聚合函数
-
分析函数
-
用户定义的转换函数 (UDTF)
-
-
如果查询优化器无法使用计算值替换仅涉及常量的确定性表达式,则会阻止所有 DML 操作,例如 INSERT。