我真的很想知道,如何保护 firebird 数据库不被任何用户打开,而是从它自己的应用程序打开。如果我使用单个文件 Firebird 数据库(非嵌入式)分发桌面应用程序,如何保护数据库不被复制到另一台运行 Firebird 且已知 sysdba 密码的机器?
我搜索了与这个主题相关的问题,只找到这个:Finding a legacy firebird/Interbase database password
如果该帖子中的答案是正确的,如何将桌面应用程序与 firebird 数据库一起使用并禁止任何用户使用另一台机器打开它?或者我应该使用其他数据库,如 mySQL 或 PostgreSQL?
PS:我使用Delphi 2006开发GUI。
最佳答案
在考虑 Firebird 数据库的密码时,您没有捕获要点 - 服务器是开源的,因此无法做您想做的事。用户可以简单地重新编译服务器并注释掉密码检查。
基本上您只能做两件事:
将您自己的修改写入 Firebird 服务器,以便它写入一个与所有其他服务器不兼容的数据库文件。人们可以将数据库转移到另一台机器上并不重要,因为标准服务器可执行文件将无法访问数据库中的数据。
只将加密数据写入文件,这样就可以访问数据库。
当然,两者都不是万无一失的,因为坚定的破解者可以简单地使用您自己的应用程序来获取数据。拥有将调试器附加到正在运行的进程的权限足以在任何时间点停止应用程序的执行并检查 RAM 中的(解密的)数据。另见 SO 问题 "How can I increase memory security in Delphi?" , 特别是 this answer ,了解有关此主题的更多信息。
顺便说一句:无论您选择什么数据库引擎,这都是可以完成的,以回答您问题的最后一部分。
关于database - Firebird 数据库密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/696049/