УПРАВЛЕНИЕ ПРИВИЛЕГИЯМИ И РОЛЯМИ ORACLE
ГЛАВА 12
----------------------------------------------------------------
УПРАВЛЕНИЕ ПРИВИЛЕГИЯМИ И РОЛЯМИ
Эта глава объясняет, как управлять правами выполнения системных
операций и доступом к объектам схем через привилегии и роли.
Темы этой главы включают обсуждение следующих вопросов:
* системные и объектные привилегии
* как назначать и отзывать привилегии и роли
* как создавать, изменять и удалять роли
* как управлять использованием ролей
Для информации о том, как управлять доступом к базе данных в
целом, обратитесь к главе 11; для рекомендаций по общей политике
защиты базы данных обратитесь к главе 10.
[Trusted]
Если вы используете Trusted ORACLE в режиме DBMS MAC, обратитесь
к документу Trusted ORACLE7 Server Administrator's Guide для
важной информации об управлении системными привилегиями и
ролями.
Управление привилегиями и ролями 12-1
----------------
Что такое привилегии
Привилегия - это право выполнять конкретный тип предложений SQL,
или право доступа к объекту другого пользователя. ORACLE имеет
два вида привилегий: системные привилегии и объектные
привилегии. Все привилегии ORACLE перечислены в следующих
секциях, где они объединены в группы, состоящие из привилегий,
которые обычно назначаются и отзываются вместе.
Системные привилегии
--------------------
Существуют более 80 различных системных привилегий. Каждая
системная привилегия позволяет пользователю выполнять конкретную
операцию в базе данных или определенный класс операций.
Табл.12-1 перечисляет все системные привилегии и операции,
которые позволяются ими.
Табл.12-1
Системные привилегии
г======================T=======================================¬
¦ Системная привилегия ¦ Допустимые операции ¦
¦======================¦=======================================¦
¦ ANALYZE ¦
¦----------------------T---------------------------------------¦
¦ ANALYZE ANY ¦ Анализировать любую таблицу, кластер ¦
¦ ¦ или индекс в базе данных. ¦
¦======================¦=======================================¦
¦ AUDIT ¦
¦----------------------T---------------------------------------¦
¦ AUDIT ANY ¦ Отслеживать любой объект схемы. ¦
¦----------------------+---------------------------------------¦
¦ AUDIT SYSTEM ¦ Включать и выключать опции аудитинга ¦
¦ ¦ предложений и привилегий. ¦
¦======================¦=======================================¦
¦ CLUSTER ¦
¦----------------------T---------------------------------------¦
¦ CREATE CLUSTER ¦ Создавать кластер в своей схеме. ¦
¦----------------------+---------------------------------------¦
¦ CREATE ANY CLUSTER ¦ Создавать кластер в любой схеме. ¦
¦ ¦ Ведет себя аналогично CREATE ANY TABLE¦
¦----------------------+---------------------------------------¦
¦ ALTER ANY CLUSTER ¦ Изменять любой кластер в базе данных. ¦
¦----------------------+---------------------------------------¦
¦ DROP ANY CLUSTER ¦ Удалять любой кластер в базе данных. ¦
¦======================¦=======================================¦
¦ DATABASE ¦
¦----------------------T---------------------------------------¦
¦ ALTER DATABASE ¦ Изменять базу данных; добавлять файлы ¦
¦ ¦ операционной системы через ORACLE, ¦
¦ ¦ независимо от привилегий ОС. ¦
¦======================¦=======================================¦
¦ DATABASE LINK ¦
¦----------------------T---------------------------------------¦
¦ CREATE DATABASE LINK¦ Создавать личные связи баз данных ¦
¦ ¦ в своей схеме. ¦
L======================¦=======================================-
12-2 Руководство администратора
г==============================================================¬
¦ INDEX ¦
¦----------------------T---------------------------------------¦
¦ CREATE ANY INDEX ¦ Создавать индекс (в любой схеме) по ¦
¦ ¦ любой таблице. ¦
¦----------------------+---------------------------------------¦
¦ ALTER ANY INDEX ¦ Изменять любой индекс в базе данных. ¦
¦----------------------+---------------------------------------¦
¦ DROP ANY INDEX ¦ Удалять любой индекс в базе данных. ¦
¦======================¦=======================================¦
¦ PRIVILEGE ¦
¦----------------------T---------------------------------------¦
¦ GRANT ANY PRIVILEGE ¦ Назначать любую системную привилегию ¦
¦ ¦ (не объектную привилегию). ¦
¦======================¦=======================================¦
¦ PROCEDURE ¦
¦----------------------T---------------------------------------¦
¦ CREATE PROCEDURE ¦ Создавать хранимые процедуры, функции ¦
¦ ¦ и пакеты в своей схеме. ¦
¦----------------------+---------------------------------------¦
¦ CREATE ANY PROCEDURE¦ Создавать хранимые процедуры, функции ¦
¦ ¦ и пакеты в любой схеме. (Требует также¦
¦ ¦ привилегий ALTER ANY TABLE, BACKUP ANY¦
¦ ¦ TABLE, DROP ANY TABLE, LOCK ANY TABLE,¦
¦ ¦ COMMENT ANY TABLE, SELECT ANY TABLE, ¦
¦ ¦ INSERT ANY TABLE, UPDATE ANY TABLE, ¦
¦ ¦ DELETE ANY TABLE или GRANT ANY TABLE.)¦
¦----------------------+---------------------------------------¦
¦ ALTER ANY PROCEDURE ¦ Изменять любую хранимую процедуру, ¦
¦ ¦ функцию или пакет в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ DROP ANY PROCEDURE ¦ Удалять любую хранимую процедуру, ¦
¦ ¦ функцию или пакет в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ EXECUTE ANY ¦ Выполнять любую процедуру или функцию ¦
¦ PROCEDURE ¦ (независимую или пакетированную), или ¦
¦ ¦ обращаться к любой общей переменной ¦
¦ ¦ в пакете в любой схеме. ¦
¦======================¦=======================================¦
¦ PROFILE ¦
¦----------------------T---------------------------------------¦
¦ CREATE PROFILE ¦ Создавать профили. ¦
¦----------------------+---------------------------------------¦
¦ ALTER PROFILE ¦ Изменять любой профиль в базе данных. ¦
¦----------------------T---------------------------------------¦
¦ DROP PROFILE ¦ Удалять любой профиль в базе данных. ¦
¦----------------------+---------------------------------------¦
¦ ALTER RESOURCE COST ¦ Устанавливать стоимости для ресурсов, ¦
¦ ¦ используемых в любых сессиях. ¦
¦======================¦=======================================¦
¦ PUBLIC DATABASE LINK ¦
¦----------------------T---------------------------------------¦
¦ CREATE PUBLIC ¦ Создавать общие связи баз данных. ¦
¦ DATABASE LINK ¦ ¦
¦----------------------+---------------------------------------¦
¦ DROP PUBLIC ¦ Удалять общие связи баз данных. ¦
¦ DATABASE LINK ¦ ¦
L======================¦=======================================-
Управление привилегиями и ролями 12-3
г==============================================================¬
¦ PUBLIC SYNONYM ¦
¦----------------------T---------------------------------------¦
¦ CREATE PUBLIC ¦ Создавать общие синонимы. ¦
¦ SYNONYM ¦ ¦
¦----------------------+---------------------------------------¦
¦ DROP PUBLIC SYNONYM ¦ Удалять общие синонимы. ¦
¦======================¦=======================================¦
¦ ROLE ¦
¦----------------------T---------------------------------------¦
¦ CREATE ROLE ¦ Создавать роли. ¦
¦----------------------+---------------------------------------¦
¦ ALTER ANY ROLE ¦ Изменять любую роль в базе данных. ¦
¦----------------------+---------------------------------------¦
¦ DROP ANY ROLE ¦ Удалять любую роль в базе данных. ¦
¦----------------------+---------------------------------------¦
¦ GRANT ANY ROLE ¦ Назначать любую роль в базе данных. ¦
¦======================¦=======================================¦
¦ ROLLBACK SEGMENT ¦
¦----------------------T---------------------------------------¦
¦ CREATE ROLLBACK ¦ Создавать сегменты отката. ¦
¦ SEGMENT ¦ ¦
¦----------------------+---------------------------------------¦
¦ ALTER ROLLBACK ¦ Изменять сегменты отката. ¦
¦ SEGMENT ¦ ¦
¦----------------------+---------------------------------------¦
¦ DROP ROLLBACK ¦ Удалять сегменты отката. ¦
¦ SEGMENT ¦ ¦
¦======================¦=======================================¦
¦ SESSION ¦
¦----------------------T---------------------------------------¦
¦ CREATE SESSION ¦ Соединяться с базой данных. ¦
¦----------------------+---------------------------------------¦
¦ ALTER SESSION ¦ Выдавать предложения ALTER SESSION. ¦
¦----------------------+---------------------------------------¦
¦ RESTRICTED SESSION ¦ Соединяться с базой данных, когда она ¦
¦ ¦ запущена посредством STARTUP RESTRICT.¦
¦ ¦ (Роли OSOPER и OSDBA содержат эту ¦
¦ ¦ привилегию.) ¦
¦======================¦=======================================¦
¦ SEQUENCE ¦
¦----------------------T---------------------------------------¦
¦ CREATE SEQUENCE ¦ Создавать последовательность в своей ¦
¦ ¦ схеме. ¦
¦----------------------+---------------------------------------¦
¦ CREATE ANY SEQUENCE ¦ Создавать любую последовательность ¦
¦ ¦ в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ ALTER ANY SEQUENCE ¦ Изменять любую последовательность ¦
¦ ¦ в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ DROP ANY SEQUENCE ¦ Удалять любую последовательность ¦
¦ ¦ в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ SELECT ANY SEQUENCE ¦ Обращаться к любой последовательности ¦
¦ ¦ в любой схеме. ¦
L======================¦=======================================-
12-4 Руководство администратора
г==============================================================¬
¦ SNAPSHOT ¦
¦----------------------T---------------------------------------¦
¦ CREATE SNAPSHOT ¦ Создавать снимки в своей схеме. ¦
¦ ¦ (Нужна также привилегия CREATE TABLE.)¦
¦ CREATE ANY SNAPSHOT ¦ Создавать снимки в любой схеме. (Нужна¦
¦ ¦ также привилегия CREATE ANY TABLE.) ¦
¦ ALTER ANY SNAPSHOT ¦ Изменять любой снимок в любой схеме. ¦
¦ DROP ANY SNAPSHOT ¦ Удалять любой снимок в любой схеме. ¦
¦======================¦=======================================¦
¦ SYNONYM ¦
¦----------------------T---------------------------------------¦
¦ CREATE SYNONYM ¦ Создавать синоним в своей схеме. ¦
¦ CREATE ANY SYNONYM ¦ Создавать любой синоним в любой схеме.¦
¦ DROP ANY SYNONYM ¦ Удалять любой синоним в любой схеме. ¦
¦======================¦=======================================¦
¦ SYSTEM ¦
¦----------------------T---------------------------------------¦
¦ ALTER SYSTEM ¦ Выдавать предложения ALTER SYSTEM. ¦
¦======================¦=======================================¦
¦ TABLE ¦
¦----------------------T---------------------------------------¦
¦ CREATE TABLE ¦ Создавать таблицы в своей схеме. Также¦
¦ ¦ позволяет создавать индексы (в том ¦
¦ ¦ числе для ограничений целостности) в ¦
¦ ¦ своей схеме. (Требуется квота для ¦
¦ ¦ табличного пространства или привилегия¦
¦ ¦ UNLIMITED TABLESPACE.) ¦
¦ CREATE ANY TABLE ¦ Создавать таблицу в любой схеме. (Если¦
¦ ¦ пользователь с этой привилегией созда-¦
¦ ¦ ет таблицу в схеме другого пользовате-¦
¦ ¦ ля, то используются квоты и умалчивае-¦
¦ ¦ мое табличное пространство владельца. ¦
¦ ¦ Если табличное пространство специфици-¦
¦ ¦ ровано явно, то владелец должен иметь ¦
¦ ¦ квоту на это табличное пространство. ¦
¦ ¦ Владелец таблицы не обязан иметь при- ¦
¦ ¦ вилегию CREATE [ANY] TABLE.) ¦
¦ ALTER ANY TABLE ¦ Изменять любую таблицу в любой схеме ¦
¦ ¦ и компилировать любой обзор в любой ¦
¦ ¦ схеме. ¦
¦----------------------+---------------------------------------¦
¦ BACKUP ANY TABLE ¦ Выполнять инкрементальный экспорт с ¦
¦ ¦ помощью утилиты Export. ¦
¦----------------------+---------------------------------------¦
¦ DROP ANY TABLE ¦ Удалять любую таблицу в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ LOCK ANY TABLE ¦ Блокировать любую таблицу или обзор ¦
¦ ¦ в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ BACKUP ANY TABLE ¦ Выполнять инкрементальный экспорт с ¦
¦ ¦ помощью утилиты Export. ¦
¦----------------------+---------------------------------------¦
¦ COMMENT ANY TABLE ¦ Комментировать любую таблицу, обзор ¦
¦ ¦ или столбец в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ SELECT ANY TABLE ¦ Опрашивать любую таблицу, обзор или ¦
¦ ¦ снимок в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ INSERT ANY TABLE ¦ Вставлять строки в любую таблицу или ¦
¦ ¦ обзор в любой схеме. ¦
L======================¦=======================================-
Управление привилегиями и ролями 12-5
г======================T=======================================¬
¦ UPDATE ANY TABLE ¦ Обновлять строки в любой таблице или ¦
¦ ¦ обзоре в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ DELETE ANY TABLE ¦ Удалять строки в любой таблице или ¦
¦ ¦ обзоре в любой схеме; усекать любую ¦
¦ ¦ таблицу, кластер или индекс. ¦
¦======================¦=======================================¦
¦ TABLESPACE ¦
¦----------------------T---------------------------------------¦
¦ CREATE TABLESPACE ¦ Создавать табличные пространства; ¦
¦ ¦ добавлять файлы операционной системы ¦
¦ ¦ через ORACLE, независимо от привилегий¦
¦ ¦ операционной системы. ¦
¦----------------------+---------------------------------------¦
¦ ALTER TABLESPACE ¦ Изменять табличные пространства; ¦
¦ ¦ добавлять файлы операционной системы ¦
¦ ¦ через ORACLE, независимо от привилегий¦
¦ ¦ операционной системы. ¦
¦----------------------+---------------------------------------¦
¦ MANAGE TABLESPACE ¦ Переводить в онлайн или офлайн любое ¦
¦ ¦ табличное пространство; начинать и ¦
¦ ¦ заканчивать резервное копирование ¦
¦ ¦ любого табличного пространства. ¦
¦----------------------+---------------------------------------¦
¦ DROP TABLESPACE ¦ Удалять табличные пространства. ¦
¦----------------------+---------------------------------------¦
¦ UNLIMITED TABLESPACE¦ Использовать неограниченную память в ¦
¦ ¦ ЛЮБОМ табличном пространстве. (Эта ¦
¦ ¦ привилегия перекрывает любые явные ¦
¦ ¦ квоты. При ее отзыве объекты схемы ¦
¦ ¦ владельца остаются, но им не может ¦
¦ ¦ распределяться дополнительная память, ¦
¦ ¦ если нет явных квот. ЭТА СИСТЕМНАЯ ¦
¦ ¦ ПРИВИЛЕГИЯ МОЖЕТ НАЗНАЧАТЬСЯ ЛИШЬ ¦
¦ ¦ ПОЛЬЗОВАТЕЛЯМ, НО НЕ РОЛЯМ. ОБЫЧНО ¦
¦ ¦ ВМЕСТО ЭТОЙ ПРИВИЛЕГИИ НАЗНАЧАЮТСЯ ¦
¦ ¦ КВОТЫ ТАБЛИЧНЫХ ПРОСТРАНСТВ.) ¦
¦======================¦=======================================¦
¦ TRANSACTION ¦
¦----------------------T---------------------------------------¦
¦ FORCE TRANSACTION ¦ Форсировать подтверждение или откат ¦
¦ ¦ собственных сомнительных распределен- ¦
¦ ¦ ных транзакций в локальной базе. ¦
¦----------------------+---------------------------------------¦
¦ FORCE ANY ¦ Форсировать подтверждение или откат ¦
¦ TRANSACTION ¦ любых сомнительных распределенных ¦
¦ ¦ транзакций в локальной базе данных. ¦
¦======================¦=======================================¦
¦ TRIGGER ¦
¦----------------------T---------------------------------------¦
¦ CREATE TRIGGER ¦ Создавать триггер в своей схеме. ¦
¦----------------------+---------------------------------------¦
¦ CREATE ANY TRIGGER ¦ Создавать любой триггер (в любой схе- ¦
¦ ¦ ме), ассоциированный с любой таблицей ¦
¦ ¦ в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ ALTER ANY TRIGGER ¦ Включать, выключать или компилировать ¦
¦ ¦ любой триггер в любой схеме. ¦
¦----------------------+---------------------------------------¦
¦ DROP ANY TRIGGER ¦ Удалять любой триггер в любой схеме. ¦
L======================¦=======================================-
12-6 Руководство администратора
г==============================================================¬
¦ USER ¦
¦----------------------T---------------------------------------¦
¦ CREATE USER ¦ Создавать пользователей; назначать ¦
¦ ¦ квоты на ЛЮБОЕ табличное пространство,¦
¦ ¦ назначать умалчиваемое и временное ¦
¦ ¦ табличные пространства, и назначать ¦
¦ ¦ профиль как часть предложения CREATE ¦
¦ ¦ USER. ¦
¦----------------------+---------------------------------------¦
¦ BECOME USER ¦ Становиться другим пользователем. ¦
¦ ¦ (Требуется любому пользователю, вы- ¦
¦ ¦ полняющему полный импорт базы данных.)¦
¦----------------------+---------------------------------------¦
¦ ALTER USER ¦ Изменять других пользователей: изме- ¦
¦ ¦ нять пароль или метод идентификации, ¦
¦ ¦ назначать квоты, устанавливать умалчи-¦
¦ ¦ ваемое и временное табличные простран-¦
¦ ¦ ства, назначать профили и умалчиваемые¦
¦ ¦ роли через предложение ALTER USER. ¦
¦ ¦ (Не требуется для изменения своего ¦
¦ ¦ пароля.) ¦
¦----------------------+---------------------------------------¦
¦ DROP USER ¦ Удалять других пользователей. ¦
¦======================¦=======================================¦
¦ VIEW ¦
¦----------------------T---------------------------------------¦
¦ CREATE VIEW ¦ Создавать обзор в своей схеме. ¦
¦----------------------+---------------------------------------¦
¦ CREATE ANY VIEW ¦ Создавать обзор в любой схеме. ¦
¦ ¦ (Требует, чтобы пользователь имел ¦
¦ ¦ привилегии ALTER ANY TABLE, BACKUP ANY¦
¦ ¦ TABLE, DROP ANY TABLE, LOCK ANY TABLE,¦
¦ ¦ COMMENT ANY TABLE, SELECT ANY TABLE, ¦
¦ ¦ INSERT ANY TABLE, UPDATE ANY TABLE, ¦
¦ ¦ DELETE ANY TABLE или GRANT ANY TABLE.)¦
¦----------------------+---------------------------------------¦
¦ DROP ANY VIEW ¦ Удалять любой обзор в любой схеме. ¦
L======================¦=======================================-
Поскольку системные привилегии очень мощны, следует проявлять
осторожность при назначении их ролям и доверенным пользователям.
Управление привилегиями и ролями 12-7
Объектные привилегии
--------------------
Каждый тип объектов имеет различные привилегии, ассоциированные
с ним. Табл.12-2 суммирует объектные привилегии, существующие
для каждого типа объектов.
Табл.12-2
Объектные привилегии
г============T===========T===========T===========T=============¬
¦ Привилегия ¦ TABLE ¦ VIEW ¦ SEQUENCE ¦ PROCEDURE ¦
¦============+===========+===========+===========+=============¦
¦ ALTER ¦ + ¦ ¦ + ¦ ¦
¦------------+-----------+-----------+-----------+-------------¦
¦ DELETE ¦ + ¦ + ¦ ¦ ¦
¦------------+-----------+-----------+-----------+-------------¦
¦ EXECUTE ¦ ¦ ¦ ¦ +* ¦
¦------------+-----------+-----------+-----------+-------------¦
¦ INDEX ¦ +** ¦ ¦ ¦ ¦
¦------------+-----------+-----------+-----------+-------------¦
¦ INSERT ¦ + ¦ + ¦ ¦ ¦
¦------------+-----------+-----------+-----------+-------------¦
¦ REFERENCES ¦ +** ¦ ¦ ¦ ¦
¦------------+-----------+-----------+-----------+-------------¦
¦ SELECT ¦ + ¦ +*** ¦ + ¦ ¦
¦------------+-----------+-----------+-----------+-------------¦
¦ UPDATE ¦ + ¦ + ¦ ¦ ¦
L============¦===========¦===========¦===========¦=============-
* Включает независимые хранимые процедуры и функции, а также
общие конструкты пакетов.
** Привилегия не может быть назначена роли.
*** Может также назначаться снимкам.
Назначение привилегий INSERT для столбцов
Вы можете назначать привилегию INSERT на индивидуальные столбцы
в таблице. Прежде чем назначать привилегию INSERT, специфичную
для столбцов, рассмотрите возможные побочные эффекты; если
таблица имеет один или несколько столбцов, объявленных как NOT
NULL, то выборочная привилегия INSERT, не включающая этих
столбцов, не имеет смысла, так как она может не позволить
получившему ее пользователю вставить в таблицу ни одной строки.
Чтобы предотвратить проблемы, проверьте, чтобы каждый столбец с
ограничением NOT NULL либо входил в привилегию INSERT, либо имел
непустое умалчиваемое значение; если вы не учтете это, будет
возвращаться ошибка, и строки не смогут быть вставлены.
12-8 Руководство администратора
Предложения, допускаемые каждой привилегией
Табл.12-3 перечисляет предложения SQL, которые допускаются
объектными привилегиями, перечисленными выше.
Табл.12-3
Предложения SQL, допускаемые объектными привилегиями базы данных
г============T=================================================¬
¦ Привилегия ¦ Допустимые предложения SQL ¦
¦============+=================================================¦
¦ ALTER ¦ ALTER объект (таблица или последовательность) ¦
¦------------+-------------------------------------------------¦
¦ DELETE ¦ DELETE FROM объект (таблица или обзор) ¦
¦------------+-------------------------------------------------¦
¦ EXECUTE ¦ EXECUTE объект (процедура или функция) ¦
¦ ¦ Обращения к общим переменным в пакете ¦
¦------------+-------------------------------------------------¦
¦ INDEX ¦ CREATE INDEX ON объект (только таблицы) ¦
¦------------+-------------------------------------------------¦
¦ INSERT ¦ INSERT INTO объект (таблица или обзор) ¦
¦------------+-------------------------------------------------¦
¦ REFERENCES ¦ Предложение CREATE или ALTER TABLE, определяющее¦
¦ ¦ ограничение целостности FOREIGN KEY по объекту ¦
¦ ¦ (только таблицы) ¦
¦------------+-------------------------------------------------¦
¦ SELECT ¦ SELECT ... FROM объект (таблица, обзор, снимок) ¦
¦ ¦ Предложения SQL, использующие последовательность¦
¦------------+-------------------------------------------------¦
¦ UPDATE ¦ UPDATE объект (таблица или обзор) ¦
L============¦=================================================-
В таблицу 12-2 включены не все типы объектов схемы. Многие из
объектов схемы, не перечисленных в этой таблице (такие как
кластеры, индексы, триггеры и связи баз данных) контролируются
исключительно через системные привилегии. Например, чтобы
изменить кластер, пользователь должен владеть этим кластером или
иметь системную привилегию ALTER ANY CLUSTER.
Групповое обозначение объектных привилегий
Обозначения ALL и ALL PRIVILEGES в команде GRANT или REVOKE
назначают или отзывают все возможные объектные привилегии для
объекта. Эти обозначения сами не являются привилегиями; это
просто способ одним словом назначить или отозвать все объектные
привилегии. Заметьте, что, если все объектные привилегии
назначены с помощью обозначения ALL, индивидуальные привилегии
по-прежнему могут быть отозваны.
Аналогично, все индивидуально назначенные привилегии могут быть
отозваны через обозначение ALL. Однако, если вы выдаете REVOKE
ALL, и отзыв всех привилегий приводит к удалению ограничений
целостности (зависящих от привилегии REFERENCES, которая вами
отзывается), то вы должны включить в предложение REVOKE опцию
CASCADE CONSTRAINTS.
Управление привилегиями и ролями 12-9
----------------
Управление ролями
Роль группирует несколько привилегий и других ролей, что
позволяет назначать или отзывать всю группу одновременно. Роли
могут включаться или выключаться для пользователя. Следующие
секции объясняют, как создавать, изменять, включать, выключать и
удалять роли.
Создание ролей
--------------
Для создания роли используйте либо диалоговое окно Create Role
SQL*DBA, либо команду SQL CREATE ROLE. Рис.12-1 показывает
диалоговое окно Create Role.
Рис.12-1
Диалог Create Role
---------------------------------------------------------------¬
¦ File Edit Session Instance Storage Log Backup Security¦
¦--------------------------------------------------------------+
¦¦ ¦
¦¦ г================= Create Role =================¬ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦ Name: clerk-----------------------------------¦ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦ (o) Use Password Authentication: bicentennial-¦ ¦
¦¦ ¦ ( ) Use OS Authentication ¦ ¦
¦¦ ¦ ( ) Use No Authentication ¦ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦-----------------------------------------------¦ ¦
¦+--------¦ Mandatory (OK) (Cancel) ¦----+
¦¦ L===============================================- ¦
¦¦ ¦
¦¦ ¦
¦L-------------------------------------------------------------+
L---------------------------------------------------------------
Следующее предложение является командным эквивалентом
диалогового окна Create Role, показанного на рис.12-1:
CREATE ROLE clerk IDENTIFIED BY bicentennial;
Вы должны давать каждой создаваемой вами роли уникальное имя
среди всех имен пользователей и ролей в базе данных. Роли не
содержатся ни в какой схеме.
Непосредственно после создания роль "пуста"; она не имеет
никаких ассоциированных с ней привилегий. Чтобы ассоциировать с
новой ролью привилегии, вы должны назначить этой роли привилегии
или другие роли. Эта процедура обсуждается в секции "Назначение
и отзыв привилегий и ролей" на странице 12-15.
Имена ролей в мультибайтовых наборах символов
Для баз данных, использующих мультибайтовый набор символов,
фирма Oracle рекомендует, чтобы каждое имя роли содержало хотя
бы один однобайтовый символ. Если имя роли состоит только из
12-10 Руководство администратора
мультибайтовых символов, то зашифрованную комбинацию имя
роли/пароль значительно проще расшифровать.
Авторизация роли
Можно, хотя и необязательно, потребовать удостоверения роли,
когда пользователь пытается включить ее. Это удостоверение
может осуществляться либо базой данных (через пароли), либо,
если позволяет операционная система, через операционную систему.
Авторизация базой данных
Использование роли может быть защищено ассоциированным паролем,
как в примерах, приведенных выше. Если вам назначена роль,
защещенная паролем, то вы можете включать или отключать эту
роль, лишь предоставляя правильный пароль в команде SET ROLE.
Замечание: В базе данных, использущей мультибайтовый набор
символов, пароли для ролей должны включать только однобайтовые
символы. Мультибайтовые символы в паролях не допускаются.
Авторизация операционной системой
По контрасту с предыдущим, следующее предложение создает роль с
именем ACCTS_REC и требует, чтобы она удостоверялась
операционной системой:
CREATE ROLE accts_rec IDENTIFIED EXTERNALLY;
Авторизация ролей операционной системой полезна лишь тогда,
когда операционная система способна динамически связывать
привилегии операционной системы с приложениями. Когда
пользователь запускает приложение, операционная система
назначает этому пользователю привилегию операционной системы,
соответствующую роли, ассоциированной с приложением. После
этого приложение может включить соответствующую роль приложения.
Когда приложение завершается, ранее назначенная привилегия
операционной системы отзывается от учетного имени пользователя в
операционной системе.
Если роль должна авторизовываться операционной системой, то вы
должны конфигурировать для каждого пользователя необходимую
информацию на уровне операционной системы. Эта операция зависит
от операционной системы.
Если роли назначаются самой операционной системой (т.е. если
OS_ROLES = TRUE; см. страницу 12-22), то не требуется, чтобы
операционная система также идентифицировала их; это излишне.
Замечание: Если пользователи соединяются с базой данных через
многоканальный сервер, по умолчанию их роли не могут
идентифицироваться операционной системой. Это ограничение
принято по умолчанию для того, чтобы удаленный пользователь не
мог внедрить пользователя другой операционной системы через
сетевое соединение.
Если вы не озабочены проблемами защиты и хотите использовать
авторизацию ролей операционной системой с многоканальным
сервером, установите параметр REMOTE_OS_ROLES в значение TRUE в
Управление привилегиями и ролями 12-11
файле параметров базы данных. Это изменение начнет действовать
при очередном запуске инстанции и монтировании базы данных.
(Этот параметр по умолчанию имеет значение FALSE.)
Без авторизации
Роль может также быть создана без авторизации. Такую роль может
включать или выключать любой пользователь, которому она
назначена.
Использование предопределенных ролей
Роли, перечисленные в табл.12-4, автоматически определены для
баз данных ORACLE. Эти роли предусмотрены для совместимости
сверху вниз с более ранними версиями ORACLE. Вы можете
назначать и отзывать привилегии и роли для этих предопределенных
ролей точно так же, как и для любых других ролей, определяемых
вами.
Табл.12-4
Предопределенные роли
г=======================T==============================================¬
¦ Имя роли ¦ Привилегии, назначенные роли ¦
¦=======================+==============================================¦
¦ CONNECT (1) ¦ ALTER SESSION, CREATE CLUSTER, CREATE DATA- ¦
¦ ¦ BASE LINK, CREATE SEQUENCE, CREATE SESSION, ¦
¦ ¦ CREATE SYNONYM, CREATE TABLE, CREATE VIEW ¦
¦-----------------------+----------------------------------------------¦
¦ RESOURCE (1,2) ¦ CREATE CLUSTER, CREATE PROCEDURE, CREATE ¦
¦ ¦ SEQUENCE, CREATE TABLE, CREATE TRIGGER ¦
¦-----------------------+----------------------------------------------¦
¦ DBA (1,3,4) ¦ Все системные привилегии с опцией ADMIN ¦
¦-----------------------+----------------------------------------------¦
¦ EXP_FULL_DATABASE (5) ¦ SELECT/BACKUP ANY TABLE, INSERT, DELETE и ¦
¦ ¦ UPDATE по таблицам: SYS.INCVID,INCFIL,INCEXP ¦
¦-----------------------+----------------------------------------------¦
¦ IMP_FULL_DATABASE (5) ¦ BECOME USER, WRITEDOWN (6) ¦
L=======================¦==============================================-
(1) создается скриптом SQL.BSQ
(2) получатель роли RESOURCE получает также системную привилегию
UNLIMITED TABLESPACE через явный грант (не как часть роли
RESOURCE)
(3) получатель роли DBA получает также системную привилегию
UNLIMITED TABLESPACE через явный грант (не как часть роли
DBA)
(4) включает также роли EXP_FULL_DATABASE и IMP_FULL_DATABASE,
если был выполнен скрипт CATEXP.SQL
(5) создается скриптом CATEXP.SQL
(6) привилегия только Trusted ORACLE; см. документ Trusted
ORACLE7 Server Administrator's Guide
Привилегии, требуемые для создания ролей
Для создания роли вы должны иметь системную привилегию CREATE
ROLE. Обычно эта системная привилегия предоставляется только
администраторам защиты.
Изменение метода авторизации роли
---------------------------------
Для установки и изменения метода авторизации роли используйте
либо диалоговое окно Alter Role SQL*DBA, либо команду SQL ALTER
ROLE. Рис.12-2 показывает диалоговое окно Alter Role.
12-12 Руководство администратора
Рис.12-2
Диалог Alter Role
---------------------------------------------------------------¬
¦ File Edit Session Instance Storage Log Backup Security¦
¦--------------------------------------------------------------+
¦¦ г================= Alter Role ==================¬ ¦
¦¦ ¦ Role: ¦ ¦
¦¦ ¦ --------------------------------------------¬ ¦ ¦
¦¦ ¦ ¦ CLERK ¦ ¦ ¦
¦¦ ¦ ¦ CONNECT ¦ ¦ ¦
¦¦ ¦ ¦ DBA ¦ ¦ ¦
¦¦ ¦ L-------------------------------------------- ¦ ¦
¦¦ ¦ ( ) Change Password to: ---------------- ¦ ¦
¦¦ ¦ (o) Change to OS Authentication ¦ ¦
¦¦ ¦ ( ) Change to No Authentication ¦ ¦
¦¦ ¦-----------------------------------------------¦ ¦
¦+--------¦ Mandatory (OK) (Cancel) ¦----+
¦¦ L===============================================- ¦
¦¦ ¦
¦L-------------------------------------------------------------+
L---------------------------------------------------------------
Следующее предложение является командным эквивалентом
диалогового окна Alter Role, показанного на рис.12-2:
ALTER ROLE clerk IDENTIFIED EXTERNALLY;
Для дополнительной информации об авторизации ролей см. секцию
"Авторизация роли" на странице 12-11.
Привилегии, требуемые для изменения авторизации ролей
Для изменения метода авторизации роли вы должны либо иметь
системную привилегию ALTER ANY ROLE, либо данная роль должна
была быть вам назначена с опцией WITH ADMIN OPTION.
Изменение умалчиваемых ролей пользователя
-----------------------------------------
Для установки и изменения списка умалчиваемых ролей пользователя
можно использовать либо диалоговое окно Alter User SQL*DBA, либо
команду SQL ALTER USER. См. "Измение пользователей" на странице
11-11 для дополнительной информации об этих возможностях.
Если список умалчиваемых ролей пользователя специфицирован как
ALL, то каждая роль, назначаемая пользователю, автоматически
добавляется в его список умалчиваемых ролей. Лишь последующей
модификацией списка умалчиваемых ролей пользователя можно
удалить вновь назначенные роли из его списка умалчиваемых ролей.
Параметр MAX_ENABLED_ROLES
Пользователь может включить максимально столько ролей, сколько
специфицировано параметром инициализации MAX_ENABLED_ROLES. В
этот счет входят и все косвенно назначенные роли, включенные как
результат включения непосредственно назначенных ролей.
Администратор базы данных может изменять это ограничение,
модифицируя значение этого параметра инициализации. Высокое
значение этого параметра позволяет каждой сессии пользователя
одновременно иметь большее число включенных ролей. Однако, чем
больше значение этого параметра, тем больше памяти требуется от
Управление привилегиями и ролями 12-13
имени каждой пользовательской сессии; причина этого в том, что в
области PGA для каждой сессии требуется четыре байта на каждую
роль. Определите максимальное число ролей, которое потребуется
одновременно включать для одного пользователя, и используйте это
значение для параметра MAX_ENABLED_ROLES.
Удаление ролей
--------------
В некоторых случаях может потребоваться удалить роль из базы
данных. Домены защиты всех пользователей и ролей, которым была
назначена удаляемая роль, немедленно отразят отсутствие
привилегий этой роли. Все роли, косвенно назначавшиеся через
удаленную роль, также будут удалены из затрагиваемых доменов
защиты. Удаление роли автоматически удаляет ее из списков
умалчиваемых ролей всех пользователей.
Поскольку создание объектов не зависит от привилегий, полученных
через роль, таблицы и другие объекты не удаляются при удалении
роли.
Для удаления роли используйте либо диалоговое окно Drop Role
SQL*DBA, либо команду SQL DROP ROLE. Рис.12-3 показывает
диалоговое окно Drop Role.
Рис.12-3
Диалог Drop Role
---------------------------------------------------------------¬
¦ File Edit Session Instance Storage Log Backup Security¦
¦--------------------------------------------------------------+
¦¦ ¦
¦¦ г================= Drop Role ===================¬ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦ Role: ¦ ¦
¦¦ ¦ --------------------------------------------¬ ¦ ¦
¦¦ ¦ ¦ CLERK ¦ ¦ ¦
¦¦ ¦ ¦ CONNECT ¦ ¦ ¦
¦¦ ¦ ¦ DBA ¦ ¦ ¦
¦¦ ¦ ¦ RESOURCE ¦ ¦ ¦
¦¦ ¦ L-------------------------------------------- ¦ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦-----------------------------------------------¦ ¦
¦+--------¦ Mandatory (OK) (Cancel) ¦----+
¦¦ L===============================================- ¦
¦¦ ¦
¦¦ ¦
¦L-------------------------------------------------------------+
L---------------------------------------------------------------
Следующее предложение является командным эквивалентом
диалогового окна Drop Role, показанного на рис.12-3:
DROP ROLE clerk;
Привилегии, требуемые для удаления ролей
Для удаления роли вы должны либо иметь системную привилегию DROP
ANY ROLE, либо данная роль должна была быть вам назначена с
опцией ADMIN OPTION.
12-14 Руководство администратора
----------------
Назначение и отзыв привилегий и ролей
Эта секция объясняет, как назначать и отзывать системные
привилегии, роли и объектные привилегии.
Назначение системных привилегий и ролей
---------------------------------------
Для назначения системных привилегий и ролей другим ролям и
пользователям используйте либо диалоговое окно Grant System
Privileges/Roles SQL*DBA, либо команду SQL GRANT. Рис.12-4
показывает диалоговое окно Grant System Privileges/Roles.
Рис.12-4
Диалог Grant System Privileges/Roles
---------------------------------------------------------------¬
¦ File Edit Session Instance Storage Log Backup Security¦
¦--------------------------------------------------------------+
¦¦ ¦
¦¦ г=========== Grant System Privileges/Roles =========¬ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦ Grant: create session, accts_pay----------------- ¦ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦ To: jward, finance---------------------------- ¦ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦ [ ] Allow grantee to grant the privilege(s)/role(s¦ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦---------------------------------------------------¦ ¦
¦¦ ¦ List, Mandatory (OK) (Cancel) ¦ ¦
¦¦ L===================================================- ¦
¦¦ ¦
¦+-------------------------------------------------------------+
¦¦ ¦
¦¦ ¦
¦L-------------------------------------------------------------+
L---------------------------------------------------------------
Следующее предложение является командным эквивалентом
диалогового окна Grant System Privileges/Roles, показанного на
рис.12-4:
GRANT create session, accts_pay
TO jward, finance;
Замечание: Объектные привилегии НЕЛЬЗЯ назначать вместе в
системными привилегиями и ролями в одном предложении GRANT.
Опция ADMIN
Системная привилегия или роль может быть назначена с опцией
ADMIN OPTION. (Нельзя включать опцию ADMIN OPTION в предложение
GRANT, назначающее роль другой роли.) Пользователь, получивший
эту специальную опцию, имеет несколько расширенных возможностей:
* Он может назначать или отзывать эту системную привилегию
или роль у ЛЮБОГО пользователя или роли в базе данных.
(Однако он не может отозвать эту роль у самого себя.)
Управление привилегиями и ролями 12-15
* Он может далее назначать эту системную привилегию или
роль с опцией ADMIN OPTION.
* Если это роль, он может изменить или удалить эту роль.
Пользователь, не получивший опцию ADMIN OPTION, не может
выполнять таких операций.
Когда пользователь создает роль, эта роль автоматически
назначается ее создателю с опцией ADMIN OPTION.
Предположим, что администратор защиты назначает роль NEW_DBA
пользователю MICHAEL с помощью следующего предложения:
GRANT new_dba TO michael WITH ADMIN OPTION;
Пользователь MICHAEL может теперь не только использовать все
привилегии, подразумеваемые ролью NEW_DBA, но может также
назначать, отзывать или удалять роль NEW_DBA по своему
усмотрению. Из-за этих широких возможностей, будьте осторожны,
назначая системные привилегии или роли с опцией ADMIN OPTION.
Такие возможности обычно резервируются для администратора
защиты, и редко предоставляются другим администраторам или
пользователям системы.
Привилегии, требуемые для назначения системных привилегий или ролей
Для назначения системной привилегии или роли пользователю
требуется опция ADMIN OPTION для всех назначаемых им системных
привилегий и ролей. Кроме того, пользователь с системной
привилегией GRANT ANY ROLE может назначать любую роль в базе
данных.
Назначение объектных привилегий
-------------------------------
Объектные привилегии могут назначаться ролям и пользователям с
помощью команды SQL GRANT. Например, следующее предложение
назначает объектные привилегии SELECT, INSERT и DELETE для всех
столбцов таблицы EMP пользователям JWARD и TSMITH:
GRANT select, insert, delete ON emp TO jward, tsmith;
Чтобы назначить объектную привилегию INSERT только для столбцов
ENAME и JOB таблицы EMP тем же пользователям, введите следующее
предложение:
GRANT insert(ename, job) ON emp TO jward, tsmith;
Чтобы назначить все объектные привилегии по обзору SALARY
пользователю WALLEN, используйте обозначение ALL:
GRANT ALL ON salary TO wallen;
Замечание: Объектные привилегии НЕЛЬЗЯ назначать вместе в
системными привилегиями и ролями в одном предложении GRANT.
12-16 Руководство администратора
Опция GRANT OPTION
Объектная привилегия может быть назначена пользователю с опцией
GRANT OPTION. Пользователь, получивший эту специальную опцию,
имеет несколько расширенных возможностей:
* Он может назначать эту объектную привилегию любому
пользователю или роли в базе данных.
* Он может далее назначать эту объектную привилегию с
опцией GRANT OPTION или без таковой.
* Если он получил объектные привилегии для таблицы с опцией
GRANT OPTION, и он имеет системную привилегию CREATE VIEW
или CREATE ANY VIEW, то он может создавать обзоры по этой
таблице, и назначать соответствующие привилегии по этому
обзору любому пользователю или роли в базе данных.
Пользователь, схема которого содержит объект, автоматически
имеет все ассоциированные объектные привилегии для этого объекта
с опцией GRANT OPTION.
Особо заметьте, что опция GRANT OPTION недопустима при
назначении объектной привилегии РОЛИ. ORACLE предотвращает
распространение объектных привилегий через роли, так что
получатели роли не могут дальше продвигать свои объектные
привилегии, полученные через роли.
Привилегии, требуемые для назначения объектных привилегий
Чтобы назначить кому-либо объектную привилегию, вы должны
удовлетворять одному из следующих условий:
* Владеть соответствующим объектом.
* Иметь для объектных привилегий, которые вы хотите
назначить, опцию GRANT OPTION.
Отзыв системных привилегий и ролей
----------------------------------
Для отзыва системных привилегий и/или ролей используйте либо
диалоговое окно Revoke System Privileges/Roles SQL*DBA, либо
команду SQL REVOKE. Рис.12-5 показывает диалоговое окно Revoke
System Privileges/Roles.
Управление привилегиями и ролями 12-17
Рис.12-5
Диалог Revoke System Privileges/Roles
---------------------------------------------------------------¬
¦ File Edit Session Instance Storage Log Backup Security¦
¦--------------------------------------------------------------+
¦¦ ¦
¦¦ г========== Revoke System Privileges/Roles =========¬ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦ Revoke: create table, accts_rec------------------ ¦ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦ From: tsmith, finance-------------------------- ¦ ¦
¦¦ ¦ ¦ ¦
¦¦ ¦---------------------------------------------------¦ ¦
¦¦ ¦ List, Mandatory (OK) (Cancel) ¦ ¦
¦¦ L===================================================- ¦
¦+-------------------------------------------------------------+
¦¦ ¦
¦¦ ¦
¦L-------------------------------------------------------------+
L---------------------------------------------------------------
Следующее предложение является командным эквивалентом
диалогового окна Revoke System Privileges/Roles, показанного на
рис.12-5:
REVOKE create table, accts_rec FROM tsmith, finance;
Замечание: Нельзя отобрать лишь опцию ADMIN OPTION для системной
привилегии или роли, не отбирая самой этот системной привилегии
или роли; чтобы сделать это, отзовите системную привилегию или
роль и заново назначьте ее без опции ADMIN OPTION.
Привилегии, требуемые для отзыва системных привилегий и ролей
Любой пользователь, имеющий опцию ADMIN OPTION для системной
привилегии или роли, может отозвать эту системную привилегию или
роль у любого пользователя или роли базы данных (не требуется,
чтобы пользователь, у которого отзывается привилегия или роль, в
свое время получил ее у отзывающего пользователя). Кроме того,
любой пользователь с системной привилегией GRANT ANY ROLE может
отозвать любую роль.
Отзыв объектных привилегий
--------------------------
Объектные привилегии можно отзывать с помощью команды SQL
REVOKE. Например, предполагая что вы предоставляли эти
привилегии, чтобы отозвать привилегии SELECT и INSERT по таблице
EMP от пользователей JWARD и TSMITH, введите следующее
предложение:
REVOKE select, insert ON emp
FROM jward, tsmith;
Вы можете также отозвать все привилегии по таблице DEPT (даже
если вы назначали лишь одну привилегию), назначенные вами роли
HUMAN_RESOURCES, введя следующее предложение:
REVOKE ALL ON dept FROM human_resources;
12-18 Руководство администратора
Замечание: Предложение, показанное выше, отзовет лишь те
привилегии, на которые вы имеете соответствующие полномочия, но
не все привилегии, которые были назначены другими. Нельзя
выборочно отозвать опцию GRANT OPTION, не отзывая привилегию на
объект; чтобы сделать это, следует отозвать объектную привилегию
и заново назначить ее без опции GRANT OPTION. Пользователь не
может отозвать объектную привилегию у самого себя.
Отзыв выборочных объектных привилегий для столбцов
Хотя пользователи могут назначать выборочные привилегии SELECT,
UPDATE и REFERENCES по отдельным столбцам таблиц и обзоров, они
не могут выборочно отзывать такие привилегии аналогичным
предложением REVOKE. Вместо этого, следует сначала отозвать
объектную привилегию по всем столбцам таблицы или обзора, а
затем вновь выборочно назначить привилегии по тем столбцам,
которые должны остаться.
Например, предположим, что роли HUMAN_RESOURCES была назначена
привилегия UPDATE по столбцам DEPTNO и DNAME таблицы DEPT.
Чтобы отозвать привилегию UPDATE по столбцу DEPTNO и оставить ее
по столбцу DNAME, вы должны ввести следующие два предложения:
REVOKE UPDATE ON dept FROM human_resources;
GRANT UPDATE (dname) ON dept TO human_resources;
Здесь предложение REVOKE отзывает привилегию UPDATE по всем
столбцам таблицы DEPT от роли HUMAN_RESOURCES. Предложение
GRANT заново назначает привилегию UPDATE по столбцу DNAME для
этой роли.
Отзыв объектной привилегии REFERENCES
Если пользователь, получивший привилегию REFERENCES, использовал
эту привилегию для создания ограничения внешнего ключа (которое
существует в данный момент), то пользователь, назначавший эту
привилегию, может отозвать ее, лишь специфицировав в предложении
REVOKE опцию CASCADE CONSTRAINTS, например:
REVOKE REFERENCES ON dept FROM jward CASCADE CONSTRAINTS;
Когда специфицирована опция CASCADE CONSTRAINTS, все ограничения
внешних ключей, использующие отзываемую привилегию REFERENCES,
удаляются.
Привилегии, требуемые для отзыва объектных привилегий
Для отзыва объектной привилегии требуется, чтобы вы были тем
лицом, которое назначало эту объектную привилегию.
Каскадные эффекты отзыва привилегий
-----------------------------------
В зависимости от типа привилегии, может иметь или не иметь место
каскадный эффект при отзыве этой привилегии. Следующие секции
объясняют несколько случаев каскадных эффектов.
Управление привилегиями и ролями 12-19
Системные привилегии
При отзыве системной привилегии, относящейся к операции DDL,
каскадных эффектов не бывает, независимо от того, была ли эта
привилегия назначена с опцией ADMIN OPTION. Например,
предположим следующее:
1. Администратор защиты назначает пользователю JWARD системную
привилегию CREATE TABLE с опцией ADMIN OPTION.
2. JWARD создает таблицу.
3. JWARD назначает системную привилегию CREATE TABLE
пользователю TSMITH.
4. TSMITH создает таблицу.
5. Администратор защиты отзывает у пользователя JWARD системную
привилегию CREATE TABLE.
6. Таблица пользователя JWARD продолжает существовать. TSMITH
по-прежнему имеет системную привилегию CREATE TABLE, и его
таблица по-прежнему существует.
Каскадные эффекты можно наблюдать при отзыве системной
привилегии, связанной с операцией DML. Например, если
пользователю назначена привилегия SELECT ANY TABLE, и этот
пользователь создал какие-либо процедуры, то все процедуры в
схеме этого пользователя должны быть заново откомпилированы
после отзыва этой привилегии, прежде чем их можно будет
использовать вновь.
Объектные привилегии
Отзыв объектной привилегии может привести к нескольким типам
каскадных эффектов, которые должны быть исследованы перед тем,
как будет выдано предложение REVOKE:
* При отзыве объектной привилегии DML могут быть затронуты
определения объектов, зависящих от этой объектной
привилегии DML. Например, предположим, что тело процедуры
TEST включает предложение SQL, которое опрашивает таблицу
EMP. Если привилегия SELECT по таблице EMP будет отозвана
у владельца таблицы EMP, то процедура перестанет успешно
выполняться.
* Определения объектов, требующие объектных привилегий DDL
ALTER и INDEX, не затрагиваются при отзыве этих объектных
привилегий ALTER и INDEX. Например, при отзыве
привилегии INDEX у пользователя, создавшего индекс по не
своей таблице, этот индекс будет по-прежнему
существовать.
* При отзыве у пользователя привилегии REFERENCES по
таблице, все ограничения внешних ключей, которые были
созданы с использованием этой привилегии, автоматически
удаляются. Например, предположим, что пользователь JWARD
получил привилегию REFERENCES по столбцу DEPTNO таблицы
DEPT, и создал внешний ключ по столбцу DEPTNO таблицы
EMP, ссылающийся на столбец DEPT.DEPTNO. При отзыве
привилегии REFERENCES по столбцу DEPTNO таблицы DEPT
12-20 Руководство администратора
ограничение внешнего ключа по столбцу DEPTNO таблицы EMP
будет автоматически удалено той же операцией.
* Гранты (назначения) объектных привилегий, которые были
распространены с помощью опции GRANT OPTION,
автоматически отзываются при отзыве объектной привилегии
у того, кто имел опцию GRANT OPTION. Например,
предположим, что пользователь USER1 получил объектную
привилегию SELECT с опцией GRANT OPTION, и назначил
привилегию SELECT по таблице EMP пользователю USER2.
Впоследствии привилегия SELECT у пользователя USER1
отзывается. Этот отзыв каскадно распространяется и на
пользователя USER2. Все объекты, которые зависели от
отозванных привилегий SELECT пользователей USER1 и USER2,
будут также затронуты, как описано в предыдущих
подпунктах.
Назначение и отзыв привилегий и ролей для группы PUBLIC
-------------------------------------------------------
Привилегии и роли можно также назначать и отзывать у группы
пользователей PUBLIC. Поскольку группа PUBLIC доступна каждому
пользователю базы данных, все привилегии и роли, назначенные
PUBLIC, доступны каждому пользователю базы данных.
Администраторы защиты и пользователи должны назначать группе
PUBLIC лишь те привилегии и роли, которые действительно
необходимы каждому пользователю. Эта рекомендация согласуется с
общим правилом, согласно которому в любой момент каждый
пользователь базы данных должен иметь лишь те привилегии,
которые требуются ему для успешного выполнения текущей задачи.
Отзыв прав у PUBLIC может повлечь за собой значительные
каскадные эффекты, в зависимости от того, какая привилегия
отзывается. Если у PUBLIC отзывается любая привилегия,
связанная с операцией DML (например, SELECT ANY TABLE, UPDATE
ON, и т.п.), то все процедуры в базе данных (включая функции и
пакеты) должны быть заново АВТОРИЗОВАНЫ, прежде чем их можно
будет использовать снова (см. "Управление зависимостями
объектов" на странице 8-75). Поэтому будьте осторожны, назначая
группе PUBLIC привилегии, связанные с операциями DML.
Когда имеют эффект назначения и отзывы?
---------------------------------------
В зависимости от того, что назначается или отзывается, эффект
этой операции может проявляться в различные моменты:
* Все назначения/отзывы привилегий (системных и объектных)
кому угодно (пользователям, ролям, PUBLIC) наблюдаются
немедленно.
* Все назначения/отзывы ролей кому угодно (пользователям,
ролям, PUBLIC) наблюдаются лишь после того, как текущая
сессия пользователя выдает предложение SET ROLE для
повторного включения роли, или при создании новой сессии
пользователя.
Управление привилегиями и ролями 12-21
----------------
Назначение ролей через операционную систему
Вместо явного назначения и отзыва администратором защиты ролей
базы данных другим ролям и пользователям с помощью предложений
GRANT и REVOKE, можно использовать возможности операционной
системы, которая назначает роли пользователям в момент
установления соединения; роли могут управляться операционной
системой и передаваться ORACLE, когда пользователь создает
сессию. Как часть этого механизма, можно идентифицировать
умалчиваемые роли каждого пользователя, а также те роли, которые
назначаются пользователю с опцией ADMIN OPTION. Однако, даже
если операционная система используется для авторизации ролей для
пользователей, все роли должны быть созданы в базе данных, и
привилегии должны быть назначены им предложениями GRANT, как
обычно.
Преимущество использования операционной системы для авторизации
пользовательских ролей состоит в том, что управление
привилегиями выносится из базы данных ORACLE; это управление
осуществляется средствами защиты, предлагаемыми операционной
системой. Эта возможность может предоставлять преимущества
централизованной защиты для многих системных операций.
Например, в операционной системе MVS администраторы ORACLE могут
идентифицировать роли пользователей в базе данных группами RACF,
в системе UNIX - группами пользователей UNIX, а в системе VMS -
идентификаторами прав.
Основным недостатком использования операционной системы для
авторизации пользовательских ролей в базе данных является то,
что управление привилегиями можно осуществлять лишь на уровне
ролей; индивидуальные привилегии нельзя назначать через
операционную систему, хотя их по-прежнему можно назначать внутри
базы данных с помощью предложений GRANT.
Вторым недостатком этого метода является то, что по умолчанию
пользователи не могут соединяться с базой данных через
многоканальный сервер, если ролями управляет операционная
система. Однако вы можете изменить это умолчание; см.
"Использование многоканального сервера при управлении ролями
операционной системой" на странице 12-24.
Замечание: Возможности, описанные в этой секции, доступны лишь в
некоторых операционных системах. Эта информация зависит от
операционной системы; обратитесь к вашему руководству по
инсталляции [IUG].
Использование авторизации ролей операционной системой
-----------------------------------------------------
Чтобы конфигурировать базу данных так, чтобы она использовала
операционную систему для авторизации всех ролей пользователя в
базе данных при создании сессии, установите параметр
инициализации OS_ROLES в TRUE (и перезапустите инстанцию, если
она в данный момент работает). Когда пользователь пытается
создать сессию с базой данных, ORACLE инициализирует его домен
защиты, используя роли базы данных, идентифицированные
операционной системой.
12-22 Руководство администратора
Для идентификации ролей пользователя в базе данных, учетное имя
каждого пользователя в операционной системе должно иметь
идентификаторы операционной системы (называемые группами,
идентификаторами прав, или еще как-нибудь), которые указывают,
какие роли базы данных должны быть доступны этому пользователю.
Спецификации ролей могут также указывать, какие роли являются
умалчиваемыми для пользователя, и какие роли предоставляются ему
с опцией ADMIN OPTION. Независимо от того, какая операционная
система используется, спецификация роли базы данных на уровне
операционной системы имеет следующий формат:
ORA__[_[D][A]]
где:
ID ID обозначает разные вещи в разных операционных системах.
Например, в системе VMS это идентификатор инстанции базы
данных; в системе MVS это тип машины; в системе UNIX это
системный идентификатор.
D Этот необязательный символ указывает, что данная роль
должна быть умалчиваемой ролью пользователя базы данных.
A Этот необязательный символ указывает, что данная роль
должна назначаться пользователю с опцией ADMIN OPTION.
Это позволяет пользователю назначать эту роль другим
ролям (но не пользователям). (Роли не могут назначаться
пользователям, когда для управления ролями используется
операционная система.)
Замечание: Если присутствуют символы D или A, им должен
предшествовать символ подчеркивания.
Например, учетное имя операционной системы может иметь следующие
роли, идентифицированные в его профиле операционной системы:
ORA_PAYROLL_ROLE1
ORA_PAYROLL_ROLE2_A
ORA_PAYROLL_ROLE3_D
ORA_PAYROLL_ROLE4_DA
Когда соответствующий пользователь соединяется с инстанцией
PAYROLL, роли ROLE3 и ROLE4 будут его умалчиваемыми ролями, а
роли ROLE2 и ROLE4 будут доступны с опцией ADMIN OPTION.
Назначение и отзыв ролей в режиме OS_ROLES = TRUE
-------------------------------------------------
Если параметр инициализации OS_ROLES установлен в TRUE,
операционная система полностью управляет назначениями (и
отзывами) ролей ПОЛЬЗОВАТЕЛЯМ. Все предыдущие назначения
пользователям ролей предложениями GRANT теряют силу; однако они
по-прежнему сохраняются в словаре данных. Применяются лишь те
назначения ролей пользователям, которые осуществлены на уровне
операционной системы. Однако пользователи по-прежнему могут
назначать привилегии как ролям, так и пользователям.
Управление привилегиями и ролями 12-23
Замечание: Если операционная система назначает пользователю роль
с опцией ADMIN OPTION, то этот пользователь может назначать эту
роль лишь другим ролям, но не пользователям.
Включение и выключение ролей в режиме OS_ROLES = TRUE
-----------------------------------------------------
Если параметр инициализации OS_ROLES установлен в TRUE, то любая
роль, назначенная операционной системой, может быть динамически
включена с помощью команды SET ROLE; если эта роль была
определена с идентификацией (через пароль или через операционную
систему), то эта идентификация будет осуществлена. Однако в
предложении SET ROLE нельзя указывать никакой роли, не
идентифицированной для учетного имени в операционной системе,
даже если эта роль была в свое время назначена предложением
GRANT в режиме OS_ROLES = FALSE. (Если вы специфицируете такую
роль, ORACLE игнорирует ее.)
Когда OS_ROLES = TRUE, пользователь может включить столько
ролей, сколько специфицировано параметром MAX_ENABLED_ROLES.
Использование многоканального сервера
при управлении ролями операционной системой
-------------------------------------------
Если вы хотите, чтобы ролями управляла операционная система, то,
по умолчанию, пользователи не могут подключаться к базе данных
через многоканальный сервер. Это ограничение принято по
умолчанию, чтобы избежать возможности проникновения в систему
пользователей других операционных систем через незащищенное
соединение.
Если вы не озабочены проблемами защиты и хотите использовать
авторизацию ролей операционной системой с многоканальным
сервером, установите параметр REMOTE_OS_ROLES в значение TRUE в
файле параметров базы данных. Это изменение начнет действовать
при очередном запуске инстанции и монтировании базы данных.
(Этот параметр по умолчанию имеет значение FALSE.)
12-24 Руководство администратора
----------------
Вывод информации о привилегиях и ролях
Чтобы выдать все гранты, сделанные для объектов, пользователь
может опросить следующие обзоры словаря данных:
* ALL_COL_PRIVS, USER_COL_PRIVS, DBA_COL_PRIVS
* ALL_COL_PRIVS_MADE, USER_COL_PRIVS_MADE
* ALL_COL_PRIVS_RECD, USER_COL_PRIVS_RECD
* ALL_TAB_PRIVS, USER_TAB_PRIVS, DBA_TAB_PRIVS
* ALL_TAB_PRIVS_MADE, USER_TAB_PRIVS_MADE
* ALL_TAB_PRIVS_RECD, USER_TAB_PRIVS_RECD
* DBA_ROLES
* USER_ROLE_PRIVS, DBA_ROLE_PRIVS
* USER_SYS_PRIVS, DBA_SYS_PRIVS
* COLUMN_PRIVILEGES
* ROLE_ROLE_PRIVS, ROLE_SYS_PRIVS, ROLE_TAB_PRIVS
* SESSION_PRIVS, SESSION_ROLES
Замечание: Обратитесь к приложению B за подробным описанием этих
обзоров словаря данных.
Примеры
-------
Для приведенных ниже примеров предполагается, что были выданы
следующие предложения:
CREATE ROLE security_admin IDENTIFIED BY honcho;
GRANT create profile, alter profile, drop profile,
create role, drop any role, grant any role, audit any,
audit system, create user, become user, alter user,drop user
TO security_admin WITH ADMIN OPTION;
GRANT SELECT, DELETE ON sys.aud$ TO security_admin;
GRANT security_admin, create session TO swilliams;
GRANT security_admin TO system_administrator;
GRANT create session TO jward;
GRANT SELECT, DELETE ON emp TO jward;
GRANT INSERT (ename, job) ON emp TO swilliams, jward;
Управление привилегиями и ролями 12-25
Пример 1:
Вывод всех грантов системных привилегий
Следующий запрос выдает все назначения системных привилегий,
сделанные ролям и пользователям:
SELECT * FROM sys.dba_sys_privs;
GRANTEE PRIVILEGE ADM
------------------ ------------------------------------ ---
SECURITY_ADMIN ALTER PROFILE YES
SECURITY_ADMIN ALTER USER YES
SECURITY_ADMIN AUDIT ANY YES
SECURITY_ADMIN AUDIT SYSTEM YES
SECURITY_ADMIN BECOME USER YES
SECURITY_ADMIN CREATE PROFILE YES
SECURITY_ADMIN CREATE ROLE YES
SECURITY_ADMIN CREATE USER YES
SECURITY_ADMIN DROP ANY ROLE YES
SECURITY_ADMIN DROP PROFILE YES
SECURITY_ADMIN DROP USER YES
SECURITY_ADMIN GRANT ANY ROLE YES
SWILLIAMS CREATE SESSION NO
JWARD CREATE SESSION NO
Пример 2:
Вывод всех грантов ролей
Следующий запрос выдает все назначения ролей, которые были
сделаны пользователям и другим ролям:
SELECT * FROM sys.dba_role_privs;
GRANTEE GRANTED_ROLE ADM
------------------ ------------------------------------ ---
SWILLIAMS SECURITY_ADMIN NO
Пример 3:
Вывод объектных привилегий, назначенных пользователю
Следующий запрос выдает все объектные привилегии (не включая
выборочных привилегий для столбцов), назначенные конкретному
пользователю:
SELECT table_name, privilege, grantable FROM sys.dba_tab_privs
WHERE grantee = 'JWARD';
TABLE_NAME PRIVILEGE GRANTABLE
------------ ------------ -----------
EMP SELECT NO
EMP DELETE NO
12-26 Руководство администратора
Чтобы выдать все назначенные выборочные привилегии для столбцов,
введите следующий запрос:
SELECT grantee, table_name, column_name, privilege,
FROM sys.dba_col_privs;
GRANTEE TABLE_NAME COLUMN_NAME PRIVILEGE
------------- ------------- ------------------- ---------------
SWILLIAMS EMP ENAME INSERT
SWILLIAMS EMP JOB INSERT
JWARD EMP ENAME INSERT
JWARD EMP JOB INSERT
Пример 4:
Вывод текущих привилегий вашей сессии
Следующий запрос выдает все роли, который в данный момент
включены для выдающего этот запрос:
SELECT * FROM session_roles;
Если пользователь SWILLIAMS получил роль SECURITY_ADMIN и выдает
этот запрос, он получит следующую информацию:
ROLE
-------------------------------
SECURITY_ADMIN
Следующий запрос выдает все системные привилегии, доступные в
данный момент в домене защиты выдающего этот запрос, и
полученные как через явные гранты, так и из включенных ролей:
SELECT * FROM session_privs;
Если пользователь SWILLIAMS получил роль SECURITY_ADMIN и выдает
этот запрос, он получит следующую информацию:
PRIVILEGE
-------------------------------------------
AUDIT SYSTEM
CREATE SESSION
CREATE USER
BECOME USER
ALTER USER
DROP USER
CREATE ROLE
DROP ANY ROLE
GRANT ANY ROLE
AUDIT ANY
CREATE PROFILE
ALTER PROFILE
DROP PROFILE
Если отключить роль SECURITY_ADMIN для пользователя SWILLIAMS,
то первый запрос не вернет ни одной строки, а второй запрос
возвратит лишь строку для гранта привилегии CREATE SESSION.
Управление привилегиями и ролями 12-27
Пример 5:
Вывод ролей базы данных
Обзор словаря данных DBA_ROLES может использоваться для вывода
всех ролей базы данных и метода авторизации, используемого для
каждой роли. Например, следующий запрос выдает все роли в базе
данных:
SELECT * FROM sys.dba_roles;
ROLE PASSWORD
------------------------------ --------
CONNECT NO
RESOURCE NO
DBA NO
SECURITY_ADMIN YES
Пример 6:
Вывод информации о доменах привилегий в ролях
Обзоры словаря данных ROLE_ROLE_PRIVS, ROLE_SYS_PRIVS и
ROLE_TAB_PRIVS содержат информацию о привилегиях и ролях в
составе ролей.
Например, следующий запрос выдает все роли, назначенные роли
SYSTEM_ADMIN:
SELECT granted_role, admin_option
FROM role_role_privs
WHERE role = 'SYSTEM_ADMIN';
GRANTED_ROLE ADM
------------------------------ ---
SECURITY_ADMIN NO
Следующий запрос выдает все системные привилегии, назначенные
роли SECURITY_ADMIN:
SELECT * FROM role_sys_privs WHERE role = 'SECURITY_ADMIN';
ROLE PRIVILEGE ADM
------------------------- ----------------------------- ---
SECURITY_ADMIN ALTER PROFILE YES
SECURITY_ADMIN ALTER USER YES
SECURITY_ADMIN AUDIT ANY YES
SECURITY_ADMIN AUDIT SYSTEM YES
SECURITY_ADMIN BECOME USER YES
SECURITY_ADMIN CREATE PROFILE YES
SECURITY_ADMIN CREATE ROLE YES
SECURITY_ADMIN CREATE USER YES
SECURITY_ADMIN DROP ANY ROLE YES
SECURITY_ADMIN DROP PROFILE YES
SECURITY_ADMIN DROP USER YES
SECURITY_ADMIN GRANT ANY ROLE YES
12-28 Руководство администратора
Следующий запрос выдает все объектные привилегии, назначенные
роли SECURITY_ADMIN:
SELECT table_name, privilege FROM role_tab_privs
WHERE role = 'SECURITY_ADMIN';
TABLE_NAME PRIVILEGE
------------------------------ -------------------
AUD$ DELETE
AUD$ SELECT