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 表达式:
  • 行访问策略限制对表中特定行的访问,由策略的 WHERE 表达式指定。仅从表中提取满足此表达式的行。有关详细信息和示例用法,请参阅创建行访问策略

  • 列访问策略限制对特定表列的访问。访问策略表达式还可以指定如何将列数据呈现给特定的用户和角色。有关详细信息和示例用法,请参阅创建列访问策略

GRANT TRUSTED

指定 GRANT 语句在确定用户是否可以对目标表执行 DML 操作时优先于访问策略。如果省略,则只有在访问策略允许用户查看原始未更改状态的存储数据时,用户才能修改表数据。有关详细信息,请参阅访问策略和 DML 操作

ENABLE | DISABLE
是否启用访问策略。您可以使用 ALTER ACCESS POLICY 启用和禁用现有的访问策略。

特权

非超级用户:表的所有权

限制

访问策略具有以下限制:

  • 一列只能有一个访问策略。

  • 不能为除原生数组以外的复杂类型列设置列访问策略。

  • 不能为 Flex 表中的实体化列设置列访问策略。可以为 __raw__ 列设置访问策略,但此举将限制对整个表的访问。

  • 行访问策略对临时表和具有聚合投影的表无效。

  • 访问策略表达式不能包含:

    • 子查询

    • 聚合函数

    • 分析函数

    • 用户定义的转换函数 (UDTF)

  • 如果查询优化器无法使用计算值替换仅涉及常量的确定性表达式,则会阻止所有 DML 操作,例如 INSERT

另请参阅