2013-08-27 69 views
1

我有一個應用程序,我應該連接到SQL Server。它受密碼保護。所以當我第一次啓動程序時,我創建了一個動態連接字符串並將其保存在app.config中。接下來我可以使用創建的connectionString。我GOOGLE了,並決定做以下事情:加密app.config中的connectionString並將密碼保存在我的代碼中。當我想下次連接數據庫時,我將解密connectionString,添加userId和密碼,並將新的connectionString連接到服務器。在關閉程序之前,我將從connectionString中刪除userId和密碼並重新加密。但我有一些問題:如何保護connectionString

1)這是一個很好的解決方案嗎?

2)當我開始計劃的第一次,我需要建立連接字符串,所以在某個地方的代碼應該是用戶名和密碼。如何處理這個問題?

+0

這難道不是最好創建一個設置? –

+0

@Ravshanjon你可以向我解釋一下嗎,因爲我是新來的安全問題 – Sasha

+0

你知道關於Settings.settings的一些事嗎?如果你不知道請看這個http://stackoverflow.com/questions/17379526/c-sharp-how-to-add-string-to-resources –

回答

0

創建數據庫用戶名,DBPASSWORD和其他數據庫條目在App.config鍵。對於DBPassword,使用在代碼中硬編碼的主密鑰對其進行加密(可能對稱)。這通常是足夠的。還有其他一些方法,例如使用密鑰存儲來存儲密鑰。

如果你不希望每次構建康涅狄格州字符串,創建應用程序配置條目保持整個連接字符串加密,並與主密鑰(我在這裏看到沒有價值)整個事情。

+0

你能提供一個例子嗎? – Sasha

+0

1。編寫測試程序以生成主密鑰:http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged(v=VS.100).aspx#Y2262 2.使用此鍵入測試程序來加密DBPassword。 3.將此加密DBPassword寫入app.config 4.將您在步驟1中生成的密鑰和硬編碼複製到應用程序源代碼中。 5.當應用程序運行並且您需要生成conn字符串時,使用硬編碼密鑰(步驟4)解密在app.config中找到的加密DBPassword(步驟3)。 – Vivek

+0

我現在就試試吧...... – Sasha

0

之前關閉程序時,我會從刪除的connectionString用戶ID和密碼,並再次對其進行加密

這並不是一個很好的解決方案。在程序終止時,您的數據應始終加密或至少丟失。如果您的用戶使用任務管理器(或簡單地崩潰)殺死您的程序,並且您依賴於您的程序將在退出時加密數據這一事實,則您的數據將保持未加密狀態。

你可以在加密你的用戶名和密碼的時候,所有的連接字符串。然後,任何時候你想連接,解密它,把它傳遞給所需的功能,並擺脫它。切勿以未加密的方式堅持它。

+0

並與用戶名和密碼該怎麼辦,這是硬編碼? – Sasha

+0

如果它們是硬編碼的,爲什麼不從一開始就把整個連接字符串放入配置中?當然加密。 – nvoigt

+0

我不知道SQL服務器的位置,所以當我第一次運行程序時,客戶選擇服務器,並使用這個服務器名稱,我創建connectionString – Sasha

1

據我所知,你動態地創建連接字符串。所以你也可以從代碼加密這部分。默認情況下,加密算法會使用你的機器密鑰來加密的部分,這裏是鏈接怎麼辦呢http://www.dotnetcurry.com/ShowArticle.aspx?ID=185

+0

我用這個方法。但def關注「機器鍵」部分。什麼是解決方法是編寫一個「後門」加密器(按鈕?)....將未加密的信息放置在配置文件中,然後運行「後門」加密代碼....... – granadaCoder