a melhor maneira de implementar uma pista de auditoria no SQL-server?

não sei se estes requisitos são normais ou não, mas pergunto-me se existe uma solução que possa fazer o seguinte :

  • para um determinado conjunto de quadros, conservar uma cópia de um registo antes de O alterar numa versão de auditoria do quadro pertinente.
Prefiro não ter de codificar isto para cada tabela. Eu estou me perguntando se existe uma solução que você pode instalar em cima do ms-sql que fará isso para você?

 34
Author: robotwasp, 2013-07-09

6 answers

Existem muitas maneiras de fazer isso, depende da versão do servidor sql que você está usando.

Aqui estão alguns

Espero que ajude.
 34
Author: Microtechie, 2015-11-19 22:07:17

Você pode experimentar uma festa de 3 aponte-e-clique o disparador com base em solução, tais como ApexSQL de Auditoria - uma auditoria ferramenta para bancos de dados SQL Server, que captura dados de ocorrência de alterações em um banco de dados, incluindo informações sobre quem fez a alteração, os objectos que foram afectados, quando foi feita, bem como as informações sobre o SQL login, o aplicativo e o host usado para fazer a alteração. Armazena todas as informações capturadas num repositório central e exporta-as de forma amigável. formatos

Aviso: eu trabalho como Engenheiro de Suporte de produtos na ApexSQL

 5
Author: Ivan Stankovic, 2014-04-04 17:40:00

Eu crio o trigger que o faz para o XML desta forma podemos registar todas as tabelas na mesma tabela, tornando-o mais flexível

CREATE TABLE [dbo].[AuditAll] (
    AuditId    int           NOT NULL IDENTITY(1,1),
    [DateTime] datetime      NOT NULL,
    TableName  nvarchar(255) NOT NULL,
    AuditEntry xml           NULL,

    CONSTRAINT [PK_AuditAll] PRIMARY KEY CLUSTERED ( AuditId ASC )
)

Eu precisava apenas de valores 'antigos' , por isso só guardo a tabela apagada, a tabela inserida pode ser vista na tabela de qualquer maneira.

CREATE TRIGGER AuditSimple 
    ON Simple
    AFTER INSERT,DELETE,UPDATE
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

IF (SELECT COUNT(*) FROM deleted) > 0 
begin
    Declare @AuditMessage XML
    --set valut to all xml from deleted table
    set @AuditMessage = (select * from deleted for xml auto) 

    insert into AuditAll( DateTime, TableName, AuditEntry ) 
        values ( GetDate(), 'Simple', @AuditMessage )
end

END
GO

Eu acho que isso poderia facilmente ser chamado em sp_foreach para criá-lo para cada tabela em datatabase, mas não precisávamos dele no momento, apenas lembre-se de mudar os nomes de sua tabela

Saúde.
 5
Author: zebra, 2017-08-27 06:21:40
Olha para os gatilhos. Estes podem ser usados para implementar algo para atender às suas necessidades.
 1
Author: ChrisBint, 2013-07-09 11:05:09

Dê uma olhada neste artigo - auditoria no servidor SQL 2008 que muito bem tira proveito das características de auditoria já presentes no servidor SQL 2008.

Devo também mencionar que @Microtechie responde aponta para algum grande artigo. Leia - os e decida qual deles é mais fácil de adaptar.

 0
Author: Soham Dasgupta, 2013-07-09 11:36:12

Com fotos de banco de dados, você pode manter uma cópia readonly de seus dados nesse instante. Também com seus backups dos logs você pode restaurar suas informações em um período específico de tempo, se necessário.

Também pode ler a informação do registo para obter a informação alterada.

A outra solução que não é de sua preferência é rastrear as alterações usando gatilhos, mas pode necessitar trabalhar em cada tabela. Você também pode ativar o recurso de captura de dados de mudança para detectar mudanças, este recurso também precisa ser ativado para cada tabela, mas requer menos código do que os gatilhos.

Finalmente, existem ferramentas de terceiros como Apex SQL Trigger {[9] } que fazem este trabalho automaticamente com poucos cliques e configurações.

 0
Author: Daniel Calbimonte, 2015-02-20 20:49:18