Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

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);

SQL> COMMIT;

SQL> SELECT * FROM PERMSCRIPT ('G', 'ALL', 'USER2', 'PURPLE', 1, 0);

SQL> COMMIT; SQL> OUTPUT;

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

SQL> COMMIT; SQL> SHOW GRANT;

Вот и все. Вы получите сообщение об ошибке, когда утилита INPUT встретит текст не SQL, напечатанный в OUTPUT, однако это не повлияет на вывод полномочий.

<p>Инсталляция полномочий непосредственно из процедуры</p>

Процедура GRANT_PERMS, показанная в листинге 35.2, в основном похожа на процедуру PERMSCRIPT из листинга 35.1. Вместо того чтобы создавать набор выходных строк для выполнения под isql в качестве скрипта, она непосредственно устанавливает полномочия через EXECUTE STATEMENT. Такая техника недоступна в Firebird 1,0.x.

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

/* (с) Helen Borrie 2004, free for use and modification under the Initial Developer's Public License */

SET TERM ^;

CREATE PROCEDURE GRANT_PERMS

(CMD VARCHAR(6) ,

PRIV CHAR(10),

USR VARCHAR (31) ,

ROLENAME VARCHAR(31),

GRANTOPT SMALLINT)

AS

DECLARE VARIABLE RELNAME VARCHAR (31);

DECLARE VARIABLE EXESTRING VARCHAR(1024) = '';

DECLARE VARIABLE EXESTUB VARCHAR (1024 ) = '';

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 (CMD STARTING WITH 'G') THEN

EXESTUB = 'GRANT ';

ELSE

EXESTUB = 'REVOKE ';

IF (ROLENAME IS NOT NULL) THEN

BEGIN

IF (EXESTUB = 'GRANT') THEN

BEGIN

EXESTUB = EXESTUB || ROLENAME || ' TO ' || USR;

IF (GRANTOPT = 1) THEN

EXESTUB = EXESTUB || ' WITH ADMIN OPTION';

ELSE

EXESTUB = EXESTUB || ROLENAME || ' FROM ' || USR;

EXECUTE STATEMENT EXESTUB;

END

ELSE

BEGIN

IF (PRIV = 'ANY') THEN

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

ELSE

EXESTUB = EXESTUB || PRIV || ' ON ' ;

FOR SELECT RDB$RELATION_NAME FROM RDB$RELATIONS

WHERE RDB$RELATION_NAME NOT STARTING WITH 'RDB$'

INTO : RELNAME DO

BEGIN

EXESTRING = EXESTUB || :RELNAME || ' ';

IF (CMD STARTING WITH 'G') THEN

EXESTRING = EXESTRING || 'TO ';

ELSE

EXESTRING = EXESTRING || 'FROM ';

EXESTRING = EXESTRING || USR;

IF (GRANTOPT = 1) THEN

EXESTRING = EXESTRING || ' WITH GRANT OPTION';

EXECUTE STATEMENT EXESTRING;

END

END

END ^

SET TERM ;^

Если вы сами хотите поэкспериментировать с этими скриптами и изменить их для ваших потребностей, вы можете найти исходные тексты в разделе Download на http://www.apress.com, в файле permscripts.sql.

Пора дальше

Следующая (и последняя) глава этой части содержит множество тем, связанных с архитектурными вариантами сервера, включая раздел по инсталляции и использованию встроенного Суперсервера под Windows. Установки файла конфигурации в firebird.conf или isc config/ibconfig могут быть найдены в этой главе вместе с темой безопасности параметров конфигурации, связанных с использованием в Firebird внешних выполняемых и других файлов.

<p>ГЛАВА 36. Конфигурация и специальные возможности.</p>

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

Сначала описываются архитектурные отличия между моделями Firebird Классический сервер и Суперсервер. Затем обсуждаются различные параметры конфигурации сервера и некоторые руководящие принципы разработки для встроенного сервера под Windows.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных