Использование REVOKE
Использование REVOKE
Упрощенный синтаксис для REVOKE внешне отличается от синтаксиса GRANT. Предложение ТО <получатель> заменяется на FROM <получатель?.
REVOKE <привилегии>
ON <объект>
FROM <получатель> ;
Следующий оператор отменяет привилегию SELECT К таблице DEPARTMENT у пользователя KILROY, если он получил ее при выполнении GRANT SELECT:
REVOKE SELECT ON DEPARTMENT FROM KILROY;
Следующий оператор отменяет привилегию UPDATE К таблице CUSTOMER для процедуры
COUNT_BEANS:
REVOKE UPDATE ON CUSTOMER FROM PROCEDURE COUNT_BEANS;
Следующий оператор удаляет привилегию EXECUTE, которая была предоставлена процедуре COUNT_BEANS К процедуре ABANDON_OLD:
REVOKE EXECUTE ON PROCEDURE ABANDON_OLD FROM PROCEDURE COUNT_BEANS;
Удаление множества привилегий
Для удаления нескольких, но не всех привилегий, предоставленных пользователю или процедуре, перечислите удаляемые привилегии, отделив их друг от друга запятыми. К примеру, следующий оператор удаляет привилегии INSERT и UPDATE к таблице DEPARTMENT у пользователя SERENA:
REVOKE INSERT, UPDATE ON DEPARTMENT FROM SERENA;
Следующий оператор удаляет две привилегии к таблице CUSTOMER у хранимой процедуры COUNT_BEANS:
REVOKE INSERT, DELETE
ON CUSTOMER
FROM PROCEDURE COUNT_BEANS;
Любая комбинация ранее назначенных привилегий SELECT, INSERT, UPDATE, DELETE или REFERENCES может быть отменена назначившим эти привилегии, неважно, были ли они назначены индивидуально, в списке или с использованием ALL.
Как и в случае GRANT, отмена привилегий REVOKE ALL объединяет привилегии SELECT, INSERT, UPDATE, DELETE и REFERENCES в одном выражении. Данный оператор отменит любое из этих назначенных полномочий.
Например, следующий оператор отменит все привилегии доступа к таблице
DEPARTMENTS у пользователя MAGPIE:
REVOKE ALL ON DEPARTMENTS FROM MAGPIE;
Если пользователь не имеет всех привилегий, включенных в ALL, оператор не вызовет исключения. Оператор REVOKE ALL может быть особенно полезным, если вы не знаете, какие привилегии имеет пользователь. Нет необходимости решать проблему устранения всех полномочий, доступных пользователю, потому что у REVOKE ALL есть ограничения на то, что он способен отменить.
Чего не отменяет REVOKE ALL
REVOKE ALL не отменяет:
* привилегии, наследуемые вместе с ролью;
* привилегии, полученные как PUBLIC;
* привилегии EXECUTE.
Отмена привилегии EXECUTE
Синтаксис отмены привилегии EXECUTE к хранимой процедуре:
REVOKE EXECUTE
ON PROCEDURE <имя-процедуры>
FROM <получатель> [, <получатель> [, ...]]
| [TRIGGER <имя-триггера> [, <имя-триггера> [,...]]
[PROCEDURE <имя-процедуры> [, <имя-процедуры> [, ...]]
[VIEW <имя-просмотра> [, VIEW <имя-просмотра> [, ...]];
Следующий оператор удаляет привилегию EXECUTE у пользователя HPOTTER к процедуре COUNT_CHICKENS:
REVOKE EXECUTE ON PROCEDURE COUNT_CHICKENS FROM HPOTTER;