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.
6 answers
Existem muitas maneiras de fazer isso, depende da versão do servidor sql que você está usando.
Aqui estão alguns
Pista de auditoria com mesa-sombra e gatilho .Aqui está o link
Também você pode considerar usar a funcionalidade de auditoria SQL Server 2008. Aqui está o link
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
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.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.
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.