【问题标题】:SYSDBA user is blocked from access to Firebird 2.x databaseSYSDBA 用户被阻止访问 Firebird 2.x 数据库
【发布时间】:2018-03-20 17:43:15
【问题描述】:

我在 .fdb 文件中有一个 firebird 数据库,但该数据库没有 SYSDBA 用户,而且我不记得登录数据库的凭据.有什么方法可以重置数据库凭据?

【问题讨论】:

    标签: firebird firebird2.5 change-password forgot-password password-recovery


    【解决方案1】:

    就像 Mark 所说的,并不是数据库“没有 SYSDBA 用户”——Firebird 2.x 中的数据库从没有用户——而是使用了这个老技巧来创建 SYSDBA 命名角色以触发名称登录时发生冲突。

    浏览2007 Security presentation后,我有两个建议给你。

    1. 您可以尝试一些无需使用 Firebird 本身即可打开 Firebird 数据库的工具,以了解哪些用户名可以让您摆脱僵局。

    IBExpert 中的数据库资源管理器就是一个这样的工具。完整的 IBExpert 是为非苏联国家付费的,免费的 IBExpert Personal 可能没有该工具。但我希望该工具可以在 IBExpert 试用版中使用。另一个工具是 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 的嵌入式版本中,所有服务器编码的安全检查都被绕过(但如果 DB 设计器在触发器中添加了一些临时安全检查 - 它们将起作用)。因此,您使用 Firebird Embedded 版本、任何用户名和任何密码登录到有问题的数据库,然后删除访问阻止角色。

    【讨论】:

      【解决方案2】:

      在 Firebird 数据库中不包含密码(直到 @Arioch'The 提到的 v3.0)。密码仅用于服务器。换句话说,您可以将数据库文件从现有服务器复制到另一个(使用已知密码)并打开数据库文件。

      【讨论】:

      • 我已经尝试过了,但是当我尝试在其他机器上打开数据库时,flarerobin 会显示这个error
      • 你能在其他机器上打开另一个数据库吗?
      • @LucasSilvaChaves 看起来有人创建了角色 SYSDBA 以阻止用户 SYSDBA 登录。您需要找出使用了哪个用户名,使用该名称创建一个用户,然后删除该角色。
      • IBExpert 有数据库浏览器。也许它可以遍历系统表以查看哪些用户拥有 SYSDBA 角色的授权。
      • @Gluttton "在 Firebird 数据库中不包含密码" - 从 3.0 开始可能包含密码
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多