类别:

:doc:`/sql-reference/functions-context`(会话对象)

IS_ORGANIZATION_USER_GROUP_IN_SESSION

假设角色是从 组织用户组 导入的,验证该角色是否属于用户在当前会话中的活动主角色或次要角色层次结构中。

如果指定角色未链接到组织用户组,则该函数返回 FALSE。

另请参阅:

高级列级安全主题

语法

IS_ORGANIZATION_USER_GROUP_IN_SESSION( '<string_literal>' )
Copy

实参

'string_literal'

角色的名称。

返回

TRUE

会话中的当前用户活动 主要角色或辅助角色 继承指定实例角色的权限。

DEFAULT_SECONDARY_ROLES 值为 ALL 时,授予用户的 任何 角色都会继承指定角色的权限。

指定的角色可以是当前的主要角色或辅助角色(即分别由 CURRENT_ROLECURRENT_SECONDARY_ROLES 返回的角色),也可以是角色层次结构中更低级的任何角色。

FALSE

以下任一内容:

  • 指定的角色是未链接到组织用户组的本地角色。

  • 指定的角色在当前主要角色或辅助角色的角色层次结构中的更高层次,或者根本不在角色层次结构中。

NULL

在数据共享使用者账户中,如果引用共享对象(例如安全 UDF 或安全视图),例如在掩码策略条件下,则此函数返回 NULL。此行为可防止在数据共享使用者账户中公开角色层次结构。

使用说明

IS_ORGANIZATION_USER_GROUP_IN_SESSION 函数与 IS_DATABASE_ROLE_IN_SESSIONIS_ROLE_IN_SESSION 函数类似。以下用法说明适用于所有这些上下文函数:

  • 使用一种语法。

  • 名称语法:

    • 只能传递一个角色名称作为实参。

    • 该实参必须是字符串,并使用与 Snowflake 中角色存储方式相同的大小写。有关详细信息,请参阅 标识符要求

  • 列语法:

    • 只能传递一列作为实参。

    • 该列必须是 STRING 数据类型。

    • 将列指定为以下列类型之一:

      • column_name

      • table_name.column_name

      • schema_name.table_name.column_name

      • database_name.schema_name.table_name.column_name

  • 虚拟列

    支持虚拟列,虚拟列包含表达式计算值的结果,而不是存储在表中的计算值。

    SELECT IS_ROLE_IN_SESSION(UPPER(authz_role)) FROM t1;
    
    Copy

    只有当表达式为列名称提供别名时,才支持虚拟列:

    CREATE VIEW v2 AS
    SELECT
      authz_role,
      UPPER(authz_role) AS upper_authz_role
    FROM t2;
    
    SELECT IS_ROLE_IN_SESSION(upper_authz_role) FROM v2;
    
    Copy
  • 策略:

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

    Snowflake 建议在策略条件需要评估角色层次结构和继承权限时使用此函数。

  • 结果缓存:

    如果在掩码策略或行访问策略中使用此函数,并且策略和受策略保护的表或列自上一个查询以来并未更改,则可以使用 RESULT_SCAN 函数返回受保护表的查询结果。结果缓存仅适用于使用非字面语法时。

  • 这些函数不能在物化视图定义中使用,因为这些函数不是确定性的,并且 Snowflake 无法确定要物化的数据。

示例

如果以下条件为 True,则以下示例返回 TRUE

  • 角色 analyst 是在将组织用户组添加到账户时创建或链接的。

  • 授予 analyst 角色的权限由会话中的当前角色继承。

SELECT IS_ORGANIZATION_USER_GROUP_IN_SESSION('ANALYST');
Copy
语言: 中文