is_role_in_session
ロール(またはネストされたロール)が現在のセッションでアクティブかどうかを確認します。
この関数は v3.1.4 以降でサポートされています。
構文
BOOLEAN is_role_in_session(VARCHAR role_name);
パラメータ
role_name
: 確認したいロール(ネストされたロールも可)。サポートされているデータ型は VARCHAR です。
戻り値
BOOLEAN 値を返します。1
はロールが現在のセッションでアクティブであることを示します。0
はその逆を示します。
例
-
ロールとユーザーを作成します。
-- 3 つのロールを作成します。
create role r1;
create role r2;
create role r3;
-- ユーザー u1 を作成します。
create user u1;
-- ロール r2 と r3 を r1 に渡し、r1 をユーザー u1 に付与します。この方法で、ユーザー u1 は 3 つのロールを持ちます: r1, r2, および r3。
grant r3 to role r2;
grant r2 to role r1;
grant r1 to user u1;
-- ユーザー u1 に切り替え、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 |
+--------------------------+