Pergunta

Um método simples que usei no passado é basicamente criar uma segunda tabela cuja estrutura espelhe aquela que desejo auditar e, em seguida, criar um gatilho de atualização/exclusão na tabela principal.Antes de um registro ser atualizado/excluído, o estado atual é salvo na tabela de auditoria por meio do gatilho.

Embora eficazes, os dados da tabela de auditoria não são os mais úteis ou simples de reportar.Gostaria de saber se alguém tem um método melhor para auditar alterações de dados.

Não deve haver muitas atualizações desses registros, mas são informações altamente confidenciais, por isso é importante para o cliente que todas as alterações sejam auditadas e facilmente relatadas.

Foi útil?

Solução

Quanto escrever vs.leitura desta(s) tabela(s) você espera?

Usei uma única tabela de auditoria, com colunas para Tabela, Coluna, OldValue, NewValue, User e ChangeDateTime - genérica o suficiente para trabalhar com quaisquer outras alterações no banco de dados e, embora MUITOS dados tenham sido gravados nessa tabela, os relatórios com base nisso, os dados eram esparsos o suficiente para que pudessem ser executados em períodos de baixo uso do dia.

Adicionado:Se a quantidade de dados vs.a geração de relatórios é uma preocupação, a tabela de auditoria pode ser replicada para um servidor de banco de dados somente leitura, permitindo que você execute relatórios sempre que necessário, sem atrapalhar o trabalho do servidor mestre.

Outras dicas

Estamos usando um design de duas tabelas para isso.

Uma tabela contém dados sobre a transação (banco de dados, nome da tabela, esquema, coluna, aplicativo que acionou a transação, nome do host para login que iniciou a transação, data, número de linhas afetadas e mais alguns).

A segunda tabela é usada apenas para armazenar alterações de dados para que possamos desfazer as alterações, se necessário, e relatar valores antigos/novos.

Outra opção é usar uma ferramenta de terceiros para isso, como Auditoria ApexSQL ou recurso Alterar captura de dados no SQL Server.

Achei estes dois links úteis:

Usando CLR e tabela de auditoria única.
Criando um gatilho de auditoria genérico com SQL 2005 CLR

Usando gatilhos e tabelas de auditoria separadas para cada tabela auditada.
Como faço para auditar alterações nos dados do SQL Server?

Existe algum pacote de auditoria integrado?A Oracle tem um pacote legal, que até envia alterações de auditoria para um servidor separado, fora do acesso de qualquer bandido que esteja modificando o SQL.

O exemplo deles é incrível...mostra como alertar sobre qualquer pessoa que modifique as tabelas de auditoria.

OmniAudit pode ser uma boa solução para sua necessidade.Nunca usei isso antes porque estou muito feliz em escrever minhas próprias rotinas de auditoria, mas parece bom.

Eu uso a abordagem descrita por Greg em seu responder e preencha a tabela de auditoria com um procedimento armazenado chamado a partir dos gatilhos da tabela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top