C#——Web.config中的Integrated Security=SSPI,
問題由來
之前在進行機房收費系統個人重構的時候,設定檔訪問資料庫,用的是這種方式,如:
string="server=localhost;database=pubs;uid=sa;password=123456"
這兩天在學習MVC的時候,在設定設定檔的時候發現,連結資料庫用的是另外一種方式:
connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MVCMovie-20141126170450;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Movies.mdf" providerName="System.Data.SqlClient"
重點就在Integrated Security=SSPI這一句,有什麼區別嗎??
資料庫的兩種身分識別驗證模式
Windows身分識別驗證模式
安裝時,若按預設操作(windows身分識別驗證模式),則sql server會將當前的windows賬戶及其密碼作為windows驗證模式的內嵌登入名稱(BUILTIN\Administrators)和密碼,從而在使用windows驗證模式時,不需要指定登入名稱和密碼。當然,在此也可以指定其他的windows賬戶作為windows驗證模式的內嵌登入名稱,按照提示修改即可。Windows驗證模式只允許以windows驗證模式進行串連,即便SSMS中可以選擇sql server模式,但會導致串連失敗。
混合身分識別驗證模式
如果安裝時選擇“混合模式”,則必須指定sa登入名稱的密碼,從而添加了一個sql server身分識別驗證的登入名稱。
兩種方式的不同
windows 身分識別驗證相對於混合模式更加安全,使用本串連模式時候,sql server僅根據使用者的windows許可權來進行身分識別驗證,我們稱為“信任連接”,但是在遠端連線的時候會因NTML驗證的緣故,無法登陸。
混合模式驗證就比較複雜,當本機使用者訪問sql時候採用windows身分識別驗證建立信任連接,當遠端使用者訪問時由於未通過windows認證,而進行sql server認證(使用sa的使用者也可以登入sql),建立“非信任連接”,從而使得遠端使用者也可以登入。
準確來說,混合身分識別驗證模式,也就是基於Windows身分識別驗證和SQL Server身份混合驗證。在這個模式中,系統會判斷帳號在Windows作業系統下是否可信,對於可信串連,系統直接採用Windows身分識別驗證機制,而非可信串連,這個串連不僅包括遠端使用者還包括本機使用者,SQL Server 會自動通過賬戶的存在性和密碼的匹配來進行驗證。
常見理解誤區
windows驗證模式和sql server驗證模式的登入名稱,區別在於許可權,這是錯誤的。這兩種驗證方式的區別,並不是在於許可權。並沒有誰的許可權高、誰的許可權低之說。不管是windows驗證方式的預設登入名稱、sql server方式的sa或其他自己添加的登入名稱,只要在sql server中為該登入名稱設定了相應資料庫及表的許可權,他就具有對於操作許可權。
Intergrated Security =SSPI
SSPI:Security Support Provider Interface(Microsoft安全支援提供器介面),定義得較全面的公用API,用來獲得驗證、資訊完整性、資訊隱私等整合安全服務,以及用於所有分布式應用程式協議的安全方面的服務。
===========================================
Integrated Security 身分識別驗證方式
當為False時,將在串連中指定使用者ID和密碼。
當為True時,將使用當前的Windows帳戶憑據進行身分識別驗證。
可識別的值為True、False、Yes、No以及與True等效的SSPI。
============================================
總結
為了保證資料庫的安全建議儘可能使用Windows驗證模式,Windows 身分識別驗證使用一系列加密訊息驗證 SQL Server 中的使用者。 使用 SQL Server 登入時,會通過網路傳遞 SQL Server 登入名和密碼,這樣會降低它們的安全性。