背景: 我试图记录用户在数据库中查询的内容。我发现的一个选项是创建服务器和数据库审计规范。我不想包含 INSERT 语句,因为将为插入的每条记录记录这些语句,如果将大量数据添加到表中,这将是很多。
问题: 我们有一个 SQL 作业(在作业代理中),它使用 INSERT 查询将数据插入到表中。我希望这些日志不会出现在我们的 .sqlaudit 文件中,但确实出现了。甚至 INSERT 也不属于我们的数据库审计规范中的操作。我想知道它是否被触发做另一个动作?我列出了我包含的所有操作,但据我了解,它们都不会触发服务器在 .sqlaudit 文件中写入 INSERT 日志。可能是什么问题?
注意:我还使用查询工具执行了一个 INSERT 查询,它仍然会记录它。
添加到数据库审计规范的审计操作类型:
- DATABASE_OBJECT_ACCESS_GROUP
- SCHEMA_OBJECT_ACCESS_GROUP
- DATABASE_OBJECT_CHANGE_GROUP
- SCHEMA_OBJECT_CHANGE_GROUP
- 删除
- 执行
- 选择
- 更新
这是它在 .sqlaudit 文件中记录的语句:
INSERT [dbo].[table_name]([a],[b],[c],[d],[e],[f],[g],[h],[i],[j],[k],[l]) VALUES(@Param000004,@Param000005,@Param000006,@Param000007,@Param000008,@Param000009,@Param000010,@Param000011,@Param000012,@Param000013,@Param000014,@Param000015)
最佳方法是禁用对该
INSERT
表的审核,但由于您似乎遇到了特殊情况,因此这是处理它的一种方法:一旦通过连接到已审核的数据库并运行此查询
INSERT
来确保未启用审核:您可以过滤该审核以避免注册插入。创建服务器审计和服务器审计规范文档说:
过滤器页面可以通过 找到
right click the audit > properties
。如果您愿意,更改审计而不注册插入的 T-SQL 将是这样的:一些相关内容:
在 action_id / class_type 谓词上过滤 SQL Server 审计
sys.fn_get_audit_file (Transact-SQL)
如何分析和读取 SQL Server 审计信息