La mejor manera de implementar un seguimiento de auditoría en sql-server?

No sé si estos requisitos son estándar o no, pero me pregunto si existe alguna solución que pueda hacer lo siguiente:

  • Para un conjunto específico de tablas, conserve una copia de un registro antes de cambiarlo en una versión de auditoría de la tabla correspondiente.

Prefiero no tener que codificar esto para cada tabla. Me pregunto si hay una solución que puedas instalar encima de ms-sql que hará esto por ti.

Hay muchas maneras de hacerlo, depende de la versión del servidor SQL que esté utilizando.

Aquí hay algunos

  • pista de auditoría con la tabla de sombra y el gatillo. Aqui esta el link

  • también puede considerar usar la función de Auditoría de SQL Server 2008. Aqui esta el link

Espero que ayude

Puede probar una solución basada en desencadenador de apuntar y hacer clic de terceros como ApexSQL Audit , una herramienta de auditoría para bases de datos de SQL Server que captura los cambios de datos que se han producido en una base de datos, incluida la información sobre quién realizó el cambio, qué objetos afectado, cuando se hizo, así como la información en el inicio de sesión de SQL, la aplicación y el host utilizados para realizar el cambio. Almacena toda la información capturada en un repository central y las exporta en formatos compatibles con la impresión

Descargo de responsabilidad: trabajo como ingeniero de soporte de productos en ApexSQL

Creo trigger que lo hace para XML de esta manera podemos registrar todas las tablas en la misma tabla, haciéndolo más flexible

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 ) ) 

Necesitaba solo valores “antiguos”, así que solo guardo la tabla eliminada, de todos modos se puede ver la tabla insertada en la tabla.

 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 

Supongo que esto podría llamarse fácilmente en sp_foreach para crearlo para cada tabla en base de datos, pero no lo necesitamos en este momento, solo recuerda cambiar los nombres de tu tabla

aclamaciones

Eche un vistazo a los factores desencadenantes. Estos pueden usarse para implementar algo que se ajuste a sus requisitos.

Eche un vistazo a este artículo: Auditoría en SQL Server 2008 que aprovecha las funciones de auditoría ya presentes en SQL Server 2008.

También debo mencionar que @Microtechie responde puntos a un gran artículo. Léelos y decida cuál es más fácil de adaptar.

Con Instantáneas de base de datos, puede mantener una copia de solo lectura de sus datos en ese instante. También con sus copias de seguridad de los registros puede restaurar su información en un período de tiempo específico si es necesario.

También puede leer información del registro para recuperar la información modificada.

La otra solución que no es de su preferencia es rastrear los cambios usando desencadenadores, pero puede requerir trabajar en cada tabla. También puede habilitar la función Cambiar captura de datos para detectar cambios, esta característica también debe habilitarse para cada tabla, pero requiere menos código que los activadores.

Finalmente, hay herramientas de terceros como Apex SQL Trigger que hacen este trabajo automáticamente con pocos clics y configuraciones.