SET SESSION AUTHORIZATION

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

Синтаксис

SET [ SESSION | LOCAL ] SESSION AUTHORIZATION имя_пользователя
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION

Описание

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

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

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

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

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

Примечания

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

Примеры

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 позволяет вместо строковой константы имя_пользователя указывать некоторые другие выражения, но эти варианты не важны на практике. QHB допускает синтаксис идентификаторов (параметр «имя_пользователя»), а стандарт SQL — нет. SQL не разрешает выполнять эту команду во время транзакции; в QHB этого ограничения нет, потому что для него нет никаких причин. Указания SESSION и LOCAL являются расширением QHB, как и синтаксис RESET.

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

См. также

SET ROLE