我有超过8 GB的firebird数据库,我想从中迁移所有数据。但是我忘记了用户名和密码。无论如何,有没有什么工具可以破解这个数据库并可以将我的数据取回来?
答案 0 :(得分:1)
在大多数Firebird设置中,用户名和密码都保存在中央安全数据库中(对于Firebird 3,则为security3.fdb)。如果您不再知道用户名和密码,则可以使用以下选项。
请注意,此答案以Firebird 3为基础,但大多数选项也适用于Firebird 2.5及更早版本。使用security3.fdb
代替security2.fdb
。 create user
和alter user
步骤仅在Firebird 2.5或更高版本中有效。
RDB$ADMIN
角色的另一个用户)通过任何其他数据库重置该用户的密码gsec
用作SYSDBA来重置密码如果您的数据库将自身用作其安全性数据库,则必须首先通过注释掉该数据库的databases.conf
设置,从SecurityDatabase
中删除该设置。
对于Firebird 3,此答案假定为Srp身份验证机制创建了一个用户,并且以下步骤假定Firebird安装中的firebird.conf
具有设置AuthServer = Srp
(或至少是该设置) AuthServer
包含Srp
)并设置UserManager = Srp
(或至少Srp
是UserManager
的第一项)。
在Firebird 2.5及更高版本上工作
使用SYSDBA(或安全数据库上具有管理员角色的另一个用户)连接到数据库,并使用
ALTER USER <username> SET PASSWORD '<new password>';
根据您的情况,这可能不是一个选择。
在Linux上支持Firebird 2.5或更高版本,在Windows上需要Firebird 3.0或更高版本。
停止Firebird服务器,并使用ISQL以嵌入式模式(不需要密码)连接到数据库:
isql -user sysdba <database>
对于默认的Firebird 3安装,您可以将employee
的{{1}}用于<database>
,这将使用员工示例数据库。
如上所述更改密码。或者,尝试在isql命令行中用实际的用户名替换sysdba
。
再次启动Firebird服务器。
适用于所有版本的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服务器。
如果您正在使用新的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>';
然后您可以将该数据库用于之前的步骤。