is_role_in_session
Описание
Проверяет, активна ли роль (или вложенная роль) в текущей сессии.
Эта функция поддерживается начиная с версии 1.5.0.
Синтаксис
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 и выполняйте операции от имени 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 |
+--------------------------+