如何在 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&lt;&gt;b and c&lt;&gt;dnot (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 的服务器审计上添加多个过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 审计功能-记录所有的操作记录

等级保护项目SQL?Server审计方案

SQL Server 查看审计

Oracle Sql:如何在 sql 中添加多个子总计?

SQL server 表填充源

审计 SQL Server - 谁在啥时候改变啥? SOX 合规性