Читать интересную книгу Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 157 158 159 160 161 162 163 164 165 ... 238

* привилегии, предоставленные для 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 есть ограничения на то, что он способен отменить.

Чего не отменяет 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;

Отмена привилегий у нескольких пользователей

Теперь мы рассмотрим как получатели привилегий, указанные в предложении FROM оператора REVOKE, могут быть объединены для отмены привилегий.

Список пользователей

Используйте разделенный запятыми список пользователей для отмены привилегий у множества пользователей в одном операторе. Следующий оператор удаляет привилегии INSERT и UPDATE к таблице DEPARTMENTS у троих пользователей за один раз:

REVOKE INSERT, UPDATE

ON DEPARTMENTS

FROM MAGPIE, BRUNHILDE, KILROY;

Роль

Отмена привилегий, предоставленных роли, отменяет эти привилегии у всех пользователей, имеющих эту роль в качестве привилегий:

REVOKE UPDATE

ON DEPARTMENT

FROM CARTEBLANCHE;

Теперь пользователи, которым была назначена роль CARTEBLANCHE, больше не имеют привилегии UPDATE к таблице DEPARTMENT, но у них остаются другие привилегии (SELECT, INSERT, DELETE, REFERENCES, EXECUTE), которые они могли наследовать от

CARTEBLANCHE.

Вы можете использовать один оператор для отмены одних и тех же привилегий у одной или более ролей:

REVOKE DELETE, INSERT

ON DEPARTMENT

FROM CARTEBLANCHE, MAITRE_D;

Роль пользователя

Отмена назначенных роли пользователей отменяет у этих пользователей все полномочия, которые они получили с этой ролью. Используйте REVOKE для удаления роли, которую вы назначали пользователям. Следующий оператор отменяет роль

CARTEBLANCHE у пользователя KILROY:

REVOKE CARTEBLANCHE FROM KILROY;

KILROY больше не имеет привилегий доступа, полученных как результат его членства в этой роли. Однако это не оказывает влияния на других пользователей, которые получили эти привилегии через членство в данной роли.

Объекты

Для отмены привилегий у одной или более процедур, триггеров или просмотров включите соответствующее ключевое слово (PROCEDURE, TRIGGER, VIEW) перед именем объекта.

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

Следующий оператор удаляет привилегии INSERT и UPDATE К таблице CUSTOMER для двух процедур и триггера:

REVOKE INSERT, UPDATE

ON CUSTOMER

FROM PROCEDURE COUNT_CHICKENS, ABANDON_OLD

TRIGGER AI_SALES ;

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

Для отмены привилегий, которые все пользователи получили как пользователь PUBLIC, просто трактуйте PUBLIC, как и любого другого пользователя. Например, следующий оператор отменяет полномочия INSERT и DELETE К таблице DEPARTMENT у всех пользователей:

REVOKE SELECT, INSERT, UPDATE

ON DEPARTMENT

FROM PUBLIC;

После выполнения этого оператора привилегии INSERT и DELETE К таблице DEPARTMENT сохраняются у владельца этой таблицы и у пользователя SYSDBA, равно как и у имевших эти привилегии хранимых процедур, просмотров и триггеров. Отмена привилегий у PUBLIC также не убирает привилегии у пользователей, которые имеют их как собственные права.

Отмена права предоставлять привилегии

Для отмены права у пользователя предоставлять конкретную привилегию, но сохранить у него эту привилегию, используйте REVOKE GRANT OPTION:

REVOKE GRANT OPTION

FOR <привилегия> [, <привилегия> [,...]]

ON <таблица> | <объект>

FROM <пользователь> ;

Например, следующий оператор отменяет право предоставлять привилегию SELECT к таблице DEPARTMENT у пользователя HPOTTER и сохраняет у него привилегию SELECT:

REVOKE GRANT OPTION

FOR SELECT

ON DEPARTMENT

FROM HPOTTER;

Выполнение этого оператора приведет к каскадным отменам у всех других пользователей, которые получили право предоставлять эту привилегию от HPOTTER.

Скрипты безопасности

Если вы до сих пор задержались на этой главе, нет сомнений, что вы пришли к заключению, что реализация привилегий SQL требует набора большого объема текста. Что ж, вы правы. В действительности мы не используем интерактивные методы для выполнения этой работы. Мы пишем скрипты - или, иначе, мы пишем хранимые процедуры, которые пишут для нас скрипты.

Как правило, если мы имеем хорошо работающую схему привилегий, мы можем генерировать множество скриптов, которые формируют роли и общие полномочия. Обычно вручную написанный скрипт предназначен для полномочий EXECUTE, поскольку для этого довольно сложно создать нужную формулу.

С появлением в Firebird 1.5 оператора EXECUTE PROCEDURE, который позволяет нам обойти невозможность в Firebird выполнения операторов DDL в PSQL, мы можем выполнить групповую загрузку полномочий прямо в базу данных из хранимой процедуры. Пример подобной процедуры представлен в листинге 35.2 далее в этой главе.

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

Создание скрипта

Автор предпочитает генерировать скрипт безопасности. Он может быть протестирован и аннотирован, он является документом, нужным для контроля качества, и дающим основу для распространения у пользователей. Пример подобного скрипта представлен в листинге 35.1.

Для скрипта мы можем использовать внешний файл, в который помещен скрипт - инструкции и примеры см. в главе 16, примеры также содержатся в главе 30. Однако процедура PERMSCRIPT, описанная здесь, разработана для выполнения в isql и для передачи ее выхода в текстовый файл.

Листинг 35.1. Процедура для генерации скрипта полномочий

/* (с) Helen Borrie 2004, free for use and inodxfication

under the Initial Developer's Public License */

SET TERM ^

CREATE PROCEDURE PERMSCRIPT(

CMD VARCHAR (6) ,/* введите 'G' or 'R' */

PRIV CHAR (10) , /* привилегия или 'ALL' или 'ANY' */

USR VARCHAR(31), /* имя пользователя */

ROLENAME VARCHAR(31), /* роль, существующая или нет */

GRANTOPT SMALLINT,

/* 1 для 'WITH GRANT[ADMIN] OPTION' */

CREATE ROLE SMALLINT) /* 1 для создания новой роли ROLENAME */

RETURNS (PERM VARCHAR(80)) /* теоретический оператор полномочия */

AS

DECLARE VARIABLE RELNAME VARCHAR (31); /* для имени таблицы или просмотра */

DECLARE VARIABLE STRING VARCHAR(80) = ''; /* используется в процедуре */

DECLARE VARIABLE STUB VARCHAR(60) = ''; /* используется в процедуре */

DECLARE VARIABLE VUSR VARCHAR(31) ; /* имя пользователя для 'TO' или 'FROM' */

DECLARE VARIABLE COMMENTS CHAR(20) = '/* */';

BEGIN

/* Необходимо для некоторых редакторов пользовательского интерфейса */

1 ... 157 158 159 160 161 162 163 164 165 ... 238
На этом сайте Вы можете читать книги онлайн бесплатно русская версия Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри.
Книги, аналогичгные Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри

Оставить комментарий