is_role_in_session
Проверяет, активна ли роль (или вложенная роль) в текущей сессии.
Эта функция поддерживается начиная с версии 3.1.4.
Синтаксис
BOOLEAN is_role_in_session(VARCHAR role_name);
Параметры
role_name: роль, которую вы хотите проверить (может быть также вложенной ролью). Поддерживаемый тип данных: VARCHAR.
Возвращаемое значение
Возвращает значение типа BOOLEAN. 1 означает, что роль активна в текущей сессии. 0 означает противоположное.
Примеры
-
Создание ролей и пользователя.
-- Создать три роли.
create role r1;
create role r2;
create role r3;
-- Создать пользователя u1.
create user u1;
-- Передать роли r2 и r3 роли r1 и назначить r1 пользователю u1. Таким образом, пользователь u1 имеет три роли: r1, r2 и r3.
grant r3 to role r2;
grant r2 to role r1;
grant r1 to user 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активна, а ролиr2иr3, вложенные вr1, также активны.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 |
+--------------------------+