Estou configurando uma auditoria de banco de dados. Eu gostaria de capturar qualquer alteração DML emitida pelo usuário do banco de dados que não seja a conta de serviço relacionada ao aplicativo.
Resumindo, isso serve para provar aos nossos auditores externos que nenhum usuário está adulterando dados fora do aplicativo.
Este script a seguir configura uma auditoria DML que é global para todos os princípios.
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
Como faço para modificar essa especificação de auditoria para capturar tudo, EXCETO o que está sendo feito pela conta de serviço do aplicativo?
Estou limitado a especificar cada princípio individualmente ou posso especificar uma exceção? Lendo o BOL, parece que só posso listar os princípios a serem auditados - não os princípios a serem ignorados.
Você não pode fazer isso no nível de especificação de auditoria, mas pode fazê-lo no nível de auditoria do servidor. Portanto, se essa auditoria fizer outras coisas também e você não quiser filtrar esses eventos por login, será necessário criar uma auditoria separada. Supondo que você queira filtrar todas as atividades de qualquer tipo dessa conta de serviço, faça o seguinte:
Dependendo de como eles se conectam, autenticam, talvez personificam e como o login é mapeado para o usuário do banco de dados, você pode precisar experimentar isso e filtrar contra
database_principal_name
ousession_server_principal_name
em vez deserver_principal_name
. Acabei de testar isso no SQL Server 2012 e parece funcionar como seria de esperar. Não acredito que funcione em 2008 ou 2008 R2 (não é relevante para você, mas para futuros leitores).Ainda acho que filtrar uma grande parte de sua atividade parece suspeito e não está realmente no espírito da auditoria. Você deve ter auditores bastante laissez-faire se eles apenas confiarem que você protege suas senhas para contas de serviço. Alguém deve conhecê-los, certo? O trabalho de um auditor é não confiar inerentemente em ninguém.