SQL Server 审计规范 - 按除一名用户之外的所有用户过滤 DML

RTh*_*mas 6 sql-server audit sql-server-2012

我正在设置数据库审计。我想捕获除与应用程序相关的服务帐户之外的数据库用户发出的任何 DML 更改。

简而言之,这是为了向我们的外部审计员证明没有用户在应用程序之外篡改数据。

以下脚本设置了对所有原则通用的 DML 审计。

CREATE DATABASE AUDIT SPECIFICATION [OurDatabaseAuditSpec]
FOR SERVER AUDIT [OurAudit]
ADD (DELETE ON OBJECT::[dbo].[SensitiveData] BY [public]),
ADD (INSERT ON OBJECT::[dbo].[SensitiveData] BY [public]),
ADD (UPDATE ON OBJECT::[dbo].[SensitiveData] BY [public])
WITH (STATE = ON)
GO
Run Code Online (Sandbox Code Playgroud)

我如何修改此审计规范以捕获除应用程序服务帐户正在执行的操作之外的所有内容?

我仅限于单独指定每个原则还是可以指定一个例外?通过 BOL 阅读似乎我只能列出要审核的原则 - 而不是要忽略的原则。

Aar*_*and 5

您不能在审核规范级别执行此操作,但可以在服务器审核级别执行此操作。因此,如果此审核也执行其他操作,并且您不想通过登录过滤掉这些事件,则需要创建单独的审核。假设您想通过此服务帐户过滤掉任何类型的所有活动,您可以执行以下操作:

ALTER SERVER AUDIT OurAudit WITH (STATE = OFF);
GO
ALTER SERVER AUDIT OurAudit WHERE server_principal_name <> N'service account name';
GO
ALTER SERVER AUDIT OurAudit WITH (STATE = ON);
GO
Run Code Online (Sandbox Code Playgroud)

根据他们如何连接、身份验证、可能是模拟以及登录如何映射到数据库用户,您可能需要对此进行试验并针对database_principal_namesession_server_principal_name代替server_principal_name. 我刚刚在 SQL Server 2012 上对此进行了测试,它似乎按您的预期工作。我不相信它适用于 2008 或 2008 R2(与您无关,但适用于未来的读者)。

我仍然认为过滤你的大部分活动似乎是可疑的,而不是真正符合审计的精神。如果他们只是相信您会保护服务帐户的密码,那么您必须拥有非常自由放任的审计员。肯定有人认识他们吧?审计师的工作是天生不信任任何人。