2010-01-10 94 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

根據您對數據庫所做的操作,您可能只需解密實際需要的記錄即可脫身。例如,你可以建立基於哈希碼(而不是真實數據)的索引;這會減少將數據庫查找到更小的一組數據。子集中的每條記錄都必須解密,但這可能比解密整個數據庫好很多。