Primeiramente vamos criar uma tabela tabela_funcionários para testar a auditoria
CREATE TABLE TABELA_FUNCIONARIOS ( ID INT IDENTITY, NOME_FUNCIONARIO VARCHAR(80), SALARIO_FUNCIONARIO VARCHAR(20) ) SELECT * FROM TABELA_FUNCIONARIOS INSERT INTO TABELA_FUNCIONARIOS values ('Joao', 1000), ('Jose', 2000), ('Alexandre', 3000) SELECT * FROM TABELA_FUNCIONARIOS
Criar o arquivo de auditoria a nível de servidor
USE [master] GO CREATE SERVER AUDIT [AUDIT_TABELA_FUNCIONARIOS] TO FILE ( FILEPATH = N'C:\Auditoria' ,MAXSIZE = 0 MB ,MAX_ROLLOVER_FILES = 2147483647 ,RESERVE_DISK_SPACE = OFF ) WITH ( QUEUE_DELAY = 1000 ,ON_FAILURE = CONTINUE )
Criar a auditoria no Banco de Dados e indicar o que será auditado
USE [empresa] GO CREATE DATABASE AUDIT SPECIFICATION [DATABASE_AUDIT_TABELA_FUNCIONARIOS] FOR SERVER AUDIT [AUDIT_TABELA_FUNCIONARIOS]
Indicar que será auditado
OBS: As três linhas indicam as três possíveis varições no nome da tabela. ADD (SELECT ON OBJECT::[dbo].[TABELA_FUNCIONARIOS] BY [public]), ADD (SELECT ON OBJECT::[TABELA_FUNCIONARIOS] BY [public]), ADD (SELECT ON OBJECT::TABELA_FUNCIONARIOS BY [public]),
Caso queira excluir a auditoria
--drop DATABASE AUDIT SPECIFICATION [DATABASE_AUDIT_TABELA_FUNCIONARIOS]
Após criar a auditoria, é necessário ativá-la a nível de servidor
USE [empresa] GO ALTER SERVER AUDIT AUDIT_TABELA_FUNCIONARIOS WITH (STATE = ON); GO
Ativar a auditoria a nível de Banco de Dados
USE [empresa] GO ALTER DATABASE AUDIT SPECIFICATION [DATABASE_AUDIT_TABELA_FUNCIONARIOS] WITH (STATE = ON) GO
Testando a auditoria
SELECT * FROM [dbo].[TABELA_FUNCIONARIOS] SELECT * FROM [TABELA_FUNCIONARIOS] SELECT * FROM TABELA_FUNCIONARIOS
Realizando um UPDATE
UPDATE [dbo].[TABELA_FUNCIONARIOS] SET SALARIO_FUNCIONARIO = '1500' WHERE ID = '1'
Visualizando os LOGS
SELECT * FROM sys.fn_get_audit_file (N'C:\Auditoria\*',default,default);
Visualizando os LOGS com alguns filtros
SELECT event_time 'horario', database_name + '.' + schema_name + '.' + object_name 'objeto', statement, server_principal_name 'login', session_server_principal_name 'user' FROM sys.fn_get_audit_file (N'C:\Auditoria\*',default,default) WHERE action_id = 'SL';
Se você deseja visualizar todas as auditorias existentes no Banco de Dados
select * from sys.server_audits
Caso queira mais informações sobre o assunto, segue alguns links
- http://www.devmedia.com.br/trilha-de-auditoria-no-sql-server/4357
- http://zavaschi.com/index.php/tag/sql-server-audit/
- http://adrianobrandaodba.wordpress.com/2013/05/08/trilha-de-auditoria-no-sql-server/
- http://sqlfromhell.wordpress.com/2012/02/23/identificando-consultas-demoradas-com-o-sql-server-profiler/
- http://technet.microsoft.com/pt-br/library/cc280386.aspx
- http://technet.microsoft.com/pt-br/library/cc280404.aspx