如何通过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
相关产品推荐
相关产品推荐

