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