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, как и синтаксис RESET, являются расширением QHB.
Согласно стандарту, права, необходимые для выполнения этой команды, определяются реализацией.