忘记了* fdb(firebird)数据库的用户名和密码。无论如何,我可以破解这个数据库吗?

时间:2018-09-26 07:32:58

标签: database security firebird cracking firebird-3.0

我有超过8 GB的firebird数据库,我想从中迁移所有数据。但是我忘记了用户名和密码。无论如何,有没有什么工具可以破解这个数据库并可以将我的数据取回来?

1 个答案:

答案 0 :(得分:1)

在大多数Firebird设置中,用户名和密码都保存在中央安全数据库中(对于Firebird 3,则为security3.fdb)。如果您不再知道用户名和密码,则可以使用以下选项。

请注意,此答案以Firebird 3为基础,但大多数选项也适用于Firebird 2.5及更早版本。使用security3.fdb代替security2.fdbcreate useralter user步骤仅在Firebird 2.5或更高版本中有效。

  1. 使用sysdba帐户(或安全数据库中具有RDB$ADMIN角色的另一个用户)通过任何其他数据库重置该用户的密码
  2. 在嵌入式模式下将gsec用作SYSDBA来重置密码
  3. 用具有用户已知密码的副本替换安全数据库

如果您的数据库将自身用作其安全性数据库,则必须首先通过注释掉该数据库的databases.conf设置,从SecurityDatabase中删除该设置。

对于Firebird 3,此答案假定为Srp身份验证机制创建了一个用户,并且以下步骤假定Firebird安装中的firebird.conf具有设置AuthServer = Srp(或至少是该设置) AuthServer包含Srp)并设置UserManager = Srp(或至少SrpUserManager的第一项)。

选项1:重设密码

在Firebird 2.5及更高版本上工作

使用SYSDBA(或安全数据库上具有管理员角色的另一个用户)连接到数据库,并使用

ALTER USER <username> SET PASSWORD '<new password>';

根据您的情况,这可能不是一个选择。

选项1a:使用嵌入式连接(无密码)重置

在Linux上支持Firebird 2.5或更高版本,在Windows上需要Firebird 3.0或更高版本。

停止Firebird服务器,并使用ISQL以嵌入式模式(不需要密码)连接到数据库:

isql -user sysdba <database>

对于默认的Firebird 3安装,您可以将employee的{​​{1}}用于<database>,这将使用员工示例数据库。

如上所述更改密码。或者,尝试在isql命令行中用实际的用户名替换sysdba

再次启动Firebird服务器。

选项2:使用gsec更改密码

适用于所有版本的Linux,而适用于Windows,仅适用于Firebird 3.0和更高版本。

请注意,自从Firebird 3起,gsec已被弃用,并且可能会从将来的Firebird版本中删除。

停止Firebird服务器,打开命令行,然后在Firebird安装文件夹中执行以下操作:

gsec -user sysdba

并在gsec提示符下

modify <username> -pw <new password>

或者如果该用户还不存在:

add <username> -pw <new password>

再次启动Firebird服务器。

选项3:替换安全数据库

如果您正在使用新的Firebird安装,则大多数步骤也适用。只需跳过安全数据库的替换即可。

停止Firebird服务器,并复制当前的security3.fdb作为备份。

获取适用于您的平台的默认security3.fdb(例如,从Firebird 3 download page下载zipkit)或使用具有已知密码的security3.fdb,然后用此默认版本替换当前的security3.fdb。不要启动Firebird。

对于Firebird的早期版本,请在download page上查找您的版本。

sysdba的默认密码通常为'masterkey',但在Firebird 3上,默认的security3.fdb仅包含用于旧式身份验证机制的用户,该密码在默认的Firebird 3安装中已禁用。

要添加sysdba用户,请使用与任何数据库的嵌入式连接并创建sysdba帐户。在Firebird安装文件夹的命令提示符下,运行:

isql -u sysdba <database>

在ISQL中执行:

create user sysdba password '<sysdba password>';
commit;

要添加其他用户,请使用SYSDBA(类似于上一步2)连接到任何数据库并执行

create user <username> password '<new password>';
commit;

然后退出isql(使用quit;

然后再次启动Firebird服务器,您应该可以使用该用户及其密码进行连接。


这些步骤中的大多数都假设您已经有一个数据库要连接,如果还没有数据库,则需要首先创建一个数据库。

以sysdba用户身份启动isql:

isql -u sysdba

并创建一个数据库

create database '<path-of-database>';

然后您可以将该数据库用于之前的步骤。