Roles

В этом учебном материале вы узнаете, как создавать роли, предоставлять/отменять привилегии для ролей, включать/отключать роли, устанавливать роли по умолчанию и удалять роли (create roles, grant/revoke privileges to roles, enable/disable roles, set roles as the default, and drop roles) в Oracle/PLSQL с синтаксисом и примерами.

Описание

Role представляет собой набор или группу привилегий, которые могут быть предоставлены пользователям или другой роли. Это отличный способ для администраторов баз данных, чтобы сэкономить время и усилия.

Create Role

Роль создается для того, чтобы логически сгруппировать разрешения для пользователей. Обратите внимание, что для создания роли, вы должны иметь привилегии для создания системной роли.

Синтаксис

Синтаксис для создания роли в Oracle/PLSQL:

CREATE ROLE role_name
[ NOT IDENTIFIED |
IDENTIFIED {BY password | USING [schema.] package | EXTERNALLY | GLOBALLY } ;

role_name
Наименование новой роли, которую вы создаете. Это как вы будете ссылаться на группировку привилегий.
NOT IDENTIFIED
Это означает, что роль немедленно включена. Не требуется ни один пароль, чтобы включить роль.
IDENTIFIED
Означает, что пользователь должен быть авторизован, прежде чем роль будет включена.
BY password
Это означает, что пользователь должен ввести пароль, чтобы включить роль.
USING package
Означает, что вы создаете роль приложения - роль, которая включена только в приложениях с использованием авторизованного пакета.
EXTERNALLY
Это означает, что пользователь должен быть авторизован внешним сервисом для включения роли. Внешний сервис может быть операционная система или сервис третьей сторона.
GLOBALLY
Означает, что чтобы включить роль, пользователь должен быть авторизован службой каталогов предприятия.

Заметка

Если оба NOT IDENTIFIED и IDENTIFIED опущены в предложении CREATE ROLE, то роль будет создана как NOT IDENTIFIED.
Рассмотрим пример того, как создавать роль в Oracle/PLSQL.

Например:

Это первый пример создания роли под названием test_role.

Второй пример создает ту же роль под названием test_role, но теперь она защищена паролем test345.

Grant TABLE Privileges to Role

После того как вы создали роль в Oracle, ваш следующий шаг заключается в предоставлении привилегий для этой роли.

Так же, как вы предоставляете привилегии для пользователей, вы можете предоставить привилегии для роли. Давайте начнем с предоставления привилегий таблицы на роль. Таблица привилегий может быть любой комбинацией из: SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER, INDEX или ALL.

Синтаксис

Синтаксис для предоставления привилегий таблице на роль в Oracle/PLSQL:

GRANT privileges ON object TO role_name;

privileges
Привилегии для назначения роли. Это может быть любое из следующих значений:

Привилегии Описание
SELECT Возможность выполнения SELECT на таблице
INSERT Возможность выполнения INSERT на таблице
UPDATE Возможность выполнения UPDATE на таблице
DELETE Возможность выполнения DELETE на таблице
REFERENCES Возможность создавать CONSTRAINT, который ссылается на таблицу.
ALTER Возможность выполнять оператор ALTER TABLE, чтобы изменить описание таблицы.
INDEX Возможность создавать INDEX таблице с помощью оператора CREATE INDEX.
ALL Все привилегии для таблицы

object
Наименование объекта базы данных, которому вы предоставляете привилегии. В случае предоставления льгот таблице, то это было бы имя таблицы.

role_name

Название той роли, которой будут предоставлены эти привилегии.

Пример

Рассмотрим некоторые примеры того, как предоставлять привилегии таблице на роль в Oracle/PLSQL.

Например, если вы хотите предоставить SELECT, INSERT, UPDATE и DELETE привилегии на таблицу suppliers к роли имени test_role, то выполнить следующее предложение GRANT:

Вы также можете использовать ключевое слово ALL, чтобы показать, что должны быть предоставлены разрешения всем.

Например:

Revoke Table Privileges from Role

После предоставления привилегий таблице на роль, возможно, вам придется отменить все или некоторые из этих привилегий. Для этого, вы можете выполнить команду revoke. Вы можете отменить любую комбинацию из: SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER INDEX, или ALL.

Синтаксис

Синтаксис для отмены привилегий таблицы на роль в Oracle/PLSQL:

REVOKE privileges ON object FROM role_name;

privileges

Привилегии отмены для роли. Это может быть любое из следующих значений:

Привилегии Описание
SELECT Возможность выполнения SELECT на таблице
INSERT Возможность выполнения INSERT на таблице
UPDATE Возможность выполнения UPDATE на таблице
DELETE Возможность выполнения DELETE на таблице
REFERENCES Возможность создавать CONSTRAINT, который ссылается на таблицу.
ALTER Возможность выполнять оператор ALTER TABLE, чтобы изменить описание таблицы.
INDEX Возможность создавать INDEX таблице с помощью оператора CREATE INDEX.
ALL Все привилегии для таблицы

Object
Наименование объекта базы данных, для которого вы отменяете привилегии. В случае отмены привилегий таблице, то это было бы имя таблицы.

role_name

Название роли, для которых будут отменены эти привилегии.

Пример

Рассмотрим пример того, как отменить привилегии таблицы для роли в Oracle.

Например, если вы хотите отменить привилегию DELETE на таблицу suppliers из роли с именем test_role, вы выполните следующее предложение REVOKE:

Если вы хотите отменить все привилегии на таблицу suppliers из роли test_role, вы можете использовать ключевое слово ALL.

Например:

Grant Function/Procedure Privileges to Role

При работе с функциями и процедурами, вы можете предоставить роли возможность выполнять эти функции и процедуры.

Синтаксис

Синтаксис для предоставления привилегий EXECUTE на функции / процедуры для роли в Oracle/PLSQL:

GRANT EXECUTE ON object TO role_name;

EXECUTE
Возможность компиляции функции / процедуры и возможность выполнять непосредственно функцию / процедуру.
object
Наименование объекта базы данных, для которых вы предоставляете привилегии. В случае предоставления привилегий EXECUTE на функцию или процедуру, это было бы название функции или процедуры.
role_name
Название роли, которой будут предоставлены привилегии EXECUTE.

Пример

Рассмотрим пример того, как предоставить привилегию EXECUTE на функцию или процедуру в роли в Oracle.

Например, если у вас есть функция с именем Find_Value и вы хотите предоставить доступ к роли под названием test_role, то выполните следующее предложение GRANT:

Revoke Function/Procedure Privileges from Role

После того, как мы предоставили привилегии EXECUTE на функции или процедуры на роль, возможно, нам придется отменить эти привилегии для этой роли. Для этого, можно выполнить команду REVOKE.

Синтаксис

Синтаксис для отмены привилегий на функцию или процедуру из роли в Oracle:

REVOKE execute ON object FROM role_name;

EXECUTE

Отмена возможности компиляции функции / процедуры и возможности выполнять непосредственно функцию / процедуру.

object

Наименование объекта базы данных, которому вы отменяете привилегии. В случае отмены привилегии EXECUTE на функцию или процедуру, это было бы название функции или процедуры.

role_name

Наименование роли, для которой будут отменены привилегии EXECUTE.

Пример

Рассмотрим пример того, как отменить привилегии EXECUTE для функции или процедуры на роль в Oracle.

Если вы хотите отменить привилегию EXECUTE на функцию под названием Find_Value из роли test_role, то выполните следующее предложение REVOKE:

Grant Role to User

Теперь, когда вы создали роль и назначили права на роль, вы должны будете предоставить роль для определенных пользователей.

Синтаксис

Синтаксис предоставления роли пользователю в Oracle:

GRANT role_name TO user_name;

role_name

Название роли, которую вы хотите предоставить.

user_name

Имя пользователя, которому будет предоставлена роль.

Пример

Рассмотрим пример того, как предоставить роль пользователю в Oracle:

В этом примере будет предоставлена роль под названием test_role для пользователя с именем jon.

Enable/Disable Role (Set Role Statement)

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

Когда пользователь входит в Oracle, все роли по умолчанию включены, но роли не по умолчанию должны быть включены с помощью оператора SET ROLE.

Синтаксис

Синтаксис для оператора SET ROLE в Oracle:

SET ROLE
( role_name [ IDENTIFIED BY password ] | ALL [EXCEPT role1, role2, ... ] | NONE );

role_name

Название роли, которую вы хотите включить.

IDENTIFIED BY password

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

ALL

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

NONE

Отключает все роли для текущей сессии (включая все роли по умолчанию).

Пример

Рассмотрим пример того, как включить определенную роль в Oracle.

Например:

Этот пример включит роль под названием test_role с паролем test234.

Set role as DEFAULT Role

Роль по умолчанию означает, что роль всегда включена для текущей сессии при входе в систему. Не нужно выполнять оператор SET ROLE, чтобы установить роль по умолчанию, необходимо выполнить оператор USER ALTER.

Синтаксис

Синтаксис для установки роли, как DEFAULT ROLE в Oracle:

ALTER USER user_name
DEFAULT ROLE
( role_name | ALL [EXCEPT role1, role2, ... ] | NONE );

user_name
Имя пользователя, роль которого вы устанавливаете как DEFAULT.

role_name
Название той роли, которую вы хотите установить как DEFAULT.

ALL
Это означает, что все роли должны быть как DEFAULT, за исключением тех, которые перечислены в EXCEPT.

NONE
Запрещает все роли DEFAULT.

Пример

Рассмотрим пример того, как установить роль как DEFAULT в Oracle.

Например:

В этом примере для пользователя с именем jon будет установлена роль DEFAULT под названием test_role.

В этом примере пользователь с именем jon получит все роли DEFAULT.

Этот пример будет устанавливать для пользователя jon все роли DEFAULT, за исключением роли под названием test_role.

Drop Role (удалить роль)

После того, как роль была создана в Oracle, вам, возможно, в какой-то момент понадобится удалить роль.

Синтаксис

Синтаксис удаления роли в Oracle:

DROP ROLE role_name;

role_name
Название роли, которая должна быть удалена.

Пример

Рассмотрим пример того, как удалить роль в Oracle.

Например:

Оператор DROP удалит роль под называнием test_role, которую мы определили ранее.