Sql-Server

為什麼 MS SQL Server 使用 NTLM 身份驗證?

  • May 17, 2014

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 協議部落格中的這篇文章雖然過時了,但也說了同樣的話:

  1. 如果存在 SPN,則在通過 TCP/IP 進行遠端連接時使用 Kerberos。

  2. 如果存在 SPN,則在 XP 上建立本地 tcp 連接時使用 Kerberos。

3) 在 WIN 2K3 上進行本地連接時使用 NTLM。

  1. NTLM 用於 NP 連接。

  2. 如果未找到 SPN,則通過 TCP 連接使用 NTLM。

引用自:https://serverfault.com/questions/596659