Firebird,解密存储过程?

时间:2016-05-12 14:06:54

标签: stored-procedures encryption firebird

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

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

2 个答案:

答案 0 :(得分:4)

在Firebird中创建(或更改)存储过程时,Firebird会将原始正文存储在表RDB$PROCEDURE_SOURCE的{​​{1}}列中。这不会被加密。这个主体与Firebird本身无关,因为它将使用存储过程的编译形式(在RDB$PROCEDURES列中);它仅存储以允许isql(和其他工具)生成数据库的DDL脚本。

有些软件供应商不喜欢人们可以访问他们的源代码,因此他们会将此RDB$PROCEDURE_BLR列置空或者 - 就像您的数据库一样 - 以某种方式加密正文

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

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

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

ISQL工具可以在可读的情况下打印BLR。形式,但由于它非常低级,我不知道它会有多大帮助。有关示例,请参阅this answer

答案 1 :(得分:-1)

从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