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.
解决方法
这是因为我从托管sql Server的同一台服务器本地连接到sql Server.当我从网络上的另一台计算机连接时,使用的身份验证机制是Kerberos,如预期的那样.
如果在本地连接,sql Server将始终使用NTLM. Kerberos仅在远程连接时使用.
来自SQL Server Protocols Blog的这篇帖子虽然陈述了同样的说法:
1) Kerberos is used when making remote connection over TCP/IP if SPN
presents.2) Kerberos is used when making local tcp connection on XP if SPN
presents.3) NTLM is used when making local connection on WIN 2K3.
4) NTLM is used over NP connection.
5) NTLM is used over TCP connection if not found SPN.