Выбрать главу

выполняют следующие задачи:

■ подключение как 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

можно назначить роли другую роль. В следующем примере требуемые привилегии