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

如何在SSMS审计日志采集时排除连接池复用的登录记录

SQL Server审计过滤连接池复用登录记录方案

根因说明

你当前日志暴增的核心原因是SUCCESSFUL_LOGIN_GROUP审计组会捕获连接池复用触发的sp_reset_connection对应的虚拟登录事件,这类事件是连接池归还连接后复用前的重置操作,不属于真实用户首次登录,没有审计价值,会产生大量冗余日志。

推荐方案:审计谓词直接在采集阶段过滤(支持SQL Server 2012及以上版本)

SQL Server 2012及更高版本支持为服务器审计配置谓词过滤规则,可以在事件写入审计日志前就排除连接池复用的记录,直接从源端降低日志产生量,不需要事后筛选。
操作步骤如下:

  1. 先禁用现有服务器审计(修改审计配置必须先禁用)
    可以在SSMS右键对应审计项选择「禁用」,也可以执行T-SQL:
    ALTER SERVER AUDIT [替换为你的审计名称] WITH (STATE = OFF);
    
  2. 为审计添加过滤规则
    连接池复用的登录事件对应action_id为LGI,且additional_information字段中存在<IsPooled>1</IsPooled>标记,我们只需要过滤这类记录即可,其余审计事件(失败登录、数据库身份验证等)全部保留。
    执行T-SQL添加规则:
    ALTER SERVER AUDIT [替换为你的审计名称]
    WHERE 
    (
        action_id <> 'LGI'
        OR 
        (
            action_id = 'LGI' 
            AND CONVERT(XML, additional_information).exist('//IsPooled[text()="1"]') = 0
        )
    );
    
    你也可以直接在SSMS审计属性的「谓词」选项卡中,输入上述WHERE子句后的规则内容。
  3. 重新启用审计
    SSMS右键审计项选择「启用」,或者执行T-SQL:
    ALTER SERVER AUDIT [替换为你的审计名称] WITH (STATE = ON);
    

低版本兼容方案(SQL Server 2008/2008R2)

如果你的SQL Server版本不支持审计谓词,可以调整审计组配置:

  • 保留FAILED_LOGIN_GROUP和SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP,这两个组不会被连接池复用事件触发
  • 移除SUCCESSFUL_LOGIN_GROUP,改用扩展事件(Extended Events)捕获真实登录事件,扩展事件本身性能损耗更低,也支持自定义过滤规则,同样可以排除连接池复用记录。

效果验证

配置完成后可以执行以下查询确认过滤效果:

SELECT 
    event_time,
    session_id,
    server_principal_name,
    additional_information
FROM sys.fn_get_audit_file('替换为你的审计日志路径\*.sqlaudit', DEFAULT, DEFAULT)
WHERE action_id = 'LGI';

检查返回结果的additional_information字段,确认没有<IsPooled>1</IsPooled>的记录即表示过滤生效。

内容的提问来源于stack exchange,提问作者Joe G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:45:08