Пользователю SYSDBA заблокирован доступ к базе данных Firebird 2.x

У меня есть база данных firebird в файле .fdb, но в базе данных нет пользователя SYSDBA, и я не помню учетных данных для входа в базу данных. Есть ли способ сбросить учетные данные базы данных?

введите здесь описание изображения


person Lucas Silva Chaves    schedule 09.10.2017    source источник


Ответы (2)


Как сказал Марк, дело не в том, что в базе данных нет пользователя SYSDBA - базы данных в Firebird 2.x никогда не имеют пользователей - но этот старый трюк был использован для создания SYSDBA именованной роли, чтобы вызвать конфликт имен при входе в систему.

После просмотра презентации безопасности 2007 года я два предложения для вас.

  1. Вы можете попробовать какой-нибудь инструмент, который открывает базы данных 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;.

  1. Вы также можете использовать Firebird Embedded. Все серверные проверки безопасности обойдены во встроенной версии FB 2.x (но если разработчик БД добавил в триггеры специальные проверки безопасности - они будут работать). Таким образом, вы входите в проблемную базу данных, используя версию Firebird Embedded, любое имя пользователя и любой пароль, и после этого вы снимаете роль блокировки доступа.
person Arioch 'The    schedule 10.10.2017

В базе данных Firebird пароль не содержится (до версии 3.0, как упоминал @Arioch'The). Пароль используется только для сервера. Другими словами, вы можете скопировать файл базы данных с существующего сервера на другой (с известным паролем) и открыть файл базы данных.

person Gluttton    schedule 09.10.2017
comment
Я уже пробовал это, однако, когда я пытаюсь открыть базу данных на другом компьютере, Flamerobin показывает эту ошибку - person Lucas Silva Chaves; 09.10.2017
comment
Можете ли вы открыть другие базы данных на другой машине? - person Gluttton; 09.10.2017
comment
@LucasSilvaChaves Похоже, кто-то создал роль SYSDBA, чтобы пользователь SYSDBA не мог войти в систему. Вам нужно выяснить, какое имя пользователя использовалось, создать пользователя с этим именем, а затем удалить эту роль. - person Mark Rotteveel; 09.10.2017
comment
IBExpert имеет проводник базы данных. Возможно, он может пройтись по системным таблицам, чтобы увидеть, какие пользователи имеют права на роль SYSDBA. - person Arioch 'The; 09.10.2017
comment
@Gluttton В базе данных Firebird пароль не содержится - начиная с 3.0 он может их содержать - person Arioch 'The; 09.10.2017
comment
@Arioch'The, спасибо, исправлено. - person Gluttton; 09.10.2017