Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


firebird:initializing-the-security-database-in-firebird-3-0-sysdba-in-security3-fdb

Инициализация базы данных безопасности в Firebird 3.0 (включение SYSDBA в security3.fdb)

В СУБД Firebird 3.0 в конфигурационном файле firebird.conf есть параметр SecurityDatabase. Он определяет имя и расположение базы данных безопасности, в которой хранятся имена пользователей и пароли, используемые экземпляром Firebird для проверки удаленных подключений. По умолчанию путь определяется, как $(root)/security3.fdb. Этот путь может быть переопределен для любой отдельно взятой базы данных в конфигурационном файле database.conf (то есть при необходимости в Firebird 3.0 для каждой БД можно иметь свою БД безопасности).

В конфигурации по умолчанию в СУБД Firebird 3.0 удалённый доступ к базе данных безопасности security3.fdb отключен, а пользователь SYSDBA в базе отсутствует в том случае, если экземпляр СУБД разворачивался не из инсталлятора, а вручную из zip-архива по аналогии с тем, как описано здесь. В такой конфигурации мы фактически не можем подключиться к экземпляру по сети. Однако мы можем самостоятельно провести инициализацию БД безопасности путём создания в ней соответствующего пользователя SYSDBA. В качестве опорного документа с информацией о том, как это делается, можно использовать описание Firebird 3.0.4 Release Notes - Compatibility Issues - Initializing the Security Database

Инициализацию БД безопасности будем проводить с помощью утилиты isql, так как рассматриваемаяранее утилита gsec в Firebird 3 считается устаревшей. Утилита gsec может работать с базой security3.fdb, но не будет работать с альтернативными БД безопасности, поэтому лучше сразу отказаться от использование данной утилиты.

Обратите внимание на то, что инициализация не требуется и не должна выполняться, если сервер настроен для использования устаревшей (до Firebird 3) аутентификации и управления пользователями (включенный параметр UserManager = Legacy_UserManager и другие сопутствующие настройки в firebird.conf). Устаревшие плагины безопасности полностью сохраняют поведение Firebird 2 и содержат устаревшую запись для SYSDBA с начальным паролем «masterke»

Для начала остановим службу сервера Firebird 3, так как СУБД кэширует подключения к БД безопасности и наличие ранее установленных подключений к серверу может помешать isql установить подключение в так называемом встроенном режиме (embedded mode). В командной строке с правами администратора выполним команду остановки экземпляра службы Firebird:

Net stop "<имя службы>"

Согласно Release Notes команды управления пользователями СУБД могут работать с любой открытой базой данных и там приводится пример с использованием демонстрационной БД employee.fdb, которая присутствует в свеже-развёрнутом экземпляре и имеет алиас в databases.conf. Мы используем другой путь и подключимся напрямую к самой БД security3.fdb, как к локальному файлу с помощью утилиты isql во встроенном режиме с указанием пользователя SYSDBA и без пароля.

cd /d E:\FBInst2\Bin
isql E:\FBInst2\Bin\security3.fdb -user SYSDBA

В случае успешного подключения увидим имя базы и пользователя, от имени которого мы подключились к базе

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

create user SYSDBA password 'SuP#r$ecR6T4';
commit;
quit;

По умолчанию Firebird 3 использует плагин SRP для работы с пользовательскими паролями и для генерации уникальных идентификаторов сеанса для шифрования трафика (параметр UserManager = Srp и сопутствующие ему параметры AuthServer,AuthClient в firebird.conf). Пароль, используемый диспетчером пользователей по умолчанию SRP может иметь длину до 20 символов.

Обратите внимание на то, что мы просто создали пользователя с предопределённым именем, но не выдали ему административную роль. Связано это с тем, что пользователь с предопределённым именем SYSDBA автоматически будет иметь полные права администратора, поэтому не следует ему явно назначать роль ADMIN (RDB$ADMIN).

Для завершения инициализации снова запустим службу сервера Firebird. С этого момента мы сможем выполнять подключение к базам данных, включая базы данных безопасности, используя учётную запись пользователя SYSDBA.

Попытаемся подключиться к БД через TCP порт экземпляра с указанием пользователя SYSDBA и заданного нами пароля:

isql KOM-DEV02/9002:E:\FBInst2\Bin\security3.fdb -user "SYSDBA" -password "SuP#r$ecR6T4"

Как видим по ошибке «no permission for remote access to database», удалённый доступ к БД отключен. Включить удалённый доступ на время проверки можно с помощью конфигурационного файла databases.conf, изменив для базы security значение параметра RemoteAccess с false на true:

Перезапуск службы при этом не требуется и удалённый доступ к базе начинает работать сразу.

Снова попробуем подключиться через TCP порт к экземпляру и его базе.

isql KOM-DEV02/9002:E:\FBInst2\Bin\security3.fdb -user "SYSDBA" -password "SuP#r$ecR6T4"

Подключившись, попробуем получить листинг пользователей, выполнив запрос:

show users;

Как видим, теперь подключение работает.

В целях повышения уровня безопасности удалённый доступ к БД security вернём в исходное, то есть в выключенное, состояние, вернув значение параметра RemoteAccess в false в конфигурационном файле databases.conf для этой базы.

В качестве дополнительной проверки можем попробовать удалённо подключиться к демонстрационной базе данных с использованием учётной записи SYSDBA и заданным нами паролем и выполним в ней действие, требующее административных привилегий, например, создадим, а затем удалим нового пользователя:

isql.exe KOM-DEV02/9002:employee -user "SYSDBA" -password "SuP#r$ecR6T4"

create user USER1 password 'sA!L4t#7Fe$t';
show users;
drop user USER1;
show users;

Как видим, созданная нами административная учётная запись SYSDBA успешно работает в режиме удалённого подключения к базам данных экземпляра Firebird 3.


Проверено на следующих конфигурациях:

Версия ОС Версия Firebird
Windows Server 2012 R2 Standard EN (6.3.9600) 3.0.4.33054 64-bit

Автор первичной редакции:
Алексей Максимов
Время публикации: 21.02.2019 19:49

Обсуждение

ИванИван, 19.12.2021 12:26
"Снова попробуем подключиться через TCP порт к экземпляру и его базе.".
– В данном случае "KOM-DEV02/9002:" - это будет имя локального компьютера? Это что-то вроде доменного имени, которое присвоено компьютеру?
– Мы по TCP обращаемся ведь не к службе Firebird, а просто к файлу пытаемся получить доступ через TCP? То есть у нас для этого должен быть по сети расшарен файл базы данных безопасности?
Алексей МаксимовАлексей Максимов, 19.12.2021 13:53
В нашем примере KOM-DEV02 это имя сервера, а 9002 это номер TCP порта, который прослушивает служба Firebird. К "расшариванию" (если речь идёт про классические "шары" SMB в Windows) это не имеет никакого отношения.
Ваш комментарий:
 
firebird/initializing-the-security-database-in-firebird-3-0-sysdba-in-security3-fdb.txt · Последнее изменение: 21.02.2019 20:13 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki