为什么 MS SQL Server 使用 NTLM 身份验证?

Rya*_*ies 13 kerberos sql-server spn sql-server-2008-r2

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
Run Code Online (Sandbox Code Playgroud)

然后我启动 SQL Server Management Studio 并因此连接到 SQL01:

在此处输入图片说明

然后我运行以下查询:

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid 
Run Code Online (Sandbox Code Playgroud)

结果是 NTLM。为什么结果不是 Kerberos?对于使用本地系统帐户,SPN 似乎是正确的。服务器不在集群中或使用 CNAME。

Rya*_*ies 17

这是因为我从托管 SQL Server 的同一台服务器本地连接到 SQL Server。当我从网络上的另一台机器连接时,使用的身份验证机制是 Kerberos,正如预期的那样。

如果在本地连接,SQL Server 将始终使用 NTLM。Kerberos 仅在远程连接时使用。

这篇来自SQL Server Protocols Blog 的帖子虽然过时了,但也说了同样的话:

1) 如果 SPN 存在,则在通过 TCP/IP 建立远程连接时使用 Kerberos。

2) 如果 SPN 存在,在 XP 上建立本地 tcp 连接时使用 Kerberos。

3) 在 WIN 2K3 上进行本地连接时使用 NTLM。

4) NTLM 用于 NP 连接。

5) 如果未找到 SPN,则通过 TCP 连接使用 NTLM。

  • 哇所有这些工作(研究)我一直在用 SPN 和 delegation 做几个小时,谢谢!:) (3认同)