启用Service Broker后tempdb自动创建XML Schema Collection的相关疑问
关于Service Broker引发tempdb审计警报的问题解答
嗨,不用太担心这个情况,我来帮你拆解清楚:
要不要担忧?
完全不需要!Service Broker在运行时,尤其是结合XML Schema Collection做消息验证的时候,SQL Server会自动在tempdb里创建一些内部临时对象——比如用于XML验证的临时结构、或者Service Broker内部依赖的队列/存储过程。这些操作是SQL Server系统级别的正常行为,而且是由sysadmin权限的系统进程执行的,不是外部非法操作,安全性上没有任何问题。
为什么会偶尔发生?
这种情况不是持续触发的,原因通常有两个:
- 只有当Service Broker需要处理带XML验证的消息、或者内部组件需要重新初始化时,才会触发这些
tempdb对象的创建/修改; - 一旦SQL Server重启,
tempdb里的所有临时对象都会被清空。之后第一次使用Service Broker处理消息时,系统会重新生成这些对象,这时候就会触发审计警报。
能不能只关闭这个警报,保留其他变更警报?
当然可以,你可以通过调整审计规则的过滤条件来实现:
- 首先找到你当前的审计规范(不管是服务器级还是数据库级),添加过滤逻辑排除
tempdb中由Service Broker系统操作产生的变更; - 具体来说,可以针对以下维度过滤:
- 排除数据库为
tempdb的特定操作类型(比如CREATE TYPE、CREATE PROCEDURE这类Service Broker可能用到的操作); - 排除操作主体是SQL Server系统账户(比如
NT SERVICE\MSSQLSERVER)的tempdb变更;
- 排除数据库为
- 举个SQL Server Audit的调整例子,你可以修改审计规范,添加
WHERE子句排除这类场景:
注意:这里的逻辑是排除这些特定条件的事件,具体语法要根据你的审计配置灵活调整,确保不会误过滤掉其他需要监控的ALTER SERVER AUDIT SPECIFICATION [Your_Audit_Spec_Name] WITH (WHERE database_name = N'tempdb' AND session_server_principal_name = N'NT SERVICE\MSSQLSERVER' AND action_id IN (N'CR', N'AL')); -- CR是创建,AL是修改,可根据实际警报调整tempdb异常变更。
内容的提问来源于stack exchange,提问作者Mariano G
相关产品推荐
相关产品推荐

