===== Инициализация базы данных безопасности в Firebird 3.0 (включение SYSDBA в security3.fdb) ===== {{:firebird:pasted:20181106-233707.png }} В СУБД **Firebird 3.0** в конфигурационном файле **firebird.conf** есть параметр **SecurityDatabase**. Он определяет имя и расположение базы данных безопасности, в которой хранятся имена пользователей и пароли, используемые экземпляром Firebird для проверки удаленных подключений. По умолчанию путь определяется, как ''$(root)/security3.fdb''. Этот путь может быть переопределен для любой отдельно взятой базы данных в конфигурационном файле **database.conf** (то есть при необходимости в Firebird 3.0 для каждой БД можно иметь свою БД безопасности). В конфигурации по умолчанию в СУБД **Firebird 3.0** удалённый доступ к базе данных безопасности **security3.fdb** отключен, а пользователь **SYSDBA** в базе отсутствует в том случае, если экземпляр СУБД разворачивался не из инсталлятора, а вручную из zip-архива по аналогии с тем, как описано [[:firebird:manual-installation-of-multiple-instances-of-firebird-2-5-in-service-mode-on-windows-server-2012-r2|здесь]]. В такой конфигурации мы фактически не можем подключиться к экземпляру по сети. Однако мы можем самостоятельно провести инициализацию БД безопасности путём создания в ней соответствующего пользователя **SYSDBA**. В качестве опорного документа с информацией о том, как это делается, можно использовать описание [[https://firebirdsql.org/file/documentation/release_notes/html/en/3_0/rnfb30-compat-initsec.html|Firebird 3.0.4 Release Notes - Compatibility Issues - Initializing the Security Database]] Инициализацию БД безопасности будем проводить с помощью утилиты **isql**, так как рассматриваемая[[:firebird:changing-default-password-for-sysdba-user-in-firebird-2-5|ранее]] утилита **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 "<имя службы>"
{{ :firebird:pasted:20190221-195856.png }} Согласно Release Notes команды управления пользователями СУБД могут работать с любой открытой базой данных и там приводится пример с использованием демонстрационной БД **employee.fdb**, которая присутствует в свеже-развёрнутом экземпляре и имеет алиас в **databases.conf**. Мы используем другой путь и подключимся напрямую к самой БД **security3.fdb**, как к локальному файлу с помощью утилиты **isql** во встроенном режиме с указанием пользователя **SYSDBA** и без пароля.
cd /d E:\FBInst2\Bin
isql E:\FBInst2\Bin\security3.fdb -user SYSDBA
В случае успешного подключения увидим имя базы и пользователя, от имени которого мы подключились к базе {{ :firebird:pasted:20190221-200039.png }} Выполним команду создания суперпользователя с нужным нам паролем, сохраним изменения и отключимся от базы
create user SYSDBA password 'SuP#r$ecR6T4';
commit;
quit;
{{ :firebird:pasted:20190221-200137.png }} По умолчанию **Firebird 3** использует плагин **SRP** для работы с пользовательскими паролями и для генерации уникальных идентификаторов сеанса для шифрования трафика (параметр **UserManager** = **Srp** и сопутствующие ему параметры **AuthServer**,**AuthClient** в **firebird.conf**). Пароль, используемый диспетчером пользователей по умолчанию **SRP** может иметь длину __до 20 символов__. Обратите внимание на то, что мы просто создали пользователя с предопределённым именем, но не выдали ему административную роль. Связано это с тем, что пользователь с предопределённым именем **SYSDBA** автоматически будет иметь полные права администратора, поэтому не следует ему явно назначать роль **ADMIN** (**RDB$ADMIN**). Для завершения инициализации снова __запустим службу сервера__ Firebird. С этого момента мы сможем выполнять подключение к базам данных, включая базы данных безопасности, используя учётную запись пользователя **SYSDBA**. {{ :firebird:pasted:20190221-200502.png }} Попытаемся подключиться к БД через **TCP** порт экземпляра с указанием пользователя **SYSDBA** и заданного нами пароля:
isql KOM-DEV02/9002:E:\FBInst2\Bin\security3.fdb -user "SYSDBA" -password "SuP#r$ecR6T4"
{{ :firebird:pasted:20190221-200622.png }} Как видим по ошибке "//no permission for remote access to database//", удалённый доступ к БД отключен. Включить удалённый доступ на время проверки можно с помощью конфигурационного файла **databases.conf**, изменив для базы **security** значение параметра **RemoteAccess** с **false** на **true**: {{ :firebird:pasted:20190221-200716.png }} Перезапуск службы при этом не требуется и удалённый доступ к базе начинает работать сразу. Снова попробуем подключиться через TCP порт к экземпляру и его базе.
isql KOM-DEV02/9002:E:\FBInst2\Bin\security3.fdb -user "SYSDBA" -password "SuP#r$ecR6T4"
{{ :firebird:pasted:20190221-200802.png }} Подключившись, попробуем получить листинг пользователей, выполнив запрос:
show users;
Как видим, теперь подключение работает. В целях повышения уровня безопасности удалённый доступ к БД **security** вернём в исходное, то есть в выключенное, состояние, вернув значение параметра **RemoteAccess** в **false** в конфигурационном файле **databases.conf** для этой базы. {{ :firebird:pasted:20190221-200850.png }} В качестве дополнительной проверки можем попробовать удалённо подключиться к демонстрационной базе данных с использованием учётной записи **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;
{{ :firebird:pasted:20190221-201014.png }} Как видим, созданная нами административная учётная запись **SYSDBA** успешно работает в режиме удалённого подключения к базам данных экземпляра **Firebird 3**. ---- Проверено на следующих конфигурациях: ^ Версия ОС ^ Версия Firebird ^ | Windows Server 2012 R2 Standard EN (6.3.9600) | 3.0.4.33054 64-bit | ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 21.02.2019 19:49 {{tag>Firebird "Firebird 3.0" RDBMS DBMS Instance "Windows Server" SYSDBA Password Security GSEC isql}} ~~DISCUSSION~~