Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
Если у пользователя была возможность получать права от различных пользователей, существует два возможных решения, оба не очень приятных.
* Найдите каждое право, предоставленное этому пользователю, вместе с тем, кто предоставлял это право, и заставьте всех отменить каждое предоставленное право. Это станет весьма запутанным, если использовались варианты ALL и PUBLIC, потому что отмена более целенаправленного права не отменяет прав, предоставленных через ALL, PUBLIC, роли или группы.
* Владелец каждой таблицы
Сервер не выдает никаких сообщений для команд REVOKE, независимо от того, была ли она успешна или ошибочна. Это будет тот самый момент вашей первой, неприятности, связанной с полномочиями SQL, когда вы возденете глаза к небесам и начнете размышлять о реальном назначении комитетов по стандартам на этой Земле. Хорошо спроектированная графическая утилита управления правами может сохранить вам рассудок. К счастью, многие программы администрирования осуществляют такую поддержку. Доступно множество инструментов управления полномочиями. (См. приложение 12.)
Более подробную информацию об отмене полномочий см. в следующем разделе.
! ! !
СОВЕТ. Хотя определение пользователей, ролей и назначение привилегий часто откладывается до момента, когда система готова к поставке пользователям, тем не менее создание схемы привилегий и соотнесение ее со списком пользователей нужно запланировать при проектировании системы. Поддержка диаграммы такой схемы является весьма полезным делом как при проектировании и тестировании системы, так и при ее документировании.
. ! .
Отмена полномочий
Оператор REVOKE требуется для удаления полномочий, назначенных операторами GRANT. Согласно стандарту, REVOKE должен каскадом отменить все привилегии, полученные всеми пользователями как результат WITH GRANT OPTION от данного пользователя. Однако вам не следует на это полагаться в Firebird, потому что конфликт правил стандарта при некоторых условиях может привести к логике реализации, отличной от предложенной в стандарте.
Операторы REVOKE могут отменить любую привилегию, которую может назначить оператор GRANT. Только пользователь SYSDBA или пользователь, предоставивший привилегию, могут отменить ее- те же самые или другие привилегии, предоставленные другими пользователями, не отменяются.
Полномочия, предоставленные "в куче", не могут отменяться индивидуально. Это означает:
* привилегия, которую пользователь получил в результате назначения ALL или в качестве роли, может быть отменена только предоставившим эту привилегию, путем отмены ALL или роли соответственно;
*
* привилегии, предоставленные для PUBLIC, могут быть отменены только FROM PUBLIC.
Использование 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 есть ограничения на то, что он способен отменить.