Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инструкция SET ROLE

Инструкция SET ROLE включает и отключает конкретные роли для текущего сеанса.


Синтаксис SQL 2003
SET ROLE {NONE | имя_роли}

Ключевые слова

NONE

Присваивает текущему сеансу текущую роль (CURRENTROLE), имя роли

Связывает с текущим сеансом набор привилегий, присвоенных указанной роли.


Общие правила

Если пользовательский сеанс открывается при помощи инструкции CONNECT, то выполнение инструкции SET ROLE предоставляет этому сеансу привилегии, присвоенные указанной роли. Команду SET ROLE можно использовать только вне транзакций.

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


Советы и хитрости программирования

Сеансы создаются при помощи инструкции CONNECT, тогда как роли создаются при помощи инструкции CREATE ROLE.

В большинстве платформ существует метод назначения или изменения роли, используемой в пользовательском сеансе. Команда SET ROLE является методом назначения роли в ходе пользовательского сеанса стандарта ANSI, но этот метод не очень широко поддерживается разными платформами. Обращайтесь к документации своей платформы, чтобы найти аналогичную команду, поддерживаемую конкретным производителем.


DB2

Не поддерживается. Платформа DB2 пока не поддерживает и роли.


MySQL

Команда SET ROLE не поддерживается. Аналогичный метод управления параметрами соединения в MySQL настраивается в разделе [client] конфигурационного файла в директории home. Например:

[client]
host=server_name
user=user_name
password=client_password

Чтобы быстро переключаться между ролями, вы можете переназначить свойства host, user и password при помощи присвоения новых значений переменным MYSQL LIOST, USER (только для Windows) и MYSQL_PWD соответственно (метод с использованием MYSQL_PWD является небезопасным, поскольку другие пользователи могут просматривать этот файл).


Oracle

Когда пользователь инициирует соединение, Oracle явным образом назначает этому пользователю роли. Роль (роли), с использованием которой работает сеанс, можно изменить при помощи команды SET ROLE, если только пользователь имеет соответствующие права доступа. В Oracle используется инициализационный параметр ENABLEDROLES (файл INIT.ORA), который контролирует максимальное число ролей, которые могут использоваться одновременно. Синтаксис данной инструкции в Oracle следующий.

SET HOLE {имя_роли [IDENTIFIED BY пароль] [, …] | [ALL [EXCEPT имя_роли […]] ; NONE}

Опции команды SET ROLE следующие.

имя роли

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

IDENTIFIED В Y пароль

Если у данной роли есть пароль, то с помощью этого предложения можно указать его.

ALL

Включаются все роли, присвоенные текущему пользователю, в том числе те, которые присвоены через другие роли. Это предложение нельзя использовать с предложением IDENTIFIED BY.

ЕХСЕРТ

Указывается список ролей, которые исключаются из команды SET ROLE ALL.

NONE

Отключаются все роли, в том числе роль по умолчанию.

Доступ к ролям, которые имеют пароли, осуществляется только при помощи инструкции SET право имя_роли IDENTIFIED BY пароль. Для примера назначим текущему сеансу роли readonly и updater с паролями editor и red_marker соответственно.

SET ROLE readonly IDENTIFIED BY editor, updater IDENTIFIED BY redjuarker;

Чтобы включить все роли, за исключением роли read_write, используется следующая инструкция.

SET ROLE ALL EXCEPT read_write;


PostgreSQL

Инструкция SET ROLE не поддерживается. Однако поддерживается команда ANSI SQL SET SESSION AUTHORIZATION, с помощью которой можно получить сходные результаты.


SQL Server

Не поддерживается.

Источник