Перейти к основному содержимому

is_role_in_session

Описание

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

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

Синтаксис

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 и выполняйте операции от имени 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 |
    +--------------------------+