Перейти к основному содержимому
Версия: 2.0.x

is_role_in_session

Проверяет, активна ли роль (или вложенная роль) в текущей сессии.

Эта функция поддерживается начиная с версии 3.1.4.

Синтаксис

BOOLEAN is_role_in_session(VARCHAR role_name);

Параметры

role_name: роль, которую вы хотите проверить (может быть также вложенной ролью). Поддерживаемый тип данных: VARCHAR.

Возвращаемое значение

Возвращает значение типа BOOLEAN. 1 означает, что роль активна в текущей сессии. 0 означает противоположное.

Примеры

  1. Создание ролей и пользователя.

    -- Создать три роли.
    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;
  2. Проверить, активна ли роль r1. Результат показывает, что эта роль не активна.

    select is_role_in_session("r1");
    +--------------------------+
    | is_role_in_session('r1') |
    +--------------------------+
    | 0 |
    +--------------------------+
  3. Выполнить команду 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 |
    +--------------------------+