MSSQL 2012-19 Server Audit无法删除 20-30分钟后自动重建
问题根因
这个审计自动重建的触发源不在SQL Server内部的用户自定义对象范畴,属于外部安全合规机制的强制修复动作,核心特征完全匹配基线巡检逻辑:
- 执行账号为SQL服务自身运行账号,20-30分钟的固定重建周期,符合企业安全组件、组策略的常规巡检间隔
- 重建语句为固定模板:带
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED前缀,筛选条件中action_id=1397311308对应成功登录事件、action_id=1179207500对应失败登录事件,是SQL登录审计的标准合规配置 - 你之前排查的触发器、SQL代理作业、存储过程、数据库级审计规范都属于SQL内部用户可配置对象,而该重建动作是外部进程通过SMO/WMI等管理接口向SQL发送的执行指令,因此在SQL内部元数据中找不到关联配置,仅靠Profiler追踪SQL内部执行流无法定位到外部触发源。
常见触发源包括:域/本地组策略的SQL安全基线规则、服务器安装的EDR/主机安全Agent、数据库合规扫描工具,这类组件会定时校验SQL是否开启了登录审计,一旦检测到审计被删除/关闭,就会自动调用接口重建符合基线要求的审计配置,输出到系统安全日志也是合规要求的默认配置。
彻底处理方案
- 优先排查外部触发源
- 联系服务器运维、安全团队,检查当前服务器绑定的域组策略、本地安全策略中是否存在「强制SQL Server开启登录成功/失败审计」的基线规则,确认该规则是否为合规强制要求。
- 排查服务器上安装的EDR、数据库审计插件、合规扫描工具,找到SQL配置巡检相关的功能项,关闭登录审计配置的自动修复逻辑,或者将巡检匹配的审计规则修改为你自定义的配置。
- 验证方式:在变更窗口内临时移除SQL服务运行账号的「生成安全审计」本地权限,之后删除审计,如果不再自动重建即可确认是外部安全机制触发。
- 合规场景适配方案(推荐,不触发基线修复)
如果企业合规要求必须开启登录审计,不要反复删除审计,直接修改现有审计的输出目标,将日志从系统安全日志改到独立的磁盘目录存储,避免高频写入覆写系统安全日志,参考代码如下:
USE [master] GO -- 禁用当前运行的审计 ALTER SERVER AUDIT [Stupid_Audit] WITH (STATE = OFF) GO -- 修改审计输出到独立文件目录,配置滚动策略,不写入系统安全日志 ALTER SERVER AUDIT [Stupid_Audit] TO FILE ( FILEPATH = 'D:\SQL_Audit_Logs\', -- 替换为实际的独立磁盘目录 MAXSIZE = 1024 MB, MAX_ROLLOVER_FILES = 30 -- 保留30个滚动日志文件,可根据磁盘容量调整 ) WHERE [action_id] = (1397311308) AND NOT [additional_information] LIKE '%<pooled_connection>1</pooled_connection>%' OR [action_id] = (1179207500) AND [additional_information] LIKE '%<error>0x00004818</error>%' GO -- 重新启用审计 ALTER SERVER AUDIT [Stupid_Audit] WITH (STATE = ON) GO
注意:只要外部安全基线的自动修复逻辑没有关闭,在SQL层面反复执行删除审计的操作没有意义,每次巡检都会触发重建。
内容的提问来源于stack exchange,提问作者Bad_sa_18456
相关产品推荐
相关产品推荐

