выполняют следующие задачи:
■ подключение как system;
■ предоставление системной привилегии CREATE PUBLIC SYNONYM пользователю
store;
■ подключение как store;
■ создание общедоступного синонима products для таблицы store,
products.
□ CONNECT system/manager
GRANT CREATE PUBLIC SYNONYM TO store;
CONNECT store/store_password
CREATE PUBLIC SYNONYM products FOR store.products;
Если теперь подключиться как steve, у которого имеется привилегия
SELECT на таблицу store.products, можно выбирать из нее строки, используя
общедоступный псевдоним products:
300 Гпава 9
□ CONNECT steve/button
SELECT *
FROM products;
Даже несмотря на то, что для store.products был создан общедоступный
синоним, для реального доступа к этой таблице пользователю по-прежнему
будут необходимы объектные привилегии на эту таблицу. Например,
пользователь gail будет видеть общедоступный синоним products, но у него
отсутствуют объектные привилегии для доступа к таблице store.products.
Следовательно, если gail попытается выбрать строки из products, база данных
выдаст сообщение об ошибке (ORA-00942: таблица или представление
отсутствует):
□ SQL> CONNECT gail/Seymour
Connected.
SQL> SELECT * FROM products;
SELECT * FROM products
*
ERROR at line 1:
0RA-00942: table or view does not exist
Если бы у gail имелась объектная привилегия на таблицу store.products,
предыдущий оператор SELECT завершился бы успешно.
Если у пользователя есть другие объектные привилегии, он может использовать
их с применением синонимов. Например, если у пользователя
gail есть объектная привилегия INSERT на таблицу store.products, он может
добавлять в нее строки, используя синоним products.
Отзыв объектных привилегий
Для отзыва объектных привилегий используется оператор REVOKE. В следующем
примере мы подключаемся как store и отзываем объектную привилегию
INSERT на таблицу products у пользователя steve:
□ CONNECT store/store_password
REVOKE INSERT ON products FROM steve;
В следующем примере отзывается привилегия SELECT на таблицу
customers у пользователя steve:
□ REVOKE SELECT ON store.customers FROM steve;
Когда отзывается SELECT ON store, customers у steve, который успел передать
эту привилегию gail, gail также теряет эту привилегию.
Роли
Ролью называется группа привилегий, которую можно назначить пользователю
или другой роли. Ниже приводятся основные преимущества и особенности
ролей.
■ Вместо того чтобы по очереди назначать привилегии непосредственно
пользователю, можно создать роль, назначить этой роли
Пользователи, привилегии и роли 301
привилегии, а затем предоставить эту роль большому числу пользователей
и других ролей.
■ При добавлении привилегии ролям или их удалении все пользователи
или роли, которым была назначена эта роль, автоматически получают
или утрачивают эту привилегию.
■ Можно назначить пользователю или роли несколько ролей.
■ Можно назначить роли пароль.
Как видно, роли могут помочь в управлении многими привилегиями,
назначенными многим пользователям.
Создание ролей
Для создания роли нужно обладать системной привилегией CREATE ROLE.
Пользователю store также необходима возможность предоставлять системную
привилегию CREATE USER с опцией ADMIN. В следующем примере мы
подключаемся как system и передаем требующиеся привилегии пользователю
store:
□ CONNECT system/manager- *
GRANT CREATE ROLE TO store;
GRANT CREATE USER TO store WITH ADMIN OPTION;
Мы создаем роли, используя для этой цели оператор CREATE ROLE. В приведенных
ниже операторах мы подключаемся как store и создаем три роли,
описанные в таблице 9.8:
П CONNECT store/store_password
CREATE ROLE product jnanageг;
CREATE ROLE hr_manager;
CREATE ROLE overalljnanager IDENTIFIED BY manager_password;
Отметим, что у роли overalljnanager установлен пароль manager_
password.
Таблица 9.8. Роли, которые мы собираемся создать
Название роли Имеет привилегии для_
productjnanager Выполнения операций SELECT, INSERT, UPDATE и DELETE над таблицами
product_types и products.
hr jnanage г Выполнения операций SELECT, INSERT, UPDATE и DELETE над таблицами
salary_grades и employees. Кроме того, hrjnanager имеет возможность
создавать новых пользователей.
overalljnanager Выполнения операций SELECT, INSERT, UPDATE и DELETE над всеми
таблицами, используемыми в предыдущих ролях. Роли overall_
manager будут назначены две предыдущие роли.
Предоставление привилегий ролям
Для предоставления привилегий ролям используется оператор GRANT. Роли
можно предоставить как системные, так и объектные привилегии, а также
302 Глава 9
можно назначить роли другую роль. В следующем примере требуемые привилегии