У меня есть база данных firebird в файле .fdb, но в базе данных нет пользователя SYSDBA, и я не помню учетных данных для входа в базу данных. Есть ли способ сбросить учетные данные базы данных?
Пользователю SYSDBA заблокирован доступ к базе данных Firebird 2.x
Ответы (2)
Как сказал Марк, дело не в том, что в базе данных нет пользователя SYSDBA - базы данных в Firebird 2.x никогда не имеют пользователей - но этот старый трюк был использован для создания SYSDBA
именованной роли, чтобы вызвать конфликт имен при входе в систему.
После просмотра презентации безопасности 2007 года я два предложения для вас.
- Вы можете попробовать какой-нибудь инструмент, который открывает базы данных Firebird без использования самого Firebird, чтобы узнать, какое имя пользователя может вывести вас из тупика.
Одним из таких инструментов является Database Explorer в IBExpert. Полный IBExpert платный для стран, не входящих в СССР, а бесплатный IBExpert Personal, вероятно, не имеет этого инструмента. Но я надеюсь, что инструмент работает в IBExpert Trial. Еще один инструмент — IBSurgeon FirstAID. И, возможно, есть еще инструменты для извлечения данных из поврежденных баз данных. Вам нужно только найти и прочитать одну конкретную строку.
Запрос на создание блокирующей роли приведен на 23-й странице презентации.
INSERT INTO RDB$ROLES(RDB$ROLE_NAME, RDB$OWNER_NAME)
VALUES (‘SYSDBA’, ‘LOCKSMITH’);
Таким образом, вам нужно будет заглянуть в указанную таблицу, найти строку с указанной ролью и узнать имя пользователя, имеющего полномочия для этой роли (в примере это было LOCKSMITH
).
После этого вы подключаетесь к любой другой базе данных на том же сервере и создаете пользователя с выученным именем. Затем вы используете это имя для входа в проблемную базу данных и в DROP ROLE SYSDBA; COMMIT;
.
- Вы также можете использовать Firebird Embedded. Все серверные проверки безопасности обойдены во встроенной версии FB 2.x (но если разработчик БД добавил в триггеры специальные проверки безопасности - они будут работать). Таким образом, вы входите в проблемную базу данных, используя версию Firebird Embedded, любое имя пользователя и любой пароль, и после этого вы снимаете роль блокировки доступа.
В базе данных Firebird пароль не содержится (до версии 3.0, как упоминал @Arioch'The). Пароль используется только для сервера. Другими словами, вы можете скопировать файл базы данных с существующего сервера на другой (с известным паролем) и открыть файл базы данных.