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

заполнения столбца первичного ключа (см. главу 10).

CREATE SYNONYM Создавать синонимы. Синоним позволяет ссылаться на таблицу

из другой схемы (см. ниже в данной главе).

CREATE TABLE Создавать таблицу в схеме пользователя.

CREATE ANY TABLE Создавать таблицу в любой схеме.

DROP TABLE Удалять таблицу в схеме пользователя.

DROP ANY TABLE Удалять таблицу в любой схеме.

CREATE PROCEDURE Создавать хранимую процедуру.

EXECUTE ANY PROCEDURE Выполнять процедуру из любой схемы.

CREATE USER Создавать пользователей.

DROP USER Удалить пользователей.

CREATE VIEW Создавать представления. Представлением называется хранимый

запрос, позволяющий обращаться ко многим таблицам и столбцам.

После создания представления можно делать к нему запрос,

как если бы это была обычная таблица (подробнее о представлениях

см. в главе 10).

Предоставление пользователю системных привилегий

Для предоставления пользователю системных привилегий используется

оператор GRANT. В следующем примере системные привилегии предоставляются

пользователю Steve при помощи оператора GRANT (при условии,

что вы все еще подключены к базе данных как system):

□ GRANT CREATE SESSION, CREATE USER, CREATE TABLE TO Steve;

Можно использовать опцию WITH ADMIN OPTION, чтобы разрешить пользователю

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

В следующем примере пользователю steve предоставляется привилегия

EXECUTE ANY PROCEDURE с опцией ADMIN:

□ GRANT EXECUTE ANY PROCEDURE TO Steve WITH ADMIN OPTION;

Теперь пользователь steve может предоставить привилегию EXECUTE ANY

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

как steve и предоставляете эту привилегию пользователю gaiclass="underline"

□ CONNECT steve/button

GRANT EXECUTE ANY PROCEDURE TO gail;

Предоставить привилегию всем пользователям можно, используя ключевое

слово PUBLIC. В следующем примере мы подключаемся как system и

предоставляем привилегию EXECUTE ANY PROCEDURE всем пользователям

(PUBLIC):

292 Глава 9

□ CONNECT system/manager

GRANT EXECUTE ANY PROCEDURE TO PUBLIC;

После этого каждый пользователь базы данных будет иметь привилегию

EXECUTE ANY PROCEDURE.

Проверка системных привилегий, предоставленных пользователю

Чтобы проверить, какие системные привилегии предоставлены пользователю,

можно сделать запрос к user_sys_privs. В таблице 9.2 описываются

столбцы user_sys_privs.

Таблица 9.2. Некоторые столбцы user_sys_privs

Столбец Тип Описание

username VARCHAR2(30) Имя текущего пользователя.

privilege VARCHAR2(40) Системная привилегия пользователя.

admin_option VARCHAR2(3) Определяет, имеет ли пользователь возможность предоставлять

эту привилегию другому пользователю.

Примечание users_sys_privs образует часть словаря данных базы данных Oracle. В словаре

данных хранится информация о базе данных.

В следующем примере мы подключаемся как steve и делаем запрос к

user_sys_privs:

□ CONNECT steve/button

SELECT *

FROM user_sys_privs

ORDER BY privilege;

USERNAME PRIVILEGE ADM

PUBLIC EXECUTE ANY PROCEDURE NO

STEVE CREATE SESSION N0

STEVE CREATE TABLE N0

STEVE CREATE USER N0

STEVE EXECUTE ANY PROCEDURE YES

В следующем примере мы подключаемся как gail и делаем тот же самый

запрос:

□ CONNECT gail/seymour

SELECT *

FROM user_sys_privs

ORDER BY privilege;

USERNAME PRIVILEGE ADM

GAIL CREATE SESSION NO

GAIL EXECUTE ANY PROCEDURE NO

PUBLIC EXECUTE ANY PROCEDURE NO

Пользователи, привилегии и роли 293

Y gail имеется привилегия CREATE ANY PROCEDURE, ранее предоставленная

пользователем steve.

Использование системных привилегий

После предоставления пользователю той или иной системной привилегии

он может использовать ее для выполнения конкретной задачи. Например,

у пользователя steve есть привилегия CREATE USER, так что он может

создать нового пользователя:

□ CONNECT steve/button

CREATE USER roy IDENTIFIED BY williams;

Если steve попытается использовать системную привилегию, которая

не была ему предоставлена, база данных выдаст сообщение об ошибке с

номером ORA-01031: insufficient privileges (ORA-01031: недостаточно полномочий).

Например, у пользователя steve нет полномочий для удаления

пользователей (DROP USER), поэтому следующий пример, в котором steve

пытается удалить пользователя гоу, завершится аварийно:

□ SQL> DROP USER roy; ' '

DROP USER roy

ERROR at line 1:

0RA-01031: insufficient privileges

(0RA-01031: недостаточно полномочий).

Отзыв системных привилегий у пользователя

Для отзыва у пользователя системных привилегий используется оператор

R EVOKE. В следующем примере мы подключаемся как system и отзываем привилегию

CREATE TABLE у пользователя steve:

□ CONNECT system/manager

REVOKE CREATE TABLE FROM steve;

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