Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Устанавливает текущий идентификатор роли для текущей сессии.
SET [SESSION | LOCAL] ROLE rolename
SET [SESSION | LOCAL] ROLE NONE
RESET ROLE
Эта команда устанавливает текущий идентификатор роли в контексте текущей SQL-сессии в значение rolename. Имена ролей можно указывать как идентификаторы или строковые литералы. После выполнения команды SET ROLE проверка прав доступа для SQL-команд будет производиться так, как если бы новая роль была изначально авторизованной при входе.
Указанное имя роли (rolename) должно быть ролью, к которой принадлежит пользователь текущей сессии. Если пользователь сессии является суперпользователем, он может выбрать любую роль.
Формы NONE и RESET сбрасывают текущий идентификатор роли до идентификатора текущей сессионной роли. Эти формы могут быть выполнены любым пользователем.
SESSION
LOCAL
rolename
NONE
RESET
Используйте эту команду для добавления или ограничения привилегий. Если роль пользователя сессии имеет атрибут INHERITS, она автоматически получает все привилегии каждой роли, для которой можно выполнить SET ROLE; в этом случае SET ROLE фактически отказывается от всех привилегий, назначенных непосредственно другим ролям, присвоенным пользователю сессии и его членам, оставляя только привилегии, доступные указанной роли. С другой стороны, если роль пользователя сессии имеет атрибут NOINHERITS, 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
YMatrix позволяет использовать синтаксис идентификаторов (rolename), тогда как стандарт SQL требует, чтобы имена ролей записывались как строковые литералы. Стандарт SQL не допускает выполнение этой команды во время транзакции. YMatrix не имеет такого ограничения. Модификаторы SESSION и LOCAL являются расширениями YMatrix, как и синтаксис RESET.