В этом учебном материале вы узнаете, как создавать роли, предоставлять/отменять привилегии для ролей, включать/отключать роли, устанавливать роли по умолчанию и удалять роли (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:
[ 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.
Например:
1 |
CREATE ROLE test_role; |
Это первый пример создания роли под названием test_role.
1 2 |
CREATE ROLE test_role IDENTIFIED BY test345; |
Второй пример создает ту же роль под названием test_role, но теперь она защищена паролем test345.
Grant TABLE Privileges to Role
После того как вы создали роль в Oracle, ваш следующий шаг заключается в предоставлении привилегий для этой роли.
Так же, как вы предоставляете привилегии для пользователей, вы можете предоставить привилегии для роли. Давайте начнем с предоставления привилегий таблицы на роль. Таблица привилегий может быть любой комбинацией из: SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER, INDEX или ALL.
Синтаксис
Синтаксис для предоставления привилегий таблице на роль в Oracle/PLSQL:
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:
1 |
GRANT select, insert, update, delete ON suppliers TO test_role; |
Вы также можете использовать ключевое слово ALL, чтобы показать, что должны быть предоставлены разрешения всем.
Например:
1 |
GRANT all ON suppliers TO test_role; |
Revoke Table Privileges from Role
После предоставления привилегий таблице на роль, возможно, вам придется отменить все или некоторые из этих привилегий. Для этого, вы можете выполнить команду revoke. Вы можете отменить любую комбинацию из: SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER INDEX, или ALL.
Синтаксис
Синтаксис для отмены привилегий таблицы на роль в Oracle/PLSQL:
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:
1 |
REVOKE delete ON suppliers FROM test_role; |
Если вы хотите отменить все привилегии на таблицу suppliers из роли test_role, вы можете использовать ключевое слово ALL.
Например:
1 |
REVOKE all ON suppliers FROM test_role; |
Grant Function/Procedure Privileges to Role
При работе с функциями и процедурами, вы можете предоставить роли возможность выполнять эти функции и процедуры.
Синтаксис
Синтаксис для предоставления привилегий EXECUTE на функции / процедуры для роли в Oracle/PLSQL:
EXECUTE
Возможность компиляции функции / процедуры и возможность выполнять непосредственно функцию / процедуру.
object
Наименование объекта базы данных, для которых вы предоставляете привилегии. В случае предоставления привилегий EXECUTE на функцию или процедуру, это было бы название функции или процедуры.
role_name
Название роли, которой будут предоставлены привилегии EXECUTE.
Пример
Рассмотрим пример того, как предоставить привилегию EXECUTE на функцию или процедуру в роли в Oracle.
Например, если у вас есть функция с именем Find_Value и вы хотите предоставить доступ к роли под названием test_role, то выполните следующее предложение GRANT:
1 |
GRANT execute ON Find_Value TO test_role; |
Revoke Function/Procedure Privileges from Role
После того, как мы предоставили привилегии EXECUTE на функции или процедуры на роль, возможно, нам придется отменить эти привилегии для этой роли. Для этого, можно выполнить команду REVOKE.
Синтаксис
Синтаксис для отмены привилегий на функцию или процедуру из роли в Oracle:
EXECUTE
Отмена возможности компиляции функции / процедуры и возможности выполнять непосредственно функцию / процедуру.
object
Наименование объекта базы данных, которому вы отменяете привилегии. В случае отмены привилегии EXECUTE на функцию или процедуру, это было бы название функции или процедуры.
role_name
Наименование роли, для которой будут отменены привилегии EXECUTE.
Пример
Рассмотрим пример того, как отменить привилегии EXECUTE для функции или процедуры на роль в Oracle.
Если вы хотите отменить привилегию EXECUTE на функцию под названием Find_Value из роли test_role, то выполните следующее предложение REVOKE:
1 |
REVOKE execute ON Find_Value FROM test_role; |
Grant Role to User
Теперь, когда вы создали роль и назначили права на роль, вы должны будете предоставить роль для определенных пользователей.
Синтаксис
Синтаксис предоставления роли пользователю в Oracle:
role_name
Название роли, которую вы хотите предоставить.
user_name
Имя пользователя, которому будет предоставлена роль.
Пример
Рассмотрим пример того, как предоставить роль пользователю в Oracle:
1 |
GRANT test_role TO jon; |
В этом примере будет предоставлена роль под названием test_role для пользователя с именем jon.
Enable/Disable Role (Set Role Statement)
Чтобы включить или отключить определенную роль для текущей сессии, вы можете использовать оператор SET ROLE.
Когда пользователь входит в Oracle, все роли по умолчанию включены, но роли не по умолчанию должны быть включены с помощью оператора SET ROLE.
Синтаксис
Синтаксис для оператора SET ROLE в Oracle:
( role_name [ IDENTIFIED BY password ] | ALL [EXCEPT role1, role2, ... ] | NONE );
role_name
Название роли, которую вы хотите включить.
IDENTIFIED BY password
Пароль для роли, чтобы ее включить. Если роль не имеет пароля, этот параметр может быть опущен.
ALL
Это означает, что все роли должны быть включены для этой текущей сессии, за исключением тех, которые перечислены в EXCEPT.
NONE
Отключает все роли для текущей сессии (включая все роли по умолчанию).
Пример
Рассмотрим пример того, как включить определенную роль в Oracle.
Например:
1 |
SET ROLE test_role IDENTIFIED BY test234; |
Этот пример включит роль под названием test_role с паролем test234.
Set role as DEFAULT Role
Роль по умолчанию означает, что роль всегда включена для текущей сессии при входе в систему. Не нужно выполнять оператор SET ROLE, чтобы установить роль по умолчанию, необходимо выполнить оператор USER ALTER.
Синтаксис
Синтаксис для установки роли, как DEFAULT ROLE в Oracle:
DEFAULT ROLE
( role_name | ALL [EXCEPT role1, role2, ... ] | NONE );
user_name
Имя пользователя, роль которого вы устанавливаете как DEFAULT.
role_name
Название той роли, которую вы хотите установить как DEFAULT.
ALL
Это означает, что все роли должны быть как DEFAULT, за исключением тех, которые перечислены в EXCEPT.
NONE
Запрещает все роли DEFAULT.
Пример
Рассмотрим пример того, как установить роль как DEFAULT в Oracle.
Например:
1 2 3 |
ALTER USER jon DEFAULT ROLE test_role; |
В этом примере для пользователя с именем jon будет установлена роль DEFAULT под названием test_role.
1 2 3 |
ALTER USER jon DEFAULT ROLE ALL; |
В этом примере пользователь с именем jon получит все роли DEFAULT.
1 2 3 |
ALTER USER jon DEFAULT ROLE ALL EXCEPT test_role; |
Этот пример будет устанавливать для пользователя jon все роли DEFAULT, за исключением роли под названием test_role.
Drop Role (удалить роль)
После того, как роль была создана в Oracle, вам, возможно, в какой-то момент понадобится удалить роль.
Синтаксис
Синтаксис удаления роли в Oracle:
role_name
Название роли, которая должна быть удалена.
Пример
Рассмотрим пример того, как удалить роль в Oracle.
Например:
1 |
DROP ROLE test_role; |
Оператор DROP удалит роль под называнием test_role, которую мы определили ранее.