1

我在寫一個需要訪問Intranet上的SQL Server(v10.50.1600)數據庫的.NET 4.0應用程序。該數據庫不支持集成安全性/ SSPI登錄,僅支持用戶/密碼登錄。到目前爲止,我已經成功的最好的是:SQL Server連接的緩存密碼作爲散列

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder() 
{ 
    DataSource = Settings.SQLHostName, 
    Encrypt = true, 
    TrustServerCertificate = true, 
    UserID = Settings.SQLUser, 
    Password = "xxx", 
    InitialCatalog = "xxx" 
}; 

然而,這需要我存儲和處理在本地一個純文本的密碼,我想避免的事情。

有沒有辦法給ADO,LINQ或實體框架,等一個密碼哈希,而不是連接到SQL Server的密碼嗎?


而對於連接字符串加密存儲是聊勝於無,但最終需要在使用前進行解密。由於在WPF密碼框中沒有可綁定內容屬性背後的基本原理顯然是將明文密碼保存在內存中是一個壞主意,所以在使用前任何類型的連接字符串解密聽起來都不太合適。

理想的選擇是理解SQL服務器如何存儲和傳輸其密碼摘要;在本地應用相同的摘要算法;然後發送摘要而不是明文密碼。不幸的是,它似乎TDS7密碼編碼在此部分中描述:

http://dbaspot.com/ms-sqlserver/210567-tds7-8-login-packets.html

似乎不使用任何摘要算法的。所以我可能會被困在podiluska的答案下面。

回答

2

不,沒有。當您需要驗證傳入密碼時,密碼散列很有用。當您需要存儲密碼以對外部資源進行身份驗證時,這沒有用。

如果您的應用程序是一個安全的服務器上運行(例如一個ASP.NET應用程序),你可以對數據庫進行加密的證書,如使用Protected Configuration

但在客戶端應用程序,這不會有太大的幫助,除了勸阻隨意的瀏覽器,因爲如果你的應用程序可以解密配置文件,確定用戶就能過。

+0

嗯。什麼? http://en.wikipedia.org/wiki/Digest_access_authentication? – Reinderien