2010-06-29 86 views
0

問候!保護用戶PC上的應用程序數據庫訪問

我需要部署一個緊湊的數據庫與我正在處理的應用程序。數據庫充當了應用程序已經看到的數據的緩存,並且數據永遠不會改變,所以緩存的值永遠不會過時。我選擇了SQLite,並且正在用C#編寫。

我想保護數據庫文件,以便用戶不能輕鬆訪問或編輯它們 - 只能訪問我的應用程序。現在,一種選擇是使用密碼保護,除了使用Reflector之類的工具,人們可以輕鬆查看原始版本的源代碼,並檢查密碼/每個文件如何生成並複製它。

有關於如何實現這個結果或什麼關閉的建議嗎?過去有沒有人做過這樣的事情?

謝謝!

回答

4

默默無聞的安全性。

如果您的應用可以對其進行解密,那麼您的用戶也可以這樣做。

如果你想保持它的安全,你必須爲自己保留它。您最好的選擇是將數據庫存儲在服務器上,並通過Web服務使其可用。在您自己的服務器上執行訪問控制檢查,以便應用程序只能訪問要查看的數據庫部分。

+0

+1 - 確切地說,如果沒有別的,他們可以將它掛接到調試器並查找(未加密的)過程的記憶。 – 2010-06-29 21:08:48

+0

這就是我所害怕的。雖然我會認爲像這樣的東西會很普遍,以至於存在一個標準的解決方案。在服務器上擁有數據庫是沒有意義的,因爲它充當緩存來自用戶的特定請求,並且在那裏純粹是爲了表現的好處。 – 2010-06-29 21:13:53

+0

@ filip-fku:如果有真正的解決方案,DRM傢伙就會使用它。這實質上是經典的[a-hole](http://en.wikipedia.org/wiki/Analog_hole)問題。 – 2010-06-29 21:16:02

1

作爲黃金法則,我沒有一個明確的答案(在發佈部署期間模糊你的代碼,使密碼變得很長):如果他們有物理訪問可執行文件(替代機器/汽車/門)他們可以進入,如果他們想(並有技能)。

你所能做的就是讓他們變得困難。

0

這個區域不是我的專長,但我可以建議的一件事就是想想你實際發送了什麼數據,並確定是否有任何方法可以限制任何更敏感的數據傳輸到客戶擺在首位。

如果您擔心的是將ID號碼帳號等內容發送給客戶端,那麼也許您可以將這些值轉換爲客戶端版本,這在您的應用程序之外是毫無意義的。您的服務器可能有一個表,其中包含真實值和僅客戶端值之間的轉換。

比方說,你已經存儲在服務器的數據庫這個表(而不是客戶端數據庫!)

RealAccountNumber ClientOnlyAccountNumber 
981723    ABC123 
129847    BCD234 
923857    CDE345 
... 

所以客戶端只能看到帳號在ClientOnlyAccountNumber列,當一個客戶端發送來的請求服務器的帳戶「ABC123」執行的操作,服務器知道將其轉換爲帳號981723.

+0

不同的問題的好主意! :)我所關心的是鎖定用戶訪問本地文件數據庫。 – 2010-06-29 21:31:05

相關問題