SET SESSION AUTHORIZATION#
SET SESSION AUTHORIZATION
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
сбрасывают идентификаторы сессии и текущего пользователя на исходное имя аутентифицированного пользователя. Эти формы могут быть выполнены любым пользователем.
Примечания
Внутри функции SECURITY DEFINER
нельзя использовать команду SET SESSION AUTHORIZATION
.
Примеры
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
, но эти варианты не имеют практического значения. Tantor BE позволяет использовать синтаксис идентификаторов ("
), чего не позволяет SQL. SQL не позволяет выполнять эту команду во время транзакции; Tantor BE не делает такого ограничения, потому что нет причин для этого. Модификаторы username
"SESSION
и LOCAL
являются расширением Tantor BE, также как и синтаксис RESET
.
Привилегии, необходимые для выполнения этой команды, остаются определенными реализацией стандарта.