类别:

:doc:`/sql-reference/functions-context`(通用)

IS_DATABASE_ROLE_ACTIVATED(SYS_CONTEXT 函数)

如果在当前会话中激活了数据库角色,则返回 VARCHAR 值 'TRUE'

另请参阅:

SYS_CONTEXT(SNOWFLAKE$SESSION 命名空间) IS_ROLE_ACTIVATED(SYS_CONTEXT 函数)

语法

SYS_CONTEXT(
  'SNOWFLAKE$SESSION' ,
  'IS_DATABASE_ROLE_ACTIVATED' ,
  '<database_role>'
)

实参

'SNOWFLAKE$SESSION'

指定您要调用函数以返回有关当前会话的上下文信息。

'IS_DATABASE_ROLE_ACTIVATED'

调用 IS_DATABASE_ROLE_ACTIVATED 函数。

'database_role'

指定要检查的数据库角色。该名称可以是完全限定名称,也可以是相对名称。

返回

该函数返回以下 VARCHAR 值之一:

  • 如果会话中的当前用户活动主要角色或辅助角色继承指定数据库角色的权限,则为 'TRUE'

  • 如果指定的数据库角色不在用户的活动角色层次结构中,或者数据库角色不存在,则为 'FALSE'

要将此返回值与 BOOLEAN 值 TRUE 或 FALSE 进行比较,请将返回值 转换 为 BOOLEAN。例如:

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'my_db_role')::BOOLEAN = TRUE;

使用说明

  • 此功能在应用于共享表的治理策略(例如掩码策略、行访问策略或投影策略)中不受支持。共享对象无法访问使用者会话状态。

  • 若不指定完全限定名称,函数将按如下方式确定数据库角色的数据库上下文:

    • 查询: 会话数据库(当前正在使用的数据库)。

    • 数据保护策略的主体: 包含受保护表或视图的数据库。

    • 共享: 使用者账户中的数据库。

  • 此函数不能用于物化视图定义,因为该函数不是确定性的。

示例

使用相对名称检查当前数据库中的数据库角色:

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'ANALYST_ROLE');
+-------------------------------------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'ANA...  |
+-------------------------------------------------------------------------+
| TRUE                                                                    |
+-------------------------------------------------------------------------+

使用完全限定名称检查其他数据库中的数据库角色:

SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'DB2.READER_ROLE');
+-------------------------------------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'DB ...  |
+-------------------------------------------------------------------------+
| TRUE                                                                    |
+-------------------------------------------------------------------------+