
Windows Server 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。
答案1
這是因為我是從託管 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。
4) NTLM 透過 NP 連接使用。
5) 如果找不到 SPN,則透過 TCP 連線使用 NTLM。