заполнения столбца первичного ключа (см. главу 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;
В следующем примере у того же пользователя отзывается привилегия