Шрифт:
Интервал:
Закладка:
. ! .
Шифрование пароля
Интерфейс gsec шифрует пароли, используя скромный метод, основанный на алгоритме хэширования DES (Data Encryption Standard, стандарт шифрования данных). По причине восьмисимвольного ограничения идентификация пользователя в Firebird на сегодняшний день не может рассматриваться как "центурион у ворот в современную эпоху"[135].
Все-таки исключите такие очевидные пароли, как password и sesame. Смешивайте регистр, включите цифры и обеспечьте регулярное изменение паролей.
! ! !
СОВЕТ. Поскольку невозможно отыскать потерянные пароли с помощью запросов к системе, вам нужна непробиваемая система фиксации паролей пользователей при их изменении. Глупая болтовня про отслеживание пользователей не может быть той системой, которую осознанно выбирает организация для средств безопасности! Потеря паролей может быть восстановлена пользователем SYSDBA. Если же будет потерян пароль у SYSDBA, то вся база данных безопасности должна быть заменена путем восстановления файла security.fdb, который вы найдете в корневом каталоге Firebird (для Firebird 1.0.x это файл isc4.gdb). Начните работу с паролем masterkey.
. ! .
Учет пользователей в SQL
Поскольку пользователи Firebird поддерживаются на уровне сервера, не существует никакого специального SQL-оператора для этого. Причем имена пользователей используются в SQL в качестве аргументов операторов GRANT ... ТО и REVOKE ... FROM. Подробности см. в главе 35.
Имя пользователя также доступно во множестве выражений SQL через контекстную переменную CURRENT_USER и серверный литерал USER.
Пользователь SYSDBA
Новые инсталляции Firebird для Windows устанавливают в базу данных безопасности пользователя SYSDBA с паролем masterkey. Очевидно, что это известно всем, и не может использоваться для безопасности. Пароль должен быть изменен в первую очередь.
Под Linux некоторые инсталляторы способны генерировать произвольный пароль для SYSDBA. Вы можете увидеть его в текстовом файле SYSDBA.password, размещенном в каталоге Firebird /bin.
Пользователь SYSDBA является владельцем базы данных безопасности. Помните, что базы данных Firebird имеют "одного пользователя SYSDBA для управления всеми". Пользователь SYSDBA имеет все деструктивные права ко всем базам данных на сервере. Пароль у SYSDBA не должен распространяться на обычных пользователей.
Слабое место POSIX
Firebird может допустить соединения клиентов с серверами на платформах POSIX, при которых обходится идентификация пользователя Firebird, а вместо этого используется схема разрешений для пользователя операционной системы. Это давно существующая возможность, наследованная от InterBase. Незнание данного факта оставляет большую дыру в безопасности на платформах POSIX, если путь доступа пользователя POSIX будет широко открыт, а системный администратор будет ошибочно предполагать, что база данных безопасности является максимально защищенной.
Это не так. Когда пользователи POSIX соединяются с базой данных без передачи серверу Firebird имени пользователя и пароля, подпрограмма идентификации подставляет текущие характеристики операционной системы вместо характеристик пользователя Firebird. Если пользователь операционной системы имеет привилегии root, опасайтесь, очень опасайтесь.
Поскольку пользователи POSIX могут получить доступ к базам данных Firebird через их учетные данные операционной системы, важно определить надежные взаимосвязи между сервером и каждой клиентской рабочей станцией. Это переводится в записи в /etc/host.equiv или в другие данные, такие как файл .rhost в домашнем каталоге пользователя на сервере.
! ! !
СОВЕТ. Читатель также может поэкспериментировать с файлом /etc/gds_host.equiv - см. текст "Installing InterBase to start automatically and run as a service under Linux" (Инсталляция InterBase для автоматического запуска и выполнения в качестве сервиса под Linux) у Richard Combs на http://community.borland.eom/article/0,1410,27761,00.html.
. ! .
Переменные окружения ISC_USER и ISC_PASSWORD должны быть исключены из системы.
! ! !
ВНИМАНИЕ! Автору не известны способы определения надежной взаимосвязи между рабочей станцией Windows и сервером UNIX, но это не означает, что такое не может быть сделано.
. ! .
Утилита gsec
В Firebird существует утилита gsec в качестве интерфейса командной строки для работы с базой данных безопасности. Она имеет собственную оболочку для интерактивного использования, либо команда gsec может быть непосредственно введена в командной строке операционной системы или запущена из исполняемого скрипта (скрипта командной строки или пакетного файла).
Любой идентифицированный пользователь может запустить gsec, но только пользователь SYSDBA может изменять сведения о пользователе, хранящиеся в базе данных безопасности. Требуются имя пользователя и пароль, независимо от того, видимы ли из командной строки переменные окружения ISC_USER и ISC_PASSWORD. В POSIX, если вы подключились как root, вы можете вызывать gsec без ввода параметров -user и -password.
Запуск интерактивной сессии gsec
В командной строке в каталоге Firebird /bin введите следующее. Для POSIX:
./gsec -user sysdba -password masterkey
Для Windows:
gsec -user sysdba -password masterkey
Подсказка командной строки изменится на GSEO, указывающую, что вы запустили gsec в интерактивном режиме.
Для завершения интерактивной сессии введите QUIT.
Запуск gsec как удаленного клиентаSYSDBA может использовать gsec на клиентской машине для управления идентификацией пользователей на удаленном сервере. Синтаксис вызова в этом случае несколько отличается: он требует переключателя -database, за которым следует полный сетевой путь к базе данных безопасности. Например (это одна команда), здесь показывается, как клиент POSIX обращается к серверу Windows в версии 1.5:
./gsec -database hotchicken:с:Program FilesFirebirdFirebird_1_5security. fdb
-user sysdba -password masterkey
Следующий пример показывает обращение клиента Windows к серверу POSIX в версии 1.0.x:
gsec -database coolduck:/opt/firebird/isc4.gdb
-user sysdba -password masterkey
Интерактивные командыКомандами интерактивной утилиты gsec являются отображение, добавление, модификация, удаление, помощь и выход. Они не чувствительны к регистру.
* add, modify и delete используются для добавления и удаления пользователей и для изменения паролей. Они требуют в качестве параметра имя пользователя (username) вместе с соответствующими переключателями и аргументами.
* display без имени пользователя отображает список всех пользователей. Пароли не показываются. Эта команда также может получать имя пользователя. В этом случае отображаются подробности этого пользователя.
* help или его алиас ? отображает текст помощи для утилиты.
* quit завершает gsec и закрывает командную строку.
Таблица USERS и режимы gsecВ табл. 34.1 показаны столбцы таблицы USERS вместе с соответствующими переключателями gsec. Требуемыми полями при использовании gsec являются только
USER NAME и PASSWD.
Таблица 34.1. Столбцы таблицы USERS и режимы gsec
Столбец
Описание
Режим gsec
Аргумент
USER_NAME
Имя пользователя, распознаваемое идентификацией пользователя на сервере, gsec требует его в качестве параметра для интерактивных команд добавления, изменения и удаления и для соответствующих переключателей командной строки -a[dd], mo[dify] и-d[elete]
username параметр
SYS_USER_NAME
Не используется
GROUP_NAME
Не используется
UID
Для некоторых платформ POSIX идентификатор пользователя UNIX. Не требуется
-uid
integer
GID
Для некоторых платформ POSIX идентификатор группы UNIX. Не требуется
-gid
integer
PASSWD
Текущий пароль для этого пользователя. Требуется
-pw
string(10)
PRIVILEGE
Не используется
COMMENT
Не используется
FIRST_NAME
Имя пользователя. Не требуется
-fname
string(31)
MIDDLE_NAME
Второе имя пользователя. Не требуется
-mname
string(31)
LAST_NAME
Фамилия пользователя. Не требуется
-Iname
string(31)
FULL_NAME
Нет
Также при запуске gsec с удаленной рабочей станции:
Сервер и путь к файлу базы данных безопасности
-database
Путь и имя файла
Примеры gsecdisplayОтображает основные столбцы таблицы USERS базы данных безопасности. Пароли никогда не показываются.
user_name uid gid full name SYSDBA
MICKEY 123 345 Mickey Mouse
D_DUCK 124 345 Donald Duck
JULIUS 125 345 J. Caesar
Для отображения той же информации из одной строки таблицы USERS введите:
GSEC> display username
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование