我有超过 8 GB 的 firebird 数据库,我想从中迁移所有数据。但是我忘记了用户名和密码。有没有什么工具可以破解这个数据库并取回我的数据?
1 回答
在大多数 Firebird 设置中,用户名和密码保存在中央安全数据库中(在 Firebird 3 的情况下为 security3.fdb)。如果您不再知道用户的用户名和密码,您有以下选择。
请注意,此答案使用 Firebird 3 作为其基础,但大多数选项也适用于 Firebird 2.5 及更早版本。而不是security3.fdb
,使用security2.fdb
. 和步骤仅适用于 Firebird 2.5 或更高版本create user
。alter user
- 使用 sysdba 帐户(或
RDB$ADMIN
在安全数据库中具有角色的其他用户)通过任何其他数据库重置用户的密码 - 在
gsec
嵌入式模式下用作 SYSDBA 以重置密码 - 将安全数据库替换为用户已知密码的副本
如果您的数据库将其自身用作其安全数据库,您首先必须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 安装,您可以使用employee
for <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>';
然后,您可以将该数据库用于前面的步骤。