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。