Такие операторы DDL, как GRANT (предоставить) и REVOKE (отменить), нельзя использовать непосредственно в PL/SQL, — они служат для определения возможности выполнения других SQL-операторов. Чтобы выполнить над таблицей Oracle некоторую операцию, например INSERT или DELETE, необходимо иметь соответствующие полномочия, которые предоставляются и отменяются с помощью SQL-команд GRANT и REVOKE.
Объектные и системные привилегии
Существуют привилегии двух различных видов: объектные и системные. Объектная привилегия (object privilege) разрешает выполнение определенной операции над конкретным объектом (например, над таблицей). Системная привилегия (system privilege) разрешает выполнение операций над целым классом объектов.
В таблице 4.2 представлены существующие объектные привилегии. Объектные привилегии DDL — ALTER (изменить), INDEX (индексировать), REFERENCES (ссылки) — нельзя применять непосредственно в PL/SQL (за исключением динамического SQL), так как они разрешают
выполнение операций DDL над определенным объектом.
Существует множество системных привилегий, соответствующих практически всем возможным операциям DDL. Например, системная
привилегия CREATE TABLE позволяет ее обладателю создавать таблицы.
Системная привилегия CREATE ANY TABLE дает возможность создавать таблицы в других схемах. Системные привилегии представлены в руководстве "Server SQL Reference".
GRANT и REVOKE
Оператор GRANT предоставляет другой схеме доступ к привилегии, а оператор REVOKE запрещает доступ, разрешенный оператором GRANT. Оба оператора могут использоваться как для объектных, так и для системных привилегий.
GRANT
Для объектных привилегий синтаксис оператора GRANT таков:
GRANT привилегия ON объект ТО обладателъ_привилегии [WITH GRANT OPTION];
где привилегия — это нужная привилегия, объект — это объект, к которому разрешается доступ, а обладатель_привилегиг — пользователь, получающий привилегию. Для примера предположим, что userA — это схема базы данных. Тогда оператор GRANT может выглядеть следующим образом:
GRANT SELECT ON classes TO userA;
Если указывается параметр WITH GRANT OPTION (с возможностью предоставления привилегий), то пользователь userA будет иметь возможность и сам предоставлять привилегии другим пользователям. В операторе GRANT можно указывать несколько привилегий, например:
GRANT UPDATE, DELETE ON students TO userA;
Для системных привилегий синтаксис оператора GRANT таков:
GRANT привилегияТОобладатель_приаилегиг [WITH ADMIN OPTION];
где привилегия — это предоставляемая системная привилегия, а
— пользователь, получающий привилегию. Если в оператор
включается параметр WITH ADMIN OPTION (с возможностью администри-
рования), то будет иметь возможность предостав-
лять привилегии другим пользователям. Например:
включается параметр WITH ADMIN OPTION (с возможностью администри-
рования), то будет иметь возможность предостав-
лять привилегии другим пользователям. Например:
Г] GRANT CREATE TABLE, ALTER ANY PROCEDURE TO userA;
Как и в случае с объектными привилегиями, в одном и том же операторе GRANT можно указывать несколько привилегий.
GRANT является оператором DDL, поэтому результаты его выполнения сказываются немедленно, и после того как он выполнен, осуществляется неявное завершение (COMMIT) транзакции.
REVOKE
Для объектных привилегий синтаксис оператора REVOKE таков:
REVOKE привилегия ON объект FROM обладатель_привилеши [CASCADECONSTRAINTS] [FORCE];
где привилегия — это отменяемая привилегия, объект — это объект, на кото-
рый была предоставлена привилегия, а — пользова-
тель, имевший эту привилегию. Например:
рый была предоставлена привилегия, а — пользова-
тель, имевший эту привилегию. Например:
< Предыдущая | Следующая > |
---|