sql-server – 为什么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.

解决方法

这是因为我从托管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.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...