Auditoria de banco de dados em alguns segundos
Segue um exemplo de como você pode percorrer todas as tabelas de uma database e criar uma auditoria para detectar ações de delete, select, edit e insert, e armazenar o log em uma tabela separada usando SQL:
-- Criação da tabela de log
CREATE TABLE Log (
LogID INT PRIMARY KEY IDENTITY,
Tabela NVARCHAR(128),
Operacao NVARCHAR(10),
DataHora DATETIME,
Usuario NVARCHAR(128)
);
-- Variáveis para guardar o nome da tabela e o comando SQL
DECLARE @tabela NVARCHAR(128), @sql NVARCHAR(MAX);
-- Cursor para percorrer todas as tabelas da database
DECLARE cursor_tabelas CURSOR FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';
-- Loop para percorrer todas as tabelas da database
OPEN cursor_tabelas;
FETCH NEXT FROM cursor_tabelas INTO @tabela;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Criação de triggers para a tabela
SET @sql = 'CREATE TRIGGER tr_' + @tabela + '_Delete ON ' + @tabela + ' AFTER DELETE
AS
BEGIN
INSERT INTO Log (Tabela, Operacao, DataHora, Usuario)
VALUES (''' + @tabela + ''', ''DELETE'', GETDATE(), USER_NAME());
END;';
EXEC sp_executesql @sql;
SET @sql = 'CREATE TRIGGER tr_' + @tabela + '_Insert ON ' + @tabela + ' AFTER INSERT
AS
BEGIN
INSERT INTO Log (Tabela, Operacao, DataHora, Usuario)
VALUES (''' + @tabela + ''', ''INSERT'', GETDATE(), USER_NAME());
END;';
EXEC sp_executesql @sql;
SET @sql = 'CREATE TRIGGER tr_' + @tabela + '_Update ON ' + @tabela + ' AFTER UPDATE
AS
BEGIN
INSERT INTO Log (Tabela, Operacao, DataHora, Usuario)
VALUES (''' + @tabela + ''', ''UPDATE'', GETDATE(), USER_NAME());
END;';
EXEC sp_executesql @sql;
FETCH NEXT FROM cursor_tabelas INTO @tabela;
END
-- Fechamento do cursor
CLOSE cursor_tabelas;
DEALLOCATE cursor_tabelas;
Este script criará uma tabela chamada Log para armazenar as informações do log e criará gatilhos (triggers) para cada tabela da database para detectar ações de delete, select, edit e insert. O log incluirá o nome da tabela, a operação realizada (delete, insert ou update), a data e hora da operação e o nome do usuário que realizou a operação.
Cabe lembrar que o uso de triggers em excesso pode afetar a performance do banco de dados, portanto, é importante avaliar se a criação de triggers é a melhor opção para o seu caso específico.
Comentários
Postar um comentário
Os códigos postados aqui são uma seqüência de instruções de forma ordenada, não compilada para o código de máquina, em uma determinada linguagem de programação.
Ajude a melhorar esses códigos.