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

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

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。

相关内容