You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2014到2016链接服务器匿名登录失败问题求助

解决链接服务器"NT AUTHORITY\ANONYMOUS LOGON"登录失败的问题

嘿,这个问题我之前碰过好多次,几乎可以肯定是Kerberos身份验证的配置缺失搞的鬼。你的Windows账户虽然在两台服务器都有sysadmin权限,但跨服务器传递凭据的时候,SQL Server需要正确的SPN(服务主体名称)来支持Kerberos身份验证,不然就会出现身份验证降级,最后直接变成匿名登录失败。

下面给你一步步的排查和解决方法,跟着来应该能搞定:

1. 先检查SPN有没有正确注册

SPN是Kerberos用来识别SQL Server服务的标识,没有它的话,跨服务器的身份凭据根本传不过去。

  • 找域管理员要权限,打开命令提示符(必须用域管理员权限运行),执行这条命令查看Server B上SQL Server服务账户的SPN:

    setspn -L <SQLServerServiceAccount>
    

    把<SQLServerServiceAccount>换成运行Server B上SQL Server服务的那个账户(比如域账户DOMAIN\SQLServiceAcct)。

  • 正常情况下,你应该能看到类似这样的条目:

    MSSQLSvc/ServerB.yourdomain.com:1433
    MSSQLSvc/ServerB:1433
    

    如果看不到,那就说明SPN没注册,得手动加。

2. 手动注册SPN(如果上面查出来缺失)

还是用域管理员权限打开命令提示符,执行下面两条命令:

setspn -A MSSQLSvc/ServerB.yourdomain.com:1433 <SQLServerServiceAccount>
setspn -A MSSQLSvc/ServerB:1433 <SQLServerServiceAccount>

替换ServerB.yourdomain.com为Server B的完整域名,1433是SQL Server默认端口(如果你的实例用了非默认端口,记得改成对应的端口号),<SQLServerServiceAccount>还是Server B上SQL Server的服务账户。

3. 验证Kerberos是否真的生效了

在Server A上打开SSMS,执行这条查询,看看连接到Server B时是不是用了Kerberos:

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID;

如果返回KERBEROS,那身份验证就正常了;要是返回NTLM,说明还有问题,得接着查。

4. 检查本地安全策略(SPN配置好还不行的话)

有时候SPN对了,但本地安全策略不让传递凭据:

  • 在Server A上,打开本地安全策略(输入secpol.msc就行),找到本地策略 -> 用户权限分配 -> 允许计算机和用户账户被信任以便进行委派,确保你的Windows账户和SQL Server服务账户都在这个列表里。
  • 同样,Server B上也要做一样的检查。

5. 确认链接服务器的安全配置没搞错

你创建链接服务器的时候,安全选项一定要设对:

  • 打开链接服务器的属性,切到安全性选项卡,选使用登录用户的安全上下文(英文是"Be made using the login's current security context"),这个选项才会把你的Windows凭据传递给Server B。

额外提醒

  • 如果是命名实例,SPN要改成MSSQLSvc/ServerB.yourdomain.com:INSTANCENAME或者对应端口的格式,别搞错了。
  • 因为你没有操作系统权限,上面的SPN注册和安全策略修改得找服务器管理员或者域管理员帮忙,这些操作都需要管理员权限才行。

内容的提问来源于stack exchange,提问作者Conrad S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:07:43