跳到主要内容
版本: 最新版本-3.5

is_role_in_session (角色是否在会话中)

验证角色(或嵌套角色)是否在当前会话中处于活动状态。

此函数从 v3.1.4 版本开始支持。

语法

BOOLEAN is_role_in_session(VARCHAR role_name);

参数

role_name:要验证的角色(也可以是嵌套角色)。支持的数据类型为 VARCHAR。

返回值

返回一个 BOOLEAN 值。 1 表示该角色在当前会话中处于活动状态。 0 表示相反。

示例

  1. 创建角色和用户。

    -- Create three roles.
    create role r1;
    create role r2;
    create role r3;

    -- Create user u1.
    create user u1;

    -- Pass roles r2 and r3 to r1, and grant r1 to user u1. This way, user u1 has three roles: r1, r2, and r3.
    grant r3 to role r2;
    grant r2 to role r1;
    grant r1 to user u1;

    -- Switch to user u1 and perform operations as u1.
    execute as u1 with no revert;
  2. 验证 r1 是否处于活动状态。结果表明此角色未处于活动状态。

    select is_role_in_session("r1");
    +--------------------------+
    | is_role_in_session('r1') |
    +--------------------------+
    | 0 |
    +--------------------------+
  3. 运行 SET ROLE 命令以激活 r1 并使用 is_role_in_session 来验证角色是否处于活动状态。结果表明 r1 处于活动状态,并且嵌套在 r1 中的角色 r2r3 也处于活动状态。

    set role "r1";

    select is_role_in_session("r1");
    +--------------------------+
    | is_role_in_session('r1') |
    +--------------------------+
    | 1 |
    +--------------------------+

    select is_role_in_session("r2");
    +--------------------------+
    | is_role_in_session('r2') |
    +--------------------------+
    | 1 |
    +--------------------------+

    select is_role_in_session("r3");
    +--------------------------+
    | is_role_in_session('r3') |
    +--------------------------+
    | 1 |
    +--------------------------+