Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

SET ROLE

Устанавливает идентификатор текущей роли в рамках сессии.

Синтаксис

SET [SESSION | LOCAL] ROLE <rolename>

SET [SESSION | LOCAL] ROLE NONE

RESET ROLE

Описание

Эта команда меняет идентификатор текущей роли в контексте активной SQL-сессии на rolename. Имя роли может быть записано как в виде идентификатора, так и в виде строковой константы. После выполнения команды SET ROLE разрешения для команд SQL проверяются так, как если бы сессия изначально была открыта с указанной ролью.

Указанное имя роли должно соответствовать роли, членом которой является текущий пользователь сессии. Если пользователь сессии является суперпользователем, можно выбрать любую роль.

NONE и RESET сбрасывают идентификатор текущей роли, устанавливая его равным идентификатору текущей роли сессии. Эти формы команды могут выполняться любым пользователем.

Параметры

Параметр Описание

SESSION

Указывает, что команда действует в рамках текущей сессии. Это поведение по умолчанию

LOCAL

Указывает, что команда действует только в рамках текущей транзакции. После COMMIT или ROLLBACK в силу вновь вступает значение, определенное на уровне сессии. Обратите внимание, что команда SET LOCAL не будет иметь никакого эффекта, если она выполняется вне транзакции

rolename

Имя роли, которая будет использоваться для проверки прав доступа в этой сессии

NONE

RESET

Сбросить идентификатор текущей роли на идентификатор текущей роли сессии (той роли, которая использовалась для входа в систему)

Примечания

С помощью этой команды можно как добавить привилегии, так и ограничить их. Если роль пользователя сессии имеет атрибут INHERIT, то она автоматически получает все привилегии роли, для которой можно выполнить SET ROLE; в этом случае SET ROLE фактически отменяет все привилегии, назначенные непосредственно пользователю сессии и другим ролям, членом которых он является, оставляя только привилегии, доступные указанной роли. С другой стороны, если роль пользователя сессии имеет атрибут NOINHERIT, команда SET ROLE отменяет привилегии, назначенные непосредственно пользователю сессии, и вместо этого назначает привилегии, доступные указанной роли.

В частности, когда суперпользователь передает в команду SET ROLE роль, которая не является ролью суперпользователя, он теряет свои привилегии суперпользователя.

SET ROLE оказывает действие, сравнимое с SET SESSION AUTHORIZATION, но проверка привилегий отличается. Также SET SESSION AUTHORIZATION определяет, какие роли разрешены для последующих команд SET ROLE, тогда как при смене ролей командой SET ROLE не меняет набор ролей, разрешенных для последующих команд SET ROLE.

SET ROLE не обрабатывает переменные сессии, указанные в параметрах роли ALTER ROLE; обработка переменных сессии происходит только при подключении.

Примеры

SELECT SESSION_USER, CURRENT_USER;
 session_user | current_user
--------------+--------------
 peter        | peter
SET ROLE 'paul';

SELECT SESSION_USER, CURRENT_USER;
 session_user | current_user
--------------+--------------
 peter        | paul

Совместимость

Greengage DB принимает идентификаторы (rolename), в то время как стандарт SQL требует, чтобы имя роли записывалось в виде строковой константы. SQL не допускает выполнять эту команду в транзакции; в Greengage DB такого ограничения нет. Модификаторы SESSION и LOCAL являются расширением Greengage DB, как и синтаксис RESET.

См. также