3

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

4

1 回答 1

3

在大多数 Firebird 设置中,用户名和密码保存在中央安全数据库中(在 Firebird 3 的情况下为 security3.fdb)。如果您不再知道用户的用户名和密码,您有以下选择。

请注意,此答案使用 Firebird 3 作为其基础,但大多数选项也适用于 Firebird 2.5 及更早版本。而不是security3.fdb,使用security2.fdb. 和步骤仅适用于 Firebird 2.5 或更高版本create useralter user

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

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

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

选项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 安装,您可以使用employeefor <database>,它将使用员工示例数据库。

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

再次启动 Firebird 服务器。

选项 2:使用 gsec 更改密码

适用于所有版本的 Linux,在 Windows 上仅适用于 Firebird 3.0 及更高版本。

请注意 gsec 自 Firebird 3 以来已被弃用,并且可能会从未来的 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 下载页面下载一个 zipkit )或使用一个已知密码的 security3.fdb,并用这个默认版本替换您当前的 security3.fdb。暂时不要启动 Firebird。

对于较早的 Firebird 版本,请在下载页面上查找您的版本。

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>';

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

于 2018-09-26T12:07:18.810 回答