sql server - una - La mejor manera de implementar un seguimiento de auditoría en sql-server?
tipos de accion de auditoria sql server (6)
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.
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.
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 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.
Eche un vistazo a los factores desencadenantes. Estos pueden usarse para implementar algo que se ajuste a sus requisitos.
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 repositorio central y las exporta en formatos compatibles con la impresión
Descargo de responsabilidad: trabajo como ingeniero de soporte de productos en ApexSQL