SET SESSION AUTHORIZATION

Устанавливает идентификатор сессионной роли и идентификатор текущей роли текущей сессии.

Обзор

SET [SESSION | LOCAL] SESSION AUTHORIZATION <rolename>

SET [SESSION | LOCAL] SESSION AUTHORIZATION DEFAULT

RESET SESSION AUTHORIZATION

Описание

Эта команда устанавливает идентификатор сессионной роли и идентификатор текущей роли контекста текущей SQL-сессии в значение rolename. Имя роли может быть указано либо как идентификатор, либо как строковый литерал. С помощью этой команды, например, можно временно стать пользователем без привилегий, а затем снова переключиться на суперпользователя.

Идентификатор сессионной роли изначально устанавливается равным имени роли (возможно, прошедшей аутентификацию), предоставленному клиентом. Идентификатор текущей роли обычно совпадает с идентификатором сессионного пользователя, но может временно изменяться в контексте функций с правами владельца (setuid) и аналогичных механизмов; его также можно изменить с помощью команды SET ROLE. Идентификатор текущего пользователя используется при проверке прав доступа.

Идентификатор сессионного пользователя может быть изменён только в том случае, если исходный пользователь сессии (аутентифицированный пользователь) обладал привилегиями суперпользователя. В противном случае команда принимается только в том случае, если она указывает имя аутентифицированного пользователя.

Формы DEFAULT и RESET устанавливают идентификаторы сессионной и текущей ролей равными имени роли, использованной при входе в систему. Эти формы могут выполняться любым пользователем.

Параметры

  • SESSION
    • Указывает, что команда действует для текущей сессии. Это значение по умолчанию.
  • LOCAL
    • Указывает, что команда действует только в пределах текущей транзакции. После выполнения COMMIT или ROLLBACK снова вступает в силу настройка уровня сессии. Обратите внимание, что SET LOCAL будет казаться не имеющим эффекта, если выполняется вне транзакции.
  • rolename
    • Имя роли, которую необходимо принять.
  • NONE
  • RESET
    • Сбрасывает идентификаторы сессионной и текущей ролей до значения роли, использованной при входе.

Примеры

SELECT SESSION_USER, CURRENT_USER;
 session_user | current_user 
--------------+--------------
 peter        | peter

SET SESSION AUTHORIZATION 'paul';

SELECT SESSION_USER, CURRENT_USER;
 session_user | current_user 
--------------+--------------
 paul         | paul

Совместимость

Стандарт SQL допускает использование других выражений вместо литерала rolename, однако эти возможности на практике не имеют большого значения. База данных разрешает синтаксис идентификатора (rolename), который не предусмотрен стандартом SQL. Стандарт SQL не позволяет выполнять эту команду во время транзакции; база данных не накладывает такого ограничения. Модификаторы SESSION и LOCAL являются расширением базы данных, как и синтаксис RESET.

Смотрите также

SET ROLE