is_role_in_session (角色是否在会话中)
验证角色(或嵌套角色)是否在当前会话中处于活动状态。
此函数从 v3.1.4 版本开始支持。
语法
BOOLEAN is_role_in_session(VARCHAR role_name);
参数
role_name
:要验证的角色(也可以是嵌套角色)。支持的数据类型为 VARCHAR。
返回值
返回一个 BOOLEAN 值。 1
表示该角色在当前会话中处于活动状态。 0
表示相反。
示例
-
创建角色和用户。
-- 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; -
验证
r1
是否处于活动状态。结果表明此角色未处于活动状态。select is_role_in_session("r1");
+--------------------------+
| is_role_in_session('r1') |
+--------------------------+
| 0 |
+--------------------------+ -
运行 SET ROLE 命令以激活
r1
并使用is_role_in_session
来验证角色是否处于活动状态。结果表明r1
处于活动状态,并且嵌套在r1
中的角色r2
和r3
也处于活动状态。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 |
+--------------------------+