SQL Server出现‘NT AUTHORITY\ANONYMOUS LOGON’登录失败,如何追踪问题账户?
定位链接服务器匿名登录失败的跟踪配置与排查方案
一、扩展事件跟踪配置(推荐,低性能开销)
1. 选择跟踪事件
启用以下事件以精准捕获相关行为:
sqlserver.audit_login_failed:捕获所有登录失败的安全审计事件sqlserver.remote_login_failed:针对远程登录(含链接服务器)的失败事件,场景匹配度更高sqlserver.linked_server_connection:记录链接服务器的连接尝试,即使失败也能保留上下文信息
2. 配置筛选器
添加以下筛选条件缩小跟踪范围:
server_name= 服务器A的实例名称(仅跟踪本地服务器事件)client_hostname= 服务器B的主机名(过滤来自服务器B的连接)target_login_name='NT AUTHORITY\ANONYMOUS LOGON'(仅捕获匿名登录失败的事件)error_number= 18456(SQL Server登录失败的标准错误代码)
3. 捕获关键字段
需收集这些字段以定位发起连接的真实主体:
client_app_name:发起连接的应用程序标识nt_username:发起连接的Windows账户(模拟场景下可能显示真实账户)session_server_principal_name:会话的原始登录账户(可穿透代理/模拟获取真实发起方)connection_id:可关联其他系统视图排查会话详情
二、SQL Server Profiler跟踪配置(快速上手,注意性能影响)
1. 选择事件类别
勾选以下事件:
- Security Audit →
Login Failed - Errors and Warnings →
ErrorLog(捕获写入SQL日志的错误条目) - Stored Procedures →
RPC:Starting(若连接通过存储过程调用链接服务器)
2. 设置筛选器
在筛选器中添加:
HostName= 服务器B的主机名LoginName=NT AUTHORITY\ANONYMOUS LOGONErrorNumber= 18456
3. 捕获列
确保选中以下列:
- ApplicationName、HostName、LoginName、NTUserName
- SessionLoginName、ClientProcessID、SPID
三、深入排查方向
服务器B的隐藏定时任务
- 检查Windows任务计划(非仅SQL Server Agent作业),是否存在每2分钟执行的脚本/程序,尝试连接服务器A的链接服务器
- 排查服务器B上的Windows服务,确认是否有服务账户定期发起SQL连接(如监控工具、备份代理)
链接服务器依赖对象
- 在服务器A上查询
sys.sql_expression_dependencies,找出所有依赖该链接服务器的视图、存储过程、函数,检查是否有定时执行的作业触发这些对象 - 在错误发生的精确时间点,查询
sys.dm_exec_requests和sys.dm_exec_sessions,捕获活跃会话的上下文信息
- 在服务器A上查询
Kerberos委托验证
- 确认服务器B的计算机账户是否拥有针对服务器A的Kerberos委托权限(若为计算机账户发起连接)
- 检查发起连接的账户是否被授予
Impersonate权限,或是否存在委托限制
应用后台线程排查
- 确认是否有应用后台服务、定时任务(如缓存刷新、数据同步)每2分钟执行,且使用链接服务器时身份验证配置错误
系统级进程监控
- 在服务器B上使用Process Monitor(ProcMon),过滤目标为服务器A的SQL连接请求,查看发起进程的账户与路径
内容的提问来源于stack exchange,提问作者sqllover2020
相关产品推荐
相关产品推荐

