Sql-Server
為什麼 MS SQL Server 使用 NTLM 身份驗證?
Windows 伺服器 2008 R2。
已安裝 SQL Server 2008 R2。
MSSQL 服務作為本地系統執行。
伺服器 FQDN 是 SQL01.domain.com。
SQL01 已加入名為 domain.com 的 Active Directory 域。
以下是setspn的輸出:
C:\> setspn -L sql01 ... MSSQLSvc/SQL01.domain.com:1433 MSSQLSvc/SQL01.domain.com WSMAN/SQL01.domain.com WSMAN/SQL01 TERMSRV/SQL01.domain.com TERMSRV/SQL01 RestrictedKrbHost/SQL01 RestrictedKrbHost/SQL01.domain.com HOST/SQL01.domain.com HOST/SQL01
然後我啟動 SQL Server Management studio 並連接到 SQL01:
然後我執行以下查詢:
SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid
結果是 NTLM。為什麼結果不是 Kerberos?SPN 似乎對於使用本地系統帳戶是正確的。伺服器不在集群中或使用 CNAME。
這是因為我從託管 SQL Server 的同一伺服器本地連接到 SQL Server。當我從網路上的另一台機器連接時,所使用的身份驗證機制是 Kerberos,正如預期的那樣。
如果在本地連接,SQL Server 將始終使用 NTLM。Kerberos 僅在遠端連接時使用。
SQL Server 協議部落格中的這篇文章雖然過時了,但也說了同樣的話:
如果存在 SPN,則在通過 TCP/IP 進行遠端連接時使用 Kerberos。
如果存在 SPN,則在 XP 上建立本地 tcp 連接時使用 Kerberos。
3) 在 WIN 2K3 上進行本地連接時使用 NTLM。
NTLM 用於 NP 連接。
如果未找到 SPN,則通過 TCP 連接使用 NTLM。