1. Создание роли с использованием оператора CREATE ROLE.
2. Назначение привилегий этой роли посредством GRANT привилегия то роль.
3. Назначение роли пользователям посредством GRANT роль то пользователь.
4. Задание роли вместе с именем пользователя при соединении с базой данных.
Создание роли
Синтаксис создания роли прост:
CREATE ROLE <имя-роли>;
Пользователь SYSDBA или владелец базы может создавать роли, предоставлять им привилегии и передавать эти "нагруженные" роли пользователям. Если роль предоставлена с параметром WITH ADMIN OPTION, получатель этой роли может предоставлять ее другим пользователям с WITH ADMIN OPTION или без.
Назначение привилегий роли
Для "загрузки" роли привилегиями просто предоставьте ей требуемые привилегии, как если бы роль была обычным пользователем:
GRANT <привилегии> ТО <имя-роли>;
Предоставление роли пользователям
В операторе GRANT для предоставления роли пользователям опускается предложение ON- здесь неявно используются полномочия, "загруженные" в роль.
GRANT <имя-роли> [, <имя-роли> [, ...]]
TO [DSER] <имя-пользователя> [, [OSER] <имя-пользователя> [, ...]] [WITH ADMIN OPTION];
Необязательное предложение WITH ADMIN OPTION позволяет получающему роль предоставлять эту роль другим пользователям, а также отменять ее. Это работает таким же образом, что и WITH GRANT OPTION для обычных полномочий - см. разд. "Предоставление прав на предоставление привилегий".
Следующий пример создает роль MAITRE D, предоставляет этой роли привилегии ALL К таблице DEPARTMENT, а затем предоставляет роль пользователю HORTENSE. Это дает пользователю HORTENSE привилегии SELECT, INSERT, UPDATE, DELETE и REFERENCES К таблице DEPARTMENT.
CREATE ROLE MAITRE_D;
COMMIT;
GRANT ALL
ON DEPARTMENT
TO MAITRE_D;
GRANT MAITRE_D TO HORTENSE;
Подключение к базе данных с использованием роли
При соединении включите ROLE в список параметров соединения и укажите ту роль, чьи привилегии вы хотите использовать в этом соединении. Это будет работать, только если данному пользователю была предоставлена указанная роль:
CONNECT <путь-к-базе-данных>
USER <ваше-имя-пользователя>
ROLE <имя-роли>
PASSWORD <ваш-пароль>;
Удаление роли
Если вы удаляете роль, то все привилегии, предоставленные этой роли, отменяются. Чтобы удалить роль MAITRE_D, выполните:
DROP ROLE MAITRE D;
! ! !
ПРИМЕЧАНИЕ. Если вам нужно лишь удалить привилегии, предоставленные пользователю с помощью роли, или удалить привилегии роли, используйте оператор REVOKE (см. разд. "Отмена полномочий").
. ! .
Предоставление прав на предоставление привилегий
Вначале только владелец таблицы или просмотра или пользователь SYSDBA могут предоставлять полномочия к этому объекту другим пользователям. Добавьте WITH GRANT OPTION в конец оператора GRANT для передачи пользователю права предоставлять привилегии вместе с самими привилегиями.
Следующий оператор назначает полномочия SELECT пользователю HPOTTER и дает право HPOTTER предоставлять полномочия SELECT другим:
GRANT SELECT ON DEPARTMENT TO HPOTTER WITH GRANT OPTION;
WITH GRANT OPTION не может назначаться триггерам или процедурам.
Права WITH GRANT OPTION являются кумулятивными, даже если передаются различными пользователями. Например, HPOTTER может получить право предоставлять права SELECT к таблице DEPARTMENT от одного пользователя и INSERT К DEPARTMENT от другого.
В следующем примере HPOTTER имеет доступ SELECT К таблице DEPARTMENT с правом передавать полномочия, HPOTTER может предоставлять полномочия SELECT другим пользователям. Предположим, HPOTTER теперь также получает полномочия INSERT к этой же таблице, но без права предоставлять эти полномочия:
GRANT INSERT ON DEPARTMENT TO HPOTTER;
Пользователь HPOTTER может выбирать данные и добавлять данные в таблицу DEPARTMENT. Он может предоставлять полномочия SELECT к таблице DEPARTMENT, но не может назначать полномочия INSERT, потому что он не имеет права предоставлять эту привилегию.
Существующие привилегии пользователя могут быть расширены включением права предоставлять привилегии. Для этого нужно выдать второй оператор GRANT для той же привилегии, который будет включать предложение WITH GRANT OPTION.
Для предоставления пользователю HPOTTER права предоставлять полномочия INSERT К таблице DEPARTMENT просто выполните новый оператор:
GRANT INSERT ON DEPARTMENT TO HPOTTER WITH GRANT OPTION;
Подводя итог, скажем, что пользователь может предоставлять привилегии доступа (SELECT, INSERT, UPDATE, DELETE и REFERENCES) К объекту другим пользователям или объектам, если пользователь:
* владеет этим объектом;
* получил такую привилегию к этому объекту вместе с WITH GRANT OPTION;
* получил эту привилегию путем предоставления ему роли, содержащей привилегию вместе с WITH ADMIN OPTION.
SQL допускает операторы GRANT, которые предоставляют пользователю дубликаты полномочий.
Неожиданные эффекты