火鸟,解密存储过程?

Firebird, decrypt stored procedure?

我陷入了一个需要将某些功能从遗留 Firebird 数据库移植到 MSSQL 的境地。 table 模式和数据没问题,对于 sysdba,所有内容都是可枚举和选择的 table,但是,事实证明应用层很痛苦。 该数据库有大约 1000 多个过程,我想通过一些审查来移动它们,而不是重建整个 DAL。问题是(您猜到了)它们似乎都以某种方式被加密了。当我要求更改它以生成脚本时,我得到了 ALTER 脚本,但过程的主体看起来像一些二进制内容的 base64 字符串。我的第一个猜测是加密。

有没有办法像 MSSQL 一样解密这些主体?请注意,Firebird 数据库 运行 在其原始盒子上,在其原始 Firebird 安装中,没有任何内容被复制或移动,以防需要访问某些密钥。

当您在 Firebird 中创建(或更改)存储过程时,Firebird 会将原始主体存储在 table RDB$PROCEDURESRDB$PROCEDURE_SOURCE 列中。这不会被加密。该主体与 Firebird 本身无关,因为它将使用存储过程的编译形式(在列 RDB$PROCEDURE_BLR 中);存储它只是为了让 isql(和其他工具)生成数据库的 DDL 脚本。

一些软件供应商不喜欢人们可以访问他们的源代码,因此他们要么将此 RDB$PROCEDURE_SOURCE 列清空,要么 - 就像您的数据库的情况一样 - 以某种方式加密正文.

如果这是内部开发的应用程序,您将需要找到用于构建此数据库的原始脚本。

否则,如果不知道供应商(或开发人员)做了什么,就无法撤消此操作。另一种可能的解决方案是从 BLR(二进制语言表示,存储过程的编译形式)逆向工程到存储过程,但我不知道执行此操作的工具(这可能不会产生非常可读的代码)。

执行其中任何一项都可能违反许可协议,甚至可能违反当地法律。最好的办法是联系此遗留应用程序的供应商并向他们索取(或支付)此源代码。

ISQL 工具可以打印 'readable' 形式的 BLR,但由于它非常低级,我不知道这会有多大帮助。有关示例,请参见 this answer

从 Firebird 3.0 开始,现在可以加密数据库了...所以它与 Firebird 安装无关,而是它自己的数据库已经加密,恐怕你需要加密密钥才能解密数据阅读这些文章:

http://firebirdsql.org/file/documentation/release_notes/html/en/3_0/rnfb30-security-encryption.html

http://tracker.firebirdsql.org/browse/CORE-657