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