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 协议博客中的这篇文章虽然过时了,但也说了同样的话: