我正在设置数据库审核。我想捕获由数据库用户发出的任何 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
我该如何修改此审计规范以捕获除应用程序服务帐户正在执行的操作之外的所有内容?
我是否仅限于单独指定每个原则,或者我可以指定一个例外?通读 BOL 似乎我只能列出要审核的原则 - 而不是要忽略的原则。
您不能在审计规范级别执行此操作,但您可以在服务器审计级别执行此操作。因此,如果此审核还执行其他操作,并且您不想通过登录过滤掉这些事件,则需要创建单独的审核。假设您要过滤掉此服务帐户的任何类型的所有活动,您可以执行以下操作:
根据他们连接、身份验证、可能模拟的方式以及登录名映射到数据库用户的方式,您可能需要对此进行试验并过滤
database_principal_name
或session_server_principal_name
过滤server_principal_name
. 我刚刚在 SQL Server 2012 上对此进行了测试,它似乎可以按您的预期工作。我不相信它会在 2008 或 2008 R2 上工作(与您无关,但与未来的读者有关)。我仍然认为过滤您的大部分活动似乎是可疑的,并且不符合审计的精神。如果他们只是相信您保护服务帐户的密码,那么您必须拥有相当自由放任的审核员。一定有人认识他们吧?审计师的工作是不天生信任任何人。