如何在 SQL Server 的服务器审计上添加多个过滤器?
Posted
技术标签:
【中文标题】如何在 SQL Server 的服务器审计上添加多个过滤器?【英文标题】:How to add multiple filters on Server Audit of SQL Server? 【发布时间】:2019-04-06 04:17:20 【问题描述】:我想过滤 SQL 审计,以便我不想捕获由某些用户和某些架构触发的事件。在现有的服务器审核之一中,我发现过滤谓词为
(
[schema_name]<>'sys' AND
[server_principal_name]<>'SILVER\Distributor' AND
[server_principal_name]<>'SILVER\Replicator' AND
[server_principal_name]<>'SILVER\Merger' AND
[server_principal_name]<>'SILVER\Collecter' AND
[server_principal_name]<>'SILVER\Reporter' AND
[server_principal_name]<>'SILVER\Starter' AND
)
我认为应该是OR
而不是AND
。根据 TSQL,看起来上述条件永远不会满足。 AND
表示必须满足所有条件。我确实使用函数sys.fn_get_audit_file
阅读了日志,并且没有看到属于上述受限用户和架构的任何记录。看起来上面的谓词虽然有效。
AND
在这里充当规则的分隔符吗?
你能解释一下吗?
【问题讨论】:
如果你喜欢or
,那么谓词应该是NOT ([schema_name] = 'sys' OR [server_principal_name] = 'SILVER\Distributor' /*more*/)
对不起@AlexKudryashev。我不明白。我不想从sys
架构中捕获,也不想从以上所有用户那里捕获事件。
谓词 a<>b and c<>d
和 not (a=b or c=d)
是等价的。
@AlexKudryashev 你说得这么清楚。您可以将其发布为答案吗?
【参考方案1】:
你可以改变你的谓词
(
[schema_name]<>'sys' AND
[server_principal_name]<>'SILVER\Distributor' AND
[server_principal_name]<>'SILVER\Replicator' AND
[server_principal_name]<>'SILVER\Merger' AND
[server_principal_name]<>'SILVER\Collecter' AND
[server_principal_name]<>'SILVER\Reporter' AND
[server_principal_name]<>'SILVER\Starter' AND
)
使用or
的等效项
NOT (
[schema_name] = 'sys' OR
[server_principal_name] = 'SILVER\Distributor' OR
[server_principal_name] = 'SILVER\Replicator' OR
[server_principal_name] = 'SILVER\Merger' OR
[server_principal_name] = 'SILVER\Collecter' OR
[server_principal_name] = 'SILVER\Reporter' OR
[server_principal_name] = 'SILVER\Starter'
)
甚至更好的可读性
[schema_name]<>'sys' AND
[server_principal_name] NOT IN (
'SILVER\Distributor',
'SILVER\Replicator',
'SILVER\Merger',
'SILVER\Collecter',
'SILVER\Reporter',
'SILVER\Starter'
)
【讨论】:
在 SQL 2012 中使用 NOT IN 时出现语法错误。以上是关于如何在 SQL Server 的服务器审计上添加多个过滤器?的主要内容,如果未能解决你的问题,请参考以下文章