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