2010-01-10 86 views
0

我在Borland的Delphi编写具有一个dBASE数据库文件的应用程序7.使用加密文件安全

注:我认为这个问题是文件的安全性相关的,你可以忘记的dBASE东西(考虑它作为一个TXT文件)在这个问题。

只能由应用程序访问数据库。然后它必须被加密。不幸的是,dBASE不支持任何密码机制,我必须自己加密文件(并且我也必须使用dBASE)

您建议如何保护数据库文件?

简单的一种是:

  1. 加密数据库文件和将它放在应用程序的EXE文件的旁边。
  2. 当应用程序运行时,它应该解密文件(使用硬编码密码)并将结果复制到一个临时文件,该文件有DeleteOnCloseNoSharingPermission标志。
  3. 关闭时,应用程序应该加密临时dBASE文件并用新文件替换旧的加密文件。

我认为这是一个公平的安全方法。但它有两个大问题:

  1. 使用未删除的工具,用户可以恢复和访问已删除的临时文件。
  2. 更糟:应用程序运行时,如果系统突然重启,DeleteOnClose标志失败,临时文件保留在硬盘上,用户可以访问它。

是否有解决方案,至少,第二部分?

有没有其他解决方案?

+0

长镜头:你能创建一个RAM驱动器并将解密的数据文件放在那里吗? – 2010-01-10 14:26:29

+2

只要您对密码进行了硬编码,根本就没有安全的解决方案。你将不得不让你的用户选择密码,那么你就不必将它存储在任何地方。 – Leo 2010-01-10 14:34:04

+0

@Mef:我不想寻求一个非常强大的解决方案。密码将由硬编码字符串动态生成,因此找到正确的密码并不容易。 – Isaac 2010-01-10 14:55:22

回答

1

您也可以尝试创建基于文件的遏制器TrueCrypt,装入它,然后将dBase文件放入装入的加密卷中。 TrueCrypt是免费的(在两种意义上),它可以从您的应用程序通过command line parameters访问(在启动之前挂载,在退出之前卸载)。

+0

我还没有测试过它,但似乎是正确的解决方案;) – Isaac 2010-07-22 15:39:46

0

根据您对数据库所做的操作,您可能只需解密实际需要的记录即可脱身。例如,你可以建立基于哈希码(而不是真实数据)的索引;这会减少将数据库查找到更小的一组数据。子集中的每条记录都必须解密,但这可能比解密整个数据库好很多。