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

如何通过fn_get_audit_file区分SQL Server的顶级与非顶级审计事件?

关于SQL Server审计记录区分Top-Level/non-Top-Level操作的问题解答

一、ADDITIONAL_INFORMATION字段识别逻辑的假设验证

你的假设基本正确,补充细节如下:

  • 顶级操作(用户直接执行的语句):ADDITIONAL_INFORMATION字段为空,无嵌套执行上下文。
  • 非顶级操作(触发器、存储过程内部执行的语句):该字段包含嵌套上下文信息,其中frame nest_level的取值规律为:
    • 存储过程内部执行的语句,nest_level从1开始递增(若存储过程内部再调用其他存储过程,嵌套层级会继续上升)
    • 触发器执行的语句,nest_level通常从2开始(触发器本身由DML语句触发,属于第一层嵌套,内部操作是第二层)
      因此只要ADDITIONAL_INFORMATION非空且包含frame nest_level = 'X'(X≥1),即可判定为非顶级操作;反之则为顶级操作。

二、存储过程触发的INSERT记录中STATEMENT字段的显示逻辑

这个现象是合理的。SQL Server审计的是实际执行的底层数据修改语句,而非用户发起的存储过程调用命令。当执行EXEC P_EMP_INS时,审计引擎会追踪到存储过程内部真正对数据产生修改的INSERT语句;而用户的EXEC命令只是触发存储过程的入口,未直接修改数据,因此不会被审计(除非你配置了对EXECUTE操作的审计规则)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:22:11