SYSDBA в Firebird: пароль по умолчанию и как его сменить

SYSDBA — встроенный суперпользователь Firebird: единственная учётная запись, которая существует во всех версиях сервера с самых древних времён и которая имеет полный доступ ко всем базам на сервере, минуя проверки прав внутри самих баз. Первое подключение после установки, смена забытого пароля, разбор базы, доставшейся «по наследству», — всё начинается с SYSDBA.

Важно: SYSDBA — это именно пользователь, а не роль. Не путать с ролью RDB$ADMIN, которую выдают обычным пользователям внутри конкретной базы.

Пароль по умолчанию

Классический пароль SYSDBA — masterkey. Нюанс, о котором мало кто знает: в легаси-аутентификации значимы только первые восемь символов, поэтому masterke и даже masterkeXYZ тоже подойдут. Сработало одно из трёх — вы нашли дефолтную установку, и её стоит срочно закрыть (см. «Безопасность» ниже).

При этом masterkey вы получите не всегда:

Как сменить пароль

Firebird 3.0 и новее — обычным SQL под любым пользователем с правами администратора:

ALTER USER SYSDBA SET PASSWORD 'новыйПароль';

Firebird 2.5 и старше — утилитой gsec:

gsec -user sysdba -password masterkey -modify sysdba -pw новыйПароль

Сменили пароль, а masterkey всё равно работает

Классическая ловушка Firebird 3.0+. Учётные записи хранятся в плагинах аутентификации, и SYSDBA обычно существует сразу в двух: Srp и Legacy_UserManager. ALTER USER без указания плагина меняет пароль в плагине по умолчанию (Srp), а Legacy_UserManager остаётся с masterkey — и старые клиенты, подключающиеся через Legacy_Auth, продолжают заходить.

Закройте оба:

ALTER USER SYSDBA SET PASSWORD 'новыйПароль' USING PLUGIN Srp;
ALTER USER SYSDBA SET PASSWORD 'новыйПароль' USING PLUGIN Legacy_UserManager;

Если легаси-плагин вам не нужен, учётку в нём можно вообще удалить: DROP USER SYSDBA USING PLUGIN Legacy_UserManager.

Где живут пользователи

Учётные записи хранятся не в вашей базе, а в отдельной базе безопасности сервера:

Версия FirebirdФайл базы пользователей
2.1–2.5security2.fdb
3.0security3.fdb
4.0security4.fdb
5.0security5.fdb

При обновлении версии сервера пользователи не переносятся в новую базу автоматически — их нужно создать заново или перенести вручную. Этим же объясняется классический сценарий «поставил 5.0 рядом, а пароль SYSDBA от старой установки не подходит».

Если пароль потерян

Отдельной команды «сбросить пароль» нет: пароль хранится в базе безопасности в хешированном виде, подсмотреть его нельзя. Практические варианты:

Безопасность

masterkey известен всему интернету. Оставлять его на сервере, доступном из сети, — значит отдать ключи от всех баз сразу: полный экспорт данных, правка и удаление — всё, что угодно, через порт 3050.

Что почитать дальше

Обсуждение