Для базы данных ORACLE можно создавать любое требуемое количество ролей. После создания роли нужно построить для нее набор привилегий, предоставив ей привилегии и другие роли. Затем надо предоставить эту роль пользователям, чтобы они имели привилегии, необходимые им для работы.
Ниже приведен пример создания новой роли для типичного приложения по вводу заказов, а также предоставления роли ряду пользователей базы данных.
create role order_entry;
grant select, insert, update, delete on sales.customers to order_entry;
grant select, insert, update, delete on sales. orders to order_entry;
grant select, insert, update, delete on sales.items to order_entry;
grant select, update on sales.parts to order_entry;
grant order_entry to smith, alice, george;
В приведенном примере SALES – схема базы данных; CUSTOMERS, ORDERS, ITEMS, PARTS – таблицы этой схемы; SMITH, ALICE, GEORGE – пользователи базы данных, полномочия которых распространяются на объекты схемы sales. Как видно из примера сначала создается роль, а уже затем посредством инструкции GRANT задаются привилегии этой роли. Особенности задания инструкции GRANT рассматриваются ниже, в параграфе “предоставление привилегий”.
Пользователь, которому предоставлена роль, не всегда имеет доступ к ее привилегиям. В ORACLE приложения могут разрешать и запрещать роли для любого пользователя. После того как приложение разрешает роль для пользователя, ему становятся доступны ее привилегии. И, соответственно, когда приложение запрещает роль для пользователя, он более не имеет доступа к ее привилегиям. Возможность динамически управлять набором привилегий позволяет приложениям обеспечивать постоянную корректность наборов привилегий пользователей во время работы с данным приложением. Например, когда пользователь запускает приложение по вводу заказов, с помощью SQL-команды SET ROLE это приложение разрешает ему применять для работы роль ORDER_ENTRY (см. пример). Когда пользователь завершает свою работу, приложение запрещает для него эту роль, и он не может применять привилегии приложения по вводу заказов во время работы с другим приложением.
Как уже указывалось инструкция GRANT, синтаксическая диаграмма которой изображена на рисунке 33, используется для предоставления пользователям привилегий на объекты базы данных. Обычно инструкцией GRANT пользуется владелец таблицы или представления, чтобы разрешить другим пользователям доступ к этим данным.
Рисунок 33 Синтаксическая диаграмма инструкции
GRANT
Как видно из рисунка, инструкция GRANT содержит список предоставляемых привилегий, имя таблицы, для которой назначаются привилегии, и идентификатор пользователя, получающего их.
При предоставлении большого числа привилегий или предоставлении привилегий большому числу пользователей в инструкции GRANT для удобства применяются два сокращения. Вместо того чтобы перечислять все привилегии для некоторого объекта, можно использовать предложение ALL PRIVILEGES.
Вместо того чтобы давать привилегии по отдельности каждому пользователю базы данных, можно с помощью ключевого слова PUBLIC предоставить их сразу всем пользователям, имеющим право работать с базой данных. Такая инструкция GRANT дает привилегии всем нынешним и будущим пользователям базы данных, а не только тем, кто имеет право работать с базой данных в настоящее время. Это устраняет необходимость явно предоставлять привилегии новым пользователям при их появлении.