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