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

Azure SQL审计文件sys.fn_get_audit_file无法获取受影响行数的问题排查

解决Azure SQL Server/MI审计日志中response_rows始终为0的问题

常见原因及修复步骤

1. 审计策略缺少关键操作组

默认审计策略可能没包含能捕获行计数的操作组,必须启用以下组才能让response_rows正确统计:

  • DATABASE_OBJECT_ACCESS_GROUP:捕获表、视图等对象的SELECT/INSERT/UPDATE/DELETE操作的行计数
  • 细粒度语句组(可选):SELECT_STATEMENT_GROUP、INSERT_STATEMENT_GROUP、UPDATE_STATEMENT_GROUP、DELETE_STATEMENT_GROUP,针对特定语句类型精准捕获
  • 如果涉及存储过程内部操作,还要加EXECUTE_STATEMENT_GROUP,否则只会捕获存储过程调用,不会统计内部操作的行数

去Azure门户里调整审计策略,把这些操作组加进去,不要只保留默认的少数组。

2. 操作类型的统计限制

  • SELECT语句的response_rows只有当查询返回实际结果集时才会有值,比如SELECT * FROM Table会统计行数,但SELECT COUNT(*) FROM Table或者存储过程里不返回结果的SELECT不会统计
  • 批量操作(比如INSERT INTO ... SELECT ...)需要确保审计能捕获到具体的执行语句,而不是只记录外层语句,这时候依赖DATABASE_OBJECT_ACCESS_GROUP的配置

3. 存储目标的兼容性问题

如果审计日志存在Azure Blob存储,偶尔会出现字段捕获不全的情况,可以临时切换到Azure Log Analytics测试,看response_rows是否正常。如果Log Analytics里正常,说明Blob存储的配置或权限有问题,检查存储账户的访问策略是否允许审计服务写入和读取日志。

4. 实例版本bug

旧版本的Azure SQL MI或逻辑服务器可能存在response_rows统计的bug,执行SELECT @@VERSION确认实例版本,确保是SQL Server 2019兼容级别或更高,必要时提交升级请求。

验证测试

执行以下测试语句,然后查询审计日志:

-- 创建测试表(如果没有)
CREATE TABLE TestAuditRows (ID INT, Value VARCHAR(50));

-- 执行测试操作
INSERT INTO TestAuditRows VALUES (1, 'A'), (2, 'B');
SELECT * FROM TestAuditRows;
UPDATE TestAuditRows SET Value = 'Updated' WHERE ID = 1;
DELETE FROM TestAuditRows WHERE ID = 2;

-- 查询审计日志
SELECT 
    event_time,
    action_id,
    statement,
    response_rows
FROM sys.fn_get_audit_file('https://your-storage-account.blob.core.windows.net/your-audit-container/...', DEFAULT, DEFAULT)
WHERE statement LIKE '%TestAuditRows%'
ORDER BY event_time DESC;

如果测试操作的response_rows还是0,优先检查审计策略的操作组是否配置正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:38:36