Перейти к основному содержимому

SET SESSION AUTHORIZATION

примечание

Эта страница переведена при помощи нейросети GigaChat.

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 сбрасывают идентификаторы пользователя сеанса и текущего пользователя на имя изначального (аутентифицированного) пользователя. Эти формы команды может выполнять любой пользователь.

Примечания

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

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

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

SET ROLE