SQL Server链接服务器登录失败(错误18456)及通信故障求助
解决SQL Server链接服务器通信故障与登录失败问题
核心问题分析
当前遇到的NT AUTHORITY\ANONYMOUS LOGON登录失败(Error 18456)是链接测试失败的直接原因,而通信故障(Error 16389、10004)和msdb恢复提示可能关联到服务器身份验证、数据库状态或网络配置问题。以下是分步修复方案:
一、修复身份验证与登录失败问题
1. 确认Kerberos SPN配置
跨服务器使用当前安全上下文登录依赖Kerberos身份验证,需确保两台SQL Server的服务主体名称(SPN)正确注册:
- 运行管理员权限的命令提示符,执行以下命令检查SPN:
需确认输出包含setspn -L <SQL服务账户名>MSSQLSvc/<服务器完整FQDN>:<端口>和MSSQLSvc/<服务器NetBIOS名>:<端口>两种格式的SPN。 - 若缺失SPN,执行以下命令添加(替换占位符):
setspn -A MSSQLSvc/<服务器完整FQDN>:<端口> <SQL服务账户名> setspn -A MSSQLSvc/<服务器NetBIOS名>:<端口> <SQL服务账户名> - 检查是否有重复注册的SPN,避免冲突:
setspn -X
2. 调整本地安全策略权限
- 打开本地安全策略,导航至
本地策略 -> 用户权限分配:- 确保SQL服务账户拥有**“允许计算机和用户账户被信任以便进行委派”**权限(若使用约束委派,需指定委派到目标SQL Server服务)。
- 确认**“从网络访问此计算机”权限包含域用户组和SQL服务账户,“拒绝从网络访问此计算机”**列表中无相关账户。
二、解决通信故障与msdb恢复问题
1. 验证并修复msdb数据库状态
- 在目标SQL Server执行以下查询,确认msdb状态:
若状态不为SELECT name, state_desc FROM sys.databases WHERE name = 'msdb';ONLINE,执行以下操作恢复:-- 切换到单用户模式 ALTER DATABASE msdb SET SINGLE_USER WITH ROLLBACK IMMEDIATE; -- 恢复联机 ALTER DATABASE msdb SET ONLINE; -- 切换回多用户模式 ALTER DATABASE msdb SET MULTI_USER; - 查看目标服务器的SQL Server错误日志,定位msdb恢复失败的具体原因(如磁盘空间不足、日志文件损坏),针对性清理磁盘或修复日志。
2. 排查网络与防火墙配置
- 测试两台服务器的网络连通性:
- ping对方服务器的完整FQDN,确保DNS解析正常。
- 使用telnet测试SQL端口(默认1433)和DTC端口(默认135及动态端口范围)是否开放:
telnet <目标服务器FQDN> 1433 telnet <目标服务器FQDN> 135
- 配置Windows防火墙:
- 允许SQL Server服务(
sqlservr.exe)、DTC服务(msdtc.exe)的入站和出站流量。 - 若使用第三方防火墙,需同步开放对应端口和服务。
- 允许SQL Server服务(
3. 重置并重新配置DTC
- 卸载并重新安装DTC服务(管理员权限命令提示符):
net stop msdtc msdtc -uninstall msdtc -install net start msdtc - 重新配置Component Service中的Local DTC属性:
- 打开组件服务,导航至
计算机 -> 我的电脑 -> 分布式事务协调器 -> 本地DTC,右键选择属性。 - 切换到安全选项卡,勾选:网络DTC访问、允许远程客户端、允许远程管理、允许入站、允许出站。
- 启用XA事务,身份验证级别选择“无要求”或“相互验证”,保存设置后重启DTC服务。
- 打开组件服务,导航至
三、验证链接服务器配置
- 重建链接服务器时,确保安全选项卡选择**“使用登录名的当前安全上下文”**,并清空“本地服务器登录到远程服务器的映射”列表(避免冲突规则)。
- 执行以下命令测试链接:
根据返回的错误信息进一步调整配置。EXEC sp_testlinkedserver '<你的链接服务器名>'
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

