2012-12-20 44 views
4

我們現在有很多機器上運行的.net應用程序。數據庫連接字符串存儲在每個設置XML文件。每個應用程序都會啓動並作爲第一步,從其設置文件中加載該字符串。它工作正常,但如果我們必須改變我們的登錄信息,那麼多年來找到我們存儲它的所有地方將是一場噩夢。而且,對於虛擬機,我們總是添加新機器,這將是理想的部署exes/dll,讓應用程序自動安全地獲取連接字符串。我在哪裏/如何存儲SQL Server連接字符串,以便它可以安全地用於遠程應用程序?

我認爲加密字符串並將其放在我們的網絡服務器上,以便遠程應用程序可以通過http和dns名稱獲取並解密它,但這是相當簡單的,因爲安全性對於這條信息非常重要,我需要要特別小心。

所以問題是,你如何安全decimenate連接字符串到遠程應用程序,所以啓動時,他們會知道到達數據庫?一旦他們可以這樣做,他們就可以從數據庫中的配置表中獲取額外的設置。

+1

如果客戶端使用用戶標識和密碼直接連接到SQL,那麼該信息不安全。考慮一個3層架構,其中客戶端通過WCF連接到業務/數據層,然後只有服務連接到SQL。 – Paparazzi

+0

不幸的是,重寫代碼層來添加圖層是不可能的。另外存在同樣的問題,客戶端如何安全地知道WCF服務器在哪裏,以及如何以透明的方式進行身份驗證? – powlette

+1

沒有相同的問題不存在。直接連接到SQL和像delete *和drop table這樣的命令與返回數據的WCF服務不同。 WCF有許多認證選項,併爲此而構建。 – Paparazzi

回答

3

你信任你係統的哪些部分?你必須相信100%的客戶端,因爲一旦他們擁有了連接字符串(他們必須擁有),他們可以將任何事情交給他們想要的數據庫。你也必須相信服務器。

因此,你似乎信任每個人。這使得保護系統變得簡單:無論您如何分配連接字符串,它都是安全的。

我在保存和分發密碼和連接字符串時看到了很多迷信。許多人不清楚他們是否被寄送和儲存。這是非理性的,因爲客戶端最終確實有它。這是不可能的。

所以我的建議是:做一個簡單的Web服務,它提供了以下API:

string GetConfigSetting(string name) 

客戶可以要求服務的連接字符串。這項服務非常簡單,它的界面可能永遠不會改變。

在這種情況下,加密很麻煩。客戶端應用程序可以很容易地反編譯來訪問任何解密程序。另外,客戶最終必須解密祕密。此時,控制客戶端機器的攻擊者可以清楚地讀取祕密。

+0

@Nattrass,感謝您加入我的答案!您的修改被拒絕了,但我手動添加了您的內容。 – usr

+0

+1爲'指出許多人有嚴重的精神上的突破 - 任何你這樣做的方式,最後,你必須信任客戶。 PointIntegrated安全至少可以修復來自其他不受信任機器的用戶,但最終,這裏的安全性是不可能的,所以即使嘗試它也不會實現很多。 – TomTom

+0

@TomTom集成安全性可能會阻止在明確的情況下看到一個祕密(不確定內部是如何工作的)。好點子。攻擊者仍然可以讓客戶端應用程序通過擺弄它的記憶來做他想做的事情(就像操縱大腦來控制它的想法一樣)。 – usr

相關問題