SET SESSION AUTHORIZATION#

SET SESSION AUTHORIZATION

SET SESSION AUTHORIZATION

SET SESSION AUTHORIZATION — устанавливает идентификатор пользователя сессии и текущий идентификатор пользователя текущей сессии

Синтаксис

SET [ SESSION | LOCAL ] SESSION AUTHORIZATION user_name
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION

Описание

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

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

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

Модификаторы SESSION и LOCAL действуют так же, как и для обычной команды SET.

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

Примечания

Внутри функции SECURITY DEFINER нельзя использовать команду SET SESSION AUTHORIZATION.

Примеры

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 позволяет использовать некоторые другие выражения вместо литерала user_name, но эти варианты не имеют практического значения. Tantor SE позволяет использовать синтаксис идентификаторов ("username"), чего не позволяет SQL. SQL не позволяет выполнять эту команду во время транзакции; Tantor SE не делает такого ограничения, потому что нет причин для этого. Модификаторы SESSION и LOCAL являются расширением Tantor SE, также как и синтаксис RESET.

Привилегии, необходимые для выполнения этой команды, остаются определенными реализацией стандарта.

См. также

SET ROLE