2009-07-07 120 views
2

我意識到這個問題的答案可能很明顯(如果對我來說有點不方便),但我希望有人會有一個巧妙的解決方案。源代碼公開後的安全性

我在空閒時間慢慢地構建應用程序,希望在工作中有用。這是一個簡單的跟蹤應用程序分配同行評審。基本上,我只是想教自己一些C#。

我的問題是,因爲我真的不能安裝任何東西,我不能使用我自己的網站(這兩個原因 - 1)國防部可能不會允許它,2)我希望這是一個桌面(WinForms)項目,而不是Web),我使用Jet(如Access)作爲數據存儲。

我需要一種方法來保護數據庫免受窺探,因爲有些事情我真的只想讓管理員級用戶(如團隊領導)訪問。我基本上決定設置一個數據庫密碼。安裝時會選取密碼,用於保護數據庫,然後加密以便應用程序接收,解密並用於打開數據庫連接。

我的問題是,我希望這個代碼有點公開。我最終希望將我的代碼發佈到我的網站上,並詢問StackOverflow以及可能的編程subReddit以獲得一些快速評論和見解。把它想象成一個可憐的男士輔導計劃。爲了維護,特別是在我離開這份工作之後,我的同事最終可以獲得該來源。如果他們有權訪問加密的「密鑰文件」和來源,他們將能夠確定數據庫密碼。

有沒有什麼方法可以編碼,即使有文件和代碼,我的同事也無法進入數據庫?我不假設,但值得提問。

如果沒有辦法做到這一點,我想我的第二個選擇是當我把它放在我的網站上時改變加密(改變加密等同於一個散列 - 四 - 發佈到不同的東西),和在密碼保護的rar文件中提供源代碼,僅給管理員提供密碼。

任何想法?

回答

3

沒有「Security Through Obscurity」。如果您始終認爲所有代碼都是公開的,那麼您可以更好地實施實際上安全的事情。如果你「隱藏」密碼或「隱藏」密碼,你犯了一個可怕的錯誤。

以下是如何破解Jet上的密碼。http://lastbit.com/access/

安全性是一個深刻的問題。您不能在文件中輸入密碼。你可以在文件中拋出密碼散列。

你有兩個互補的問題。

  • 認證。誰是用戶?密碼和密碼可以告訴你:誰在連接。

  • 授權。這個用戶可以做什麼?這就是爲什麼你有責任分離。設置密碼的安全官員和必須提供密碼並且可以訪問數據的用戶需要是獨立的人員。


編輯

「的密碼將在安裝時採摘,用於保護數據庫,然後爲應用程序加密的回暖,解密,並用它來打開數據庫連接「。不起作用。密碼文件的加密密鑰在應用程序中可用,使其全部打開。

「有什麼方法可以對此進行編碼,即使使用文件和代碼,我的同事也無法進入數據庫?」是。這很容易。使用密碼散列,而不是加密密碼。

「只給管理員提供密碼」錯誤。如果你把密碼給某人,那麼許多人知道密碼。這打破了認證。人們必須設置自己的密碼,否則他們不會被認證。


編輯

怎麼辦?

  1. 定義 - 準確 - 您的身份驗證和授權的需求。不要選擇技術。定義用戶及其用例。定義每類用戶擁有的授權。不要選擇這項技術。定義訪問權限。

    你沒有提到你的問題中真正重要的事情。例如,你不會提到你是否有多個用戶。您只需提到特定技術(JET)和特定技術(DB級密碼)。您不會提及這些用戶是否共享數據庫。

    如果您有多個用戶使用共享數據庫,那麼最好將此數據庫放在某個服務器上。不在某個桌面上。不是特定桌面的一部分。不分散在多個桌面上。

    如果您沒有共享數據庫 - 如果每個用戶都有一個私有數據庫 - 那麼您可以單獨安裝普通的Windows安全性。爲什麼掩蓋任何東西?

  2. 選擇一個架構。

    • 您有Active Directory。這給你用戶名和安全散列密碼。利用這個。

    • SQL/Server可以使用AD進行用戶驗證和授權。如果人們不分享他們的密碼,這是相當安全的。

  3. 建立一些工作。

    • AD組。

    • SQL/Server中的中央數據庫。

    • 管理程序用於創建用戶,重置密碼,將用戶從組移動到組等。這並不難。它在AD文檔中。任何Windows系統管理員都可以提供有關他們如何喜歡的指導。記錄程序。它們是安全模型的一部分。

    • Winforms應用程序可以安裝在桌面上。用戶將利用他們現有的Windows憑據。登錄到Windows意味着您的winforms應用程序可以將它們登錄到數據庫中,然後離開它們。牢固。

    • 桌面組件的MSI。由於沒有「主數據庫密碼」或其他垃圾,他們只是安裝一個簡單的應用程序。他們配置中央數據庫服務器的位置。他們用他們現有的Windows憑據登錄。

0

不幸的是,訪問安全性並不是那麼好。即使你的連接證書不在你的來源中,如果他們真的想要,有人進來也只是時間問題。

訪問最安全的選項是將文件存儲在具有良好文件共享權限設置的服務器上,並使用ODBC進行訪問。 - 雖然不能真正解決您的分銷問題。

爲什麼不看看那裏的一些替代品? SQL Compact更安全,並提供了非常類似的編程體驗。如果你可以負擔得起「較重」,那麼SQL Express非常出色。還有很多很好的開源產品。火鳥可能適合你。

希望這有助於..

編輯:美國洛特是點就在這裏。最終,如果人們有權訪問您的代碼和數據庫,並知道如何處理它們,他們將能夠進入。

+0

如果你能夠去與SQL Express的選項,這將提供良好的控制哪些用戶可以看到哪些數據。只需保持sa密碼靠近你的胸部;如果你繼續前進,那麼你可以將密碼留給後繼者,以便他們可以繼續控制數據庫。 – 2009-07-07 01:26:34

+0

當我安裝SQL Server Compact時,它具有IIS的先決條件。我真的沒有看得更遠。它是如何工作的基本概要? – AgentConundrum 2009-07-07 01:49:44