哪種身份驗證更適合 MS-SQL Server 2019:integrated security=SSPI vs uid=sa;pwd=xx |Windows 身份驗證與 sa 身份驗證
在我不同的 Web 應用程序中,我使用了兩種方法,但是,我想了解哪種方法更好:
1: server=localhost;database=x; integrated security=SSPI;persist security info=False; Trusted_Connection=Yes; 2: server=localhost;database=x;uid=sa;pwd=y;
在我的 Web 應用程序中,對於每個數據庫查詢,我打開一個連接,然後關閉該連接。
所以我幾乎使用正常樣式,例如:
using (SqlConnection connection = new SqlConnection(srConnectionString)) { connection.Open(); using (SqlDataAdapter DA = new SqlDataAdapter(strQuery, connection)) { DA.Fill(dSet); } }
您可以放心地假設在任何給定的秒內都有數百甚至數千個查詢。
我的問題:
2 種身份驗證方法之間在性能方面是否存在差異?
兩種身份驗證方法之間是否存在安全差異?
我不允許遠端連接到 SQL Server。所以只允許本地連接。
作業系統 Windows Server 2019
安全差異
您可以在Connecting Through Windows Authentication文件中找到它:
Windows 身份驗證是預設的身份驗證模式,比 SQL Server 身份驗證安全得多。Windows 身份驗證使用 Kerberos 安全協議,針對強密碼的複雜性驗證提供密碼策略實施,提供對帳戶鎖定的支持,並支持密碼過期。使用 Windows 身份驗證建立的連接有時稱為受信任連接,因為 SQL Server 信任 Windows 提供的憑據。
性能差異
這兩種方法之間現有的性能差異不足以建議您選擇 SQL Server 身份驗證而不是 Windows 身份驗證來獲得任何性能改進,但會損害安全性。因此,如果您可以選擇使用 Windows 身份驗證,請使用它。
正如JD的評論所說,儲存憑據不是最安全的選擇,甚至 Windows 身份驗證的性能劣勢也通過Dan Guzman提到的SQL Server 連接池得到緩解。他還補充說:
我在裸機上的測試實驗室中測試了 10K 連接打開/關閉請求。每個連接的平均毫秒數是:帶輪詢的 SQL 身份驗證:0.10838721,帶池的 Windows 身份驗證:0.12424151,不帶池的 SQL 身份驗證:2.66011692,不帶池的 Windows 身份驗證:3.2432628。考慮到查詢執行而不是連接可能是帳篷中的長桿。