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

В языке SQL для отмены предоставленных пользователям посредством оператора GRANT привилегий используется оператор REVOKE. С помощью этого оператора могут быть отменены все или некоторые из привилегий, предоставленных указанному пользователю раньше. Оператор REVOKE имеет следующий формат:

REVOKE {GRANT OPTION FOR] {PrivilegeList | ALL PRIVILEGES} ON ObjectName FROM {AuthorizationIdList | PUBLIC} [RESTRICT | CASCADE]

Ключевое слово ALL PRIVILEGES означает, что для указанного пользователя отменяются все привилегии, предоставленные ему ранее тем пользователем, который ввел данный оператор. Необязательная конструкция GRANT OPTION FOR позволяет для всех привилегий, переданных в исходном операторе GRANT конструкции WITH GRANT OPTION, отменять возможность их передачи независимо от самих этих привилегий.

Назначение ключевых слов RESTRICT и CASCADE аналогично тому, которое они имеют в операторе DROP TABLE. Поскольку для создания некоторых объектов необходимо наличие привилегий, в результате удаления привилегии пользователь может лишиться права, на основании которого им был создан тот или иной объект (подобные объекты, лишенные владельца, принято называть заброшенными). Выполнение оператора REVOKE будет отменено, если в результате могут появиться заброшенные объекты (например, представления), если только в нем не указано ключевое слово CASCADE. Если в операторе присутствует ключевое слово CASCADE, то для любых заброшенных объектов (представлений, доменов, ограничений или проверок), возникающих при выполнении исходного оператора REVOKE, будут автоматически выданы операторы DROP.

Привилегии, которые были предоставлены указанному пользователю другими пользователями, не могут быть затронуты данным оператором REVOKE. Следовательно, если другой пользователь также предоставил данному пользователю отзываемую привилегию, то право доступа к соответствующей таблице у указанного пользователя сохранится. Например, на рисунке показано, что пользователь А предоставил пользователю В привилегию INSERT для таблицы Staff, причем с указанием конструкции WITH GRANT OPTION (шаг 1). Пользователь В передал эту привилегию пользователю С (шаг 2). Затем пользователь С получил эту же привилегию от пользователя Е (шаг 3). Далее пользователь С предоставил упомянутую привилегию пользователю D (шаг 4). Когда пользователь А отменяет привилегию INSERT для пользователя В (шаг 5), эта привилегия не может быть отменена и для пользователя С, поскольку он уже получил ее ранее от пользователя Е. Если бы пользователь Е не предоставил данной привилегии пользователю С, то отзыв привилегии пользователя В имел бы следствием каскадное удаление привилегий для пользователей С и D.

Пример результатов выполнения оператора REVOKE


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: