Чтение онлайн

на главную - закладки

Жанры

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

С появлением в 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

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

IF (ROLENAME = '') THEN ROLENAME = NULL;

IF (USR = '') THEN USR = NULL;

IF (PRIV = '') THEN PRIV = NULL;

/* Недостаточно данных для выполнения работы */

IF ( (PRIV IS NULL AND ROLENAME IS NULL) OR USR IS NULL) THEN EXIT;

/* Если это имя роли, мы будем с ней работать */

IF (ROLENAME IS NOT NULL) THEN

BEGIN

/* Если задано имя роли, то создается роль, если она требуется */

IF (CREATE_ROLE = 1) THEN BEGIN

PERM = 'CREATE ROLE ' || ROLENAME || ' ; ' ;

SUSPEND;

PERM = 'COMMIT; ' ;

SUSPEND;

PERM = COMMENTS;

SUSPEND;

END

VUSR = ROLENAME;

END

/*

Если существует имя роли, мы применим полномочия к этой роли и предоставим эту роль указанному пользователю */

ELSE

/* Нас не интересует роль: полномочия только для пользователя */

VUSR = USR;

/* Выяснение - этот скрипт GRANT или REVOKE */

IF (CMD STARTING WITH 'G') THEN

STUB = 'GRANT';

ELSE

STUB = 'REVOKE ';

IF (ROLENAME IS NOT NULL) THEN

BEGIN

IF (STUB = 'GRANT') THEN

BEGIN

/* Предоставление роли пользователю */

STRING = STUB || ROLENAME || ' TO ' || USR;

IF (GRANTOPT = 1) THEN

STRING = STRING || ' WITH ADMIN OPTION ;';

ELSE

STRING = STUB || ROLENAME || ' FROM ' || DSR || PERM = STRING;

SUSPEND;

PERM = COMMENTS;

SUSPEND;

END

/* Если передано ANY в качестве привилегии, создаем отдельно каждую привилегию */

IF (PRIV = 'ANY') THEN

STUB = STUB || 'SELECT, DELETE, INSERT, UPDATE, REFERENCES ON ';

ELSE

STUB = STUB || PRIV || ' ON ' ;

/* Просмотр всех имен таблиц и просмотров и создание для каждого оператора */

FOR SELECT RDB$RELATION_NAME FROM RDB$RELATIONS

WHERE RDB$RELATION_NAME NOT STARTING WITH 'RDB$'

INTO : RELNAME DO

BEGIN

STRING = STUB || :RELNAME || ' '

IF (CMD STARTING WITH 'G') THEN

STRING = STRING || 'TO ';

ELSE

STRING = STRING || 'FROM ';

STRING = STRING || VUSR;

IF (CMD STARTING WITH 'G'

AND GRANTOPT = 1 AND ROLENAME IS NULL) THEN

STRING = STRING || ' WITH GRANT OPTION ;';

ELSE

STRING = STRING || ' ;';

PERM = STRING;

SUSPEND;

END

PERM = COMMENTS;

SUSPEND;

END ^

SET TERM ;^

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

Перейдите в каталог Firebird /bin и запустите isql, соединитесь с базой данных как пользователь SYSDBA. Вы используете процедуру для создания скрипта, который добавит роль 'MANDRAKE', предоставит эту роль пользователю USER1, а потом установит полномочия для этой роли. Затем снова сделает то же самое с существующей ролью 'PURPLE' для пользователя USER2:

SQL> OUTPUT L:\DATA\EXAMPLES\PERMSCRIPT.SQL;

SQL> SELECT * FROM PERMSCRIPT ('G', 'ALL', 'USER1', 'MANDRAKE', 1, 1);

Поделиться:
Популярные книги

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Шаман. Похищенные

Калбазов Константин Георгиевич
1. Шаман
Фантастика:
боевая фантастика
попаданцы
6.44
рейтинг книги
Шаман. Похищенные

Совок

Агарев Вадим
1. Совок
Фантастика:
фэнтези
детективная фантастика
попаданцы
8.13
рейтинг книги
Совок

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Разбуди меня

Рам Янка
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Разбуди меня

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

Ведьма Вильхельма

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
8.67
рейтинг книги
Ведьма Вильхельма

Герцог и я

Куин Джулия
1. Бриджертоны
Любовные романы:
исторические любовные романы
8.92
рейтинг книги
Герцог и я

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Плохая невеста

Шторм Елена
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Плохая невеста