SET SESSION AUTHORIZATION
Устанавливает идентификатор роли сессии и идентификатор текущей роли в рамках сессии.
Синтаксис
SET [SESSION | LOCAL] SESSION AUTHORIZATION <rolename>
SET [SESSION | LOCAL] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION
Описание
Эта команда меняет идентификатор роли сессии и идентификатор текущей роли в рамках активной SQL-сессии на rolename. Имя роли может быть записано как в виде идентификатора, так и в виде строковой константы. С помощью этой команды можно, например, временно переключиться на непривилегированного пользователя, а затем снова переключиться на суперпользователя.
В качестве идентификатора роли сессии изначально устанавливается имя роли, предоставленное клиентом (возможно, прошедшее проверку подлинности). Идентификатор текущей роли обычно совпадает с идентификатором пользователя сессии, но может временно изменяться в контексте функций setuid и аналогичных механизмов; его также можно изменить с помощью команды SET ROLE. Идентификатор текущего пользователя принимается во внимание при проверке разрешений.
Идентификатор пользователя сессии может быть изменен только в том случае, если начальный пользователь сессии (аутентифицированный пользователь) имеет права суперпользователя. Иначе эта команда принимается только в том случае, если в ней указано имя аутентифицированного пользователя.
Формы DEFAULT и RESET сбрасывают идентификаторы сессии и текущего пользователя так, что текущим становится пользователь, изначально проходивший аутентификацию. Эти формы могут выполняться любым пользователем.
Параметры
| Параметр | Описание |
|---|---|
SESSION |
Указывает, что команда действует в рамках текущей сессии. Это поведение по умолчанию |
LOCAL |
Указывает, что команда действует только в рамках текущей транзакции. После |
rolename |
Имя роли, которая будет установлена |
NONE RESET |
Сбросить идентификаторы сессии и текущей роли на идентификатор роли, которая использовалась для входа в систему |
Примеры
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 допускает использование некоторых других выражений вместо строковой константы rolename, но на практике это не очень полезно. Greengage DB принимает идентификаторы (rolename), стандарт SQL — нет. SQL не позволяет выполнять эту команду в транзакции; Greengage DB не накладывает такого ограничения. Модификаторы SESSION и LOCAL являются расширением Greengage DB, как и синтаксис RESET.