Как добавить несколько фильтров на аудит сервера SQL Server? - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу отфильтровать аудиты 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 здесь действующим как разделитель правил.

Не могли бы вы объяснить это?

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете изменить свой предикат

(
[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' 
)
...