如何查看 Firebird 2.5 数据库的内容

问题描述 投票:0回答:1

我想查看 .fdb 文件(Firebird 数据库)的内容,并希望将它们转换为 Excel 格式。该文件来自另一台计算机。我已经安装了 Firebird 2.5 并且我已经安装了 FlameRobin

在 FlameRobin 中,我执行了数据库 > 注册现有数据库,用户名 = SYSDBA,密码 = masterkey

enter image description here

但是我收到错误:

您的登录 SYSDBA 与 SQL 角色名称之一相同。询问你的 数据库管理员设置有效的 Firebird 登录

enter image description here

我已经阅读了足够多的内容,知道这应该是一个技巧,因为 Firebird 2.5 没有用户。根据这个旧帖子。据说我必须使用 IBexpert 或 IBsurgeon FirstAid,但不清楚如何使用它们。我已经下载并安装了它们。我应该找到一个名为 RDB$ROLES 的表,但我找不到它们。

谁能帮我更好的方法?

firebird firebird2.5
1个回答
2
投票

通过创建同名角色,“保护”该数据库,防止 SYSDBA 用户访问。

请注意,以下步骤是在没有采取任何措施阻止普通用户从

RDB$ROLES
表中进行选择的假设下进行的。否则,您将需要使用其他方法来找到正确的用户(例如,从应用程序代码中,跟踪连接),或者需要数据库修复工具来删除/覆盖角色,或者检查文件本身(这确实需要很多有关内部结构的知识)。

为了能够访问它,您需要创建一个新用户。

创建新用户

在 Firebird 2.5 中,创建新用户基本上有两种方法:

  1. 使用 SYSDBA(或具有 RDB$ADMIN 角色的另一个用户)连接到另一个数据库。例如,使用 ISQL 连接到标准 Firebird 安装中包含的员工数据库(*):

    启动 ISQL(用实际密码替换 masterkey):

    isql -user sysdba -password masterkey localhost:employee
    

    在 ISQL 中(用所需值替换新用户和密码):

    create user thenewuser password 'thepassword';
    commit;
    exit;
    
  2. 使用GSEC创建用户(注意:GSEC在Firebird 3.0中已被弃用):

    启动GSEC(用实际密码替换masterkey):

    gsec -user sysdba -password masterkey
    

    在 GSEC 内(用所需值替换新用户和密码):

    add thenewuser -pw thepassword
    

该用户不能做太多事情,但应该能够检查数据库的元数据表。

找到需要删除角色的用户

您应该能够使用之前创建的用户登录数据库(用数据库的实际路径或别名替换数据库):

isql -user thenewuser -password thepassword localhost:thedatabase

然后查询谁“拥有”SYSDBA角色:

select RDB$OWNER_NAME from RDB$ROLES where RDB$ROLE_NAME = 'SYSDBA';

注意:如果 RDB$OWNER_NAME 不是有效的常规标识符(以 A-Z 开头,其余为 A-Z、0-9 或 _ 或 $),您将需要识别具有 RDB$ADMIN 权限的用户:

select RDB$USER from RDB$USER_PRIVILEGES where RDB$RELATION_NAME = 'RDB$ADMIN' and RDB$OBJECT_TYPE = 13;

作为最后的手段,尝试识别数据库所有者:

select distinct RDB$OWNER_NAME as DATABASE_OWNER
from RDB$RELATIONS
where RDB$SYSTEM_FLAG = 1;

现在,使用“创建新用户”中描述的步骤创建一个具有角色所有者名称的新用户或具有 RDB$ADMIN 权限的用户之一(在以下步骤中,我使用用户名 BROKEN_LOCK) .

如果用户已存在,请使用以下命令更改其密码:

alter user BROKEN_LOCK set password 'thepassword';

删除 SYSDBA 角色

使用 ISQL 和上一步中找到的拥有该角色(或管理员)的用户访问数据库:

isql -user broken_lock -password thepassword -role RDB$ADMIN localhost:thedatabase

仅具有 RDB$ADMIN 权限的用户才需要选项

-role RDB$ADMIN
,但对于不具有该角色的用户,该选项会被默默忽略。

在 ISQL 中,删除角色:

drop role SYSDBA;
commit;
exit;

您现在应该能够使用 SYSDBA 访问数据库。


(*):如果您的系统上没有任何其他数据库,则需要先创建一个(或使用 GSEC 路径)。

启动 ISQL:

isql

在 ISQL 中(用有效路径替换 C:\Databases\mydatabase.fdb,用实际密码替换 masterkey):

create database 'C:\Databases\mydatabase.fdb' user 'sysdba' password 'masterkey';

然后使用数据库路径而不是

employee
来创建用户。

© www.soinside.com 2019 - 2024. All rights reserved.