Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инструкция REVOKE cоветы и хитрости Oracle

Команда REVOKE не только немедленно отменяет объектные и системные привилегии, она также позволяет отменить назначение роли пользователю (или назначение роли другой роли). За информацией о конкретных объектных и системных привилегиях, поддерживаемых инструкцией REVOKE, обращайтесь к описанию инструкции GRANT.

Две формы команды REVOKE, REVOKE объектная привилегия и REVOKE системная_привилегия, являются взаимоисключающими. Не пытайтесь выполнить обе операции в одной инструкции. Поскольку полный синтаксис обеих форм команды очень длинный, обращайтесь к разделу «Инструкция GRANT» за дополнительной информацией об объектных и системных привилегиях.

Платформа Oracle предоставляет интересную возможность работы с привилегиями. В то время как другие платформы позволяют пользователю иметь более одного набора привилегий (назначенных ему индивидуально и как члену группы), Oracle идет на шаг дальше. Пользователь может иметь несколько дарителей, предоставляющих ему доступ к указанному объекту. В этом случае, чтобы пользователь был полностью лишен привилегии, все дарители должны отозвать привилегию. Если хотя бы один даритель этого не сделает, то пользователь по-прежнему будет иметь данную привилегию. Для инструкции REVOKE применяется следующий синтаксис.

Реализация инструкции REVOKE в MySQL не отменяет явным образом права доступа к объектам, которые были удалены. Таким образом, нужно явно отменять привилегии доступа к таблице, даже если таблица удалена. Представим, например, что вы удалили таблицу, не отменив существующие права доступа. Если позже вы создадите эту таблицу снова, будут существовать старые привилегии доступа к ней. Точно так же пользовательские привилегии остаются в базе данных даже после удаления пользователя.

REVOKE {[объектная_привилегия] [, …]|

[системная_привилегия] |

[роль]} [ON {[имя_схемы, [объект]

[DIRECTORY ‘имя_объекта-директории’} |

[JAVA [{SOURCE | RESOURCE}] [имя_схемы.] [объект]}] FROM {имя_получателя [, …] I

имя_роли [, …] | PUBLIC} [CASCADE [CONSTRAINTS]] [FORCE];

Где:

объектная привилегия

Для данного пользователя (имя_получателя) или роли отменяются указанные привилегии доступа к указанному объекту схемы, например таблице или представлению.

ALL [PRIVILEGES]

Удаляются все назначенные привилегии доступа к указанному объекту схемы. Поскольку в это число входят также привилегии REFERENCES, вы должны также включить сюда предложение CASCADE.

ALTER

Удаляется право изменять существующую таблицу при помощи инструкции ALTER TABLE.

EXECUTE

Отменяется право запускать хранимую процедуру, пользовательскую функцию или пакет.

INDEX

Отменяется право создавать индексы по таблице.

REFERENCES

Отменяется право определять ограничения, обеспечивающие ссылочную целостность. Требуется использование предложения CASCADE CONSTRAINTS.

(SELECT] INSERT | UPDATE DELETE}

Отменяется право выполнять соответствующие команды SQL применительно к указанному объекту схемы. Обратите внимание, что привилегии DELETE зависят от привилегий SELECT.

системная_привилегия

Указанный пользователь (имя_получателя) или роль лишается указанной системной привилегии Oracle, например, такой, как CREATE TRIGGER или ALTER USER. Не используйте предложение ON в варианте инструкции REVOKE системная привилегия. Поскольку существует очень много разнообразных системных привилегий, обращайтесь за их полным списком в раздел, посвященный реализации инструкции GRANTS Oracle.

роль

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

ON

Пользователь или роль лишаются привилегии доступа к указанному объекту. К объектам относятся: таблицы, представления, последовательности, хранимые процедуры, пользовательские функции, пакеты, материализованные представления, пользовательские типы, библиотеки, индексные типы, пользовательские операторы или синонимы всех этих объектов. Если имя схемы не будет указано, будет подразумеваться схема текущего пользователя. Например, вы можете отозвать для данного пользователя привилегии SELECT в таблице scott.authors. Платформа Oracle также поддерживает два ключевых слова для особых случаев.

DIRECTORY

Указывается объект-директория, доступ к которому прекращается.

JAVA

Указывается Java-объект схемы SOURCE или RESOURCE, доступ к которому прекращается.

FROM [имя_получателя | имя_роли | PUBLIC}

Указывается пользователь или роль, лишающиеся данной привилегии. Для отмены привилегий, назначенных роли PUBLIC, можно использовать ключевое слово PUBLIC. Можно перечислить через запятую несколько получателей.

CASCADE [CONSTRAINS}

Удаляются все ограничения, обеспечивающие ссылочную целостность, которые в первую очередь зависят от удаляемой привилегии. Это предложение нужно использовать только в том случае, если используются предложения REFERENCES или ALL [PRIVILEGES}.

[FORCE}

Это предложение необходимо для отмены объектных привилегий EXECUTE, относящихся к пользовательским объектным типам, зависящим от типов и таблиц.

Платформа Oracle автоматически распространяет удаление привилегий у пользователя на всех пользователей, которые получили свои привилегии от этого пользователя. Кроме того, все объекты, созданные этим пользователем, которые зависят от этой привилегии (например, хранимые процедуры, триггеры, представления и пакеты, зависящие от привилегии SELECT в определенной таблице), становятся неработоспособными.

Пользователи, которым присвоена системная привилегия GRANT ANY ROLE, могут отменять назначение любой роли. Командой REVOKE можно отменить только те привилегии, которые специфически присваивались командой GRANT, но не привилегии, которые присваивались при помощи ролей или операционной системы. В подобных случаях команду REVOKE нужно использовать для удаления привилегии у роли. Все пользователи, которым назначена данная роль, потеряют эту привилегию.

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

REVOKE read-only FROM sarah; REVOKE CREATE ANY SEQUENCE;

CREATE ANY DIRECTORY FROM readonly;

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

REVOKE REFERENCES ON pubs_new_york.emp FROM dylan CASCADE CONSTRAINTS;

В следующем примере предоставляются все права доступа к указанной таблице, после чего удаляется одна привилегия.

GRANT ALL PRIVILEGES ON emp TO dylan; REVOKE DELETE, UPDATE ON emp FROM dylan;

Источник