SYSDBA в Firebird: пароль по умолчанию и как его сменить
SYSDBA — встроенный суперпользователь Firebird: единственная учётная запись, которая существует во всех версиях сервера с самых древних времён и которая имеет полный доступ ко всем базам на сервере, минуя проверки прав внутри самих баз. Первое подключение после установки, смена забытого пароля, разбор базы, доставшейся «по наследству», — всё начинается с SYSDBA.
Важно: SYSDBA — это именно пользователь, а не роль. Не путать с ролью RDB$ADMIN, которую выдают обычным пользователям внутри конкретной базы.
Пароль по умолчанию
Классический пароль SYSDBA — masterkey. Нюанс, о котором мало кто знает:
в легаси-аутентификации значимы только первые восемь символов, поэтому masterke
и даже masterkeXYZ тоже подойдут. Сработало одно из трёх — вы нашли дефолтную
установку, и её стоит срочно закрыть (см. «Безопасность» ниже).
При этом masterkey вы получите не всегда:
- Windows-инсталлятор спрашивает пароль при установке. При обновлении поверх старой установки пароль может остаться прежним.
- Установка из архива на Linux: пароль генерируется автоматически и
сохраняется в файл
SYSDBA.passwordв корневом каталоге установки (обычно/opt/firebird/, рядом с базой безопасности). Пароль там лежит в открытом виде.
Как сменить пароль
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.5 | security2.fdb |
| 3.0 | security3.fdb |
| 4.0 | security4.fdb |
| 5.0 | security5.fdb |
При обновлении версии сервера пользователи не переносятся в новую базу автоматически — их нужно создать заново или перенести вручную. Этим же объясняется классический сценарий «поставил 5.0 рядом, а пароль SYSDBA от старой установки не подходит».
Если пароль потерян
Отдельной команды «сбросить пароль» нет: пароль хранится в базе безопасности в хешированном виде, подсмотреть его нельзя. Практические варианты:
- Установка из архива на Linux — сначала загляните в
SYSDBA.password(см. выше), вдруг пароль там. - Есть другой пользователь с правами администратора базы безопасности
(или выдана роль RDB$ADMIN) — смените SYSDBA от его имени тем же
ALTER USER. - В крайнем случае — заменить базу безопасности на чистую из поставки:
пароль SYSDBA вернётся к
masterkey, но все учётные записи придётся заводить заново. Сами пользовательские базы при этом не страдают.
Безопасность
masterkey известен всему интернету. Оставлять его на сервере, доступном из
сети, — значит отдать ключи от всех баз сразу: полный экспорт данных, правка
и удаление — всё, что угодно, через порт 3050.
- Меняйте пароль сразу после установки и во всех активных плагинах.
- Не работайте приложениями под SYSDBA — заведите отдельных пользователей с нужными правами через CREATE USER.
- На Linux не забывайте про файл
SYSDBA.password: пароль там открытый текстом.
Что почитать дальше
- gsec — легаси-утилита управления пользователями
- CREATE USER — управление учётными записями через SQL
- Роли — RDB$ADMIN и разграничение прав
- Порт 3050 — доступность сервера из сети
- Установка Firebird на Windows
- Установка Firebird на Linux
Обсуждение