Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Как спрятать список пользователей/паролей

Как спрятать список пользователей/паролей

Если вы переименуете таблицу USERS и заново создадите USERS как просмотр переименованной таблицы, вы можете получить лучший из миров. У пользователей будет возможность изменять свои собственные пароли, а полный список пользователей и паролей будет спрятан для PUBLIC. Каждый пользователь, не являющийся SYSDBA, будет видеть только одну запись из security.fdb (или isc4.gdb, если у вас сервер версии 1.0.x). Новые структуры в security.fdb будут похожи на следующую схему:

/* Copyright Ivan Prenosil 2002-2004 */

CONNECT 'C:Program FilesFirebirdFirebird_1_5security.fdb'

USER 'SYSDBA' PASSWORD 'masterkey';

/** Переименование существующей таблицы USERS в USERS2. **/

CREATE TABLE USERS2 (

USER_NAME USER_NAME,

SYS_USER_NAME USER_NAME,

GROUP_NAME USER_NAME,

UID UID,

GID GID,

PASSWD PASSWD,

PRIVILEGE PRIVILEGE,

COMMENT COMMENT,

FIRST_NAME NAME_PART,

MIDDLE_NAME NAME_PART,

LAST_NAME NAME_PART,

FULL_NAME COMPUTED BY (first_name || _UNICODE_FSS ''II middle_name || _UNICODE_FSS ' ' || last_name ) ) ;

COMMIT;

INSERT INTO USERS2

(USER_NAME, SYS_USER_NAME, GROUP_NAME,

UID, GID, PASSWD, PRIVILEGE, COMMENT,

EIRST_NAME, MIDDLE_NAME, LAST_NAME)

SELECT

USER_NAME, SYS_USER_NAME, GROUP_NAME,

UID, GID, PASSWD, PRIVILEGE, COMMENT,

EIRST_NAME, MI DDLE_NAME, LAST_NAME FROM USERS;

COMMIT;

/* */

DROP TABLE USERS;

/* */

CREATE UNIQUE INDEX USER_NAME_INDEX2 ON USERS2(USER_NAME);

/** Создание просмотра, который будет использован вместо первоначальной таблицы USERS. **/

CREATE VIEW USERS AS

SELECT *

FROM USERS2

WHERE USER = ''

OR USER = 'SYSDBA'

OR USER = USER_NAME;

/** Полномочия **/

GRANT SELECT ON USERS TO PUBLIC;

GRANT UPDATE (PASSWD, GROUP_NAME, UID, GID, FIRST_NAME, MIDDLE_NAME, LAST_NAME)

ON USERS

TO PUBLIC;

Реальная таблица USERS2 видима только для SYSDBA. Следующее условие

USER = USER_NAME

гарантирует, что каждый пользователь видит только свою собственную запись. Условие

USER = 'SYSDBA'

гарантирует, что SYSDBA может видеть все записи. Условие

USER = ' '

является важным, потому что переменные USER и CURRENT_USER содержат пустые строки в процессе проверки пароля.

! ! !

ПРИМЕЧАНИЕ. К сожалению, две следующие техники не могут быть реализованы в сервере Firebird 1.5. Они используют запись в файлы протоколов. Улучшения безопасности, выполненные в версии 1.5, означают, что подпрограмма идентификации пользователя теперь выполняется в транзакции только для чтения, следовательно, невозможно выполнять запись в протокол! Похожая схема может быть реализована путем делегирования функции протоколирования внешним функциям.

. ! .

Оглавление книги


Генерация: 1.581. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз