我真的想知道,如何保护firebird数据库不被任何用户打开,而是从它自己的应用程序打开.如果我使用单个文件Firebird数据库(非嵌入式)分发桌面应用程序,如何保护数据库不被复制到另一台运行具有已知sysdba密码的Firebird的计算机?
我搜索了与此主题相关的问题,并且只找到了这个:找到一个传统的firebird/Interbase数据库密码
如果该帖子中的答案是真的,如何使用firebird数据库的桌面应用程序并禁止任何用户使用另一台机器打开它?或者我应该使用其他数据库,如mySQL或PostgreSQL?
PS:我使用Delphi 2006来开发GUI.
在考虑Firebird数据库的密码时,您忽略了这一点 - 服务器是开源的,因此无法做您想做的事情.用户只需通过注释掉的密码检查重新编译服务器.
基本上你只能做两件事:
将您自己的修改写入Firebird服务器,以便它写入与所有其他服务器不兼容的数据库文件.然后人们可以将数据库传输到另一台机器并不重要,因为标准服务器可执行文件将无法访问数据库中的数据.
仅将加密数据写入文件,因此无法访问数据库.
两者当然也不是万无一失的,因为坚定的破解者可以简单地使用您自己的应用程序来获取数据.拥有将调试器附加到正在运行的进程的权限足以在任何时间点停止应用程序的执行并检查RAM中的(解密的)数据.另请参阅SO问题"如何在Delphi中增加内存安全性?" ,尤其是这个答案,有关此主题的更多信息.
顺便说一句:这可以在你选择的任何数据库引擎上完成,以回答问题的最后部分.