2012-12-11 122 views
6

我確定已經有很多討論,但如何在應用程序中存儲密碼? (我的意思不是用戶密碼存儲在數據庫中的表中,而是用於建立連接字符串的密碼)如何存儲數據庫密碼

我見過這樣的建議,例如將它存儲在一個平面文件(如xml文件)中,然後讀取它+在運行時解密它。如果這個應用程序在服務器上運行,這是一個非常好的選擇,但是如果應用程序將被部署到最終用戶的電腦上呢?即平面文件將被複制到用戶的電腦。這仍然是一個好習慣嗎? (我的直覺是'不')

我知道SecurityString的存在,但是我也在一篇文章中看到SecurityString也可以很容易地分解。

使用Windows 7附帶的密碼保險箱是一個好主意嗎?有沒有什麼好的例子,以編程方式使用它?我在msdn中看到過一個例子,但是首先它被標記爲'windows 8',其次當我下載文件並在visual studio 2012 EXPRESS中打開解決方案時,它未能打開。

任何建議,歡迎...非常感謝。

--update--

比方說,應用程序將在個人電腦上的Windows域內屈指可數運行。 (1)啓動時,應用程序將執行LDAP認證(活動目錄)。只有在認證成功後,應用程序纔會繼續執行,(2)應用程序可以連接到數據庫,使用用戶輸入查詢數據庫,這是db passwd進入播放以建立連接字符串的位置(不,這不是SQL SERVER數據庫,所以我不認爲使用Windows身份驗證的選項是可行的,除非使用商業插件)。

db駐留在同一個域中,並且已經設置爲允許一定範圍的IP地址,並且已啓用SSL。總之,在這個意義上它是相當安全的。唯一不安全的是如何存儲應用程序的db passwd。

引起我注意的是Mysql Workbench。它將保存數據庫連接,包括密碼 - 存儲在密碼保管庫中。這是mysql自己實現的一個密碼庫,我很好奇它是如何完成的。

+0

你在使用什麼數據庫,它託管在哪裏?它是否與客戶端位於同一個Windows域中? – Jodrell

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

可能的重複[如何安全地存儲數據庫登錄名和密碼在C#應用程序?](http://stackoverflow.com/questions/11685206/how-do-i-safely-store-database-login-and-password -in-ac-sharp-application) – Barmar

回答

5

如果應用程序要部署在對系統安全性沒有或很少控制的情況下,即外部用戶pc,則可能值得創建用戶登錄。根據此登錄驗證用戶身份,然後從相對安全的服務器使用您需要的任何憑據來提供數據。

這並不能保證安全,但如果您需要在將來某個時候更改密碼,或者某個用戶受到威脅,它將更容易維護。

8

無法爲您的用戶提供密碼並希望其保持安全。即使它隱藏在已編譯的應用程序中,並且使用單向散列進行散列,但已確定將會恢復它。

相反,你應該考慮你的安全架構。

如果您提供的是應用程序連接的服務,那麼您應該考慮在公共API中提供某種更健壯的身份驗證。

如果連接字符串用於連接到分佈式軟件的另一部分,則應該使最終用戶可以配置密碼並將其存儲在密鑰環或其他加密存儲中。

- 更新 -

看起來這可能是你在找什麼;

http://www.microsoft.com/indonesia/msdn/credmgmt.aspx

+0

感謝您的回覆!我更新了我的帖子,您的想法非常受歡迎。 – user1866880

相關問題