我真的想知道,如何保护firebird数据库不被任何用户打开,而是从它自己的应用程序打开。如果我使用单个文件Firebird数据库(非嵌入式)分发桌面应用程序,如何保护数据库不被复制到另一台运行具有已知sysdba密码的Firebird的计算机?
我搜索过与此主题相关的问题,但只能找到:Finding a legacy firebird/Interbase database password
如果该帖子中的答案是真的,如何使用firebird数据库的桌面应用程序并禁止任何用户使用另一台机器打开它?或者我应该使用其他数据库,如mySQL或PostgreSQL?
PS:我使用Delphi 2006来开发GUI。
答案 0 :(得分:5)
在考虑Firebird数据库的密码时,你忽略了这一点 - 服务器是开源的,所以没有办法做你想要的。用户可以通过注释掉的密码检查来重新编译服务器。
基本上你只能做两件事:
将您自己的修改写入Firebird服务器,以便它写入与所有其他服务器不兼容的数据库文件。然后人们可以将数据库传输到另一台机器并不重要,因为标准服务器可执行文件将无法访问数据库中的数据。
只将加密数据写入文件,因此无法访问数据库。
两者当然也不是万无一失,因为坚定的破解者可以简单地使用您自己的应用程序来获取数据。拥有将调试器附加到正在运行的进程的权限足以在任何时间点停止应用程序的执行并检查RAM中的(解密的)数据。另请参阅SO问题"How can I increase memory security in Delphi?",尤其是this answer,了解有关此主题的更多信息。
顺便说一句:这可以在你选择的任何数据库引擎上完成,以回答你问题的最后部分。
答案 1 :(得分:3)
如何将桌面应用程序与firebird数据库一起使用,并禁止任何用户使用其他计算机打开它
如果您的意思是该用户同时拥有加密数据和密钥,那么您正在进行DRM。确定的答案是:你做不到。您可以通过使用不同的方法隐藏密钥来减慢用户的速度,但是您无法阻止它们。
答案 2 :(得分:0)
你没有。
这与Pidgin在http://developer.pidgin.im/wiki/PlainTextPasswords中的问题大致相同,只是保护它免受某些用户的攻击,而不是其他用户,而不是您的应用程序,而不是任何最终用户。