Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnik.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Отмена предоставленных пользователям привилегий (оператор 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.

Напоминаем.

  • RESTRICT. Операция DROP отвергается, если на данный столбец имеется ссылка в другом объекте базы данных (например, в определении представления). Это значение опции предусмотрено по умолчанию.

  • CASCADE. Выполнение операции DROP продолжается в любом случае и ссылки на столбец автоматически удаляются из любых объектов базы данных, где они имеются. Эта операция выполняется каскадно, поэтому если столбец удаляется из объекта, содержащего ссылку, то в базе данных выполняется проверка того, имеются ли ссылки на этот столбец в каком-либо ином объекте, такие ссылки уничтожаются и в этом объекте, и т.д.

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

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

Пользователь

А

5 .REVOKE INSERT 1.GRANT INSERT

on Студент on Студент

Пользователь

В

CASCADE WITH GRANT OPTION

2.GRANT INSERT

on Студент

Пользователь

E

WITH GRANT OPTION

Пользователь

С

WITH GRANT

4.GRANT INSERT 3.GRANT INSERT

on Студент on Студент

Пользователь

D

WITH GRANT OPTION

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

Пример 7.2.11. Отмена определенных привилегий, предоставленных всем пользователям.

Отмените привилегию SELECT, которая была предоставлена всем пользователям для таблицы Студент.

REVOKE SELECT

ON Студент

FROM PUBLIC;

Пример 7.2.12. Отмена определенных привилегий, предоставленных указанному пользователю

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

REVOKE ALL PRIVILEGES

ON Студент

FROM Доцент;

Этот оператор по результатам выполнения эквивалентен оператору REVOKE SELECT, поскольку пользователю Доцент ранее была предоставлена только эта привилегия.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]