类别:

上下文函数 (会话对象)

INVOKER_ROLE

返回执行查询的对象的账户级角色的名称,或者如果角色的名称是数据库角色,则返回 NULL。

另请参阅:

高级列级安全主题

本主题内容:

语法

INVOKER_ROLE()
Copy

实参

无。

使用说明

  • 如果将 INVOKER_ROLE 函数与 掩码策略 结合使用,请验证您的 Snowflake 账户是否为 Enterprise Edition 或更高版本。

  • 下表总结了查询上下文和函数评估的角色之间的关系。

    上下文

    评估的角色

    用户

    CURRENT_ROLE

    CURRENT_ROLE。

    视图

    查看所有者角色。

    UDF

    UDF 所有者角色。

    拥有调用方权限的存储过程

    CURRENT_ROLE。

    拥有所有者权限的存储过程

    存储过程所有者角色。

    任务

    任务所有者角色。

    查询给定 的角色。

  • 下图显示了查询执行者、Snowflake 中的角色以及表或视图上的掩码策略之间的关系。

    调用者角色多视图

    其中:

    • R0, R1, R2, R3

      Snowflake 中的角色。

    • P1, P2, P3

      Snowflake 中的掩码策略。

    • V1, V2

      Snowflake 中的视图。

    • T

      Snowflake 中的表。

    根据该图,查询中 CURRENT_ROLE 和 INVOKER_ROLE 的值如下:

    策略

    CURRENT_ROLE

    INVOKER_ROLE

    P1

    R3

    R1

    P2

    R3

    R2

    P3

    R3

    R3

示例

以下示例展示了如何在掩码策略 SQL 表达式中使用 INVOKER_ROLE。

为未经授权的用户返回 NULL:

CREATE OR REPLACE MASKING POLICY mask_string AS
(val string) RETURNS string ->
CASE
  WHEN INVOKER_ROLE() IN ('ANALYST') THEN val
  ELSE NULL
END;
Copy

为未经授权的用户返回静态的掩码值:

CREATE OR REPLACE MASKING POLICY mask_string AS
(val string) RETURNS string ->
CASE
  WHEN INVOKER_ROLE() IN ('ANALYST') THEN val
  ELSE '********'
END;
Copy

使用 SHA2、SHA2_HEX 为未经授权的用户返回哈希值。

CREATE OR REPLACE MASKING POLICY mask_string AS
(val string) RETURNS string ->
CASE
  WHEN INVOKER_ROLE() IN ('ANALYST') THEN val
  ELSE SHA2(val)
END;
Copy
语言: 中文