2008-08-06 13 views
27

Un método simple que he usado en el pasado es básicamente crear una segunda tabla cuya estructura sea similar a la que quiero auditar, y luego crear un disparador de actualización/eliminación en la tabla principal. Antes de actualizar/eliminar un registro, el estado actual se guarda en la tabla de auditoría mediante el activador.Sugerencias para implementar tablas de auditoría en SQL Server?

Aunque es efectivo, los datos en la tabla de auditoría no son los más útiles ni son fáciles de informar. Me pregunto si alguien tiene un método mejor para auditar los cambios en los datos.

No debe haber demasiadas actualizaciones de estos registros, pero es información altamente confidencial, por lo que es importante para el cliente que todos los cambios sean auditados y se notifiquen fácilmente.

+2

SQL Server 2008 tiene compatibilidad incorporada con la nueva característica de Cambio de captura de datos andyp

+1

Debo señalar que esta característica es solo disponible en la edición Enterprise. – user17060

+0

La función Cambiar captura de datos también parece ser más para garantizar que los objetos de las aplicaciones se mantengan alineados con la base de datos en lugar de una solución de auditoría. (Por ejemplo, solo almacena cambios de 2 días). Aún necesitará buscar cambios y escribirlos en una tabla, por lo que también podría simplemente crear y utilizar activadores para escribir en una tabla de auditoría central como se muestra a continuación. Ah, y la URL anterior está rota, use este [enlace] (http://msdn.microsoft.com/en-us/library/bb933874.aspx). – BJury

Respuesta

17

¿Cuánta escritura vs. lectura de esta (s) tabla (s) espera usted?

He utilizado una sola tabla de auditoría, con columnas para Tabla, Columna, OldValue, NewValue, User y ChangeDateTime, lo suficientemente genérica como para trabajar con cualquier otro cambio en la base de datos, y mientras se escriben MUCHOS datos en esa tabla, los informes sobre esos datos eran lo suficientemente escasos como para poder ejecutarlos en períodos de poco uso del día.

Agregado: Si la cantidad de datos frente a la presentación de informes es una preocupación, la tabla de auditoría podría ser replicado en un servidor de base de datos de sólo lectura, lo que le permite ejecutar informes siempre que sea necesario sin empantanamiento el servidor maestro de hacer su trabajo.

1

¿Hay algún paquete de auditoría integrado? Oracle tiene un buen paquete, que incluso enviará cambios de auditoría a un servidor separado fuera del acceso de cualquier tipo malo que esté modificando el SQL.

Su ejemplo es asombroso ... muestra cómo alertar a cualquiera que modifique las tablas de auditoría.

1

OmniAudit puede ser una buena solución para su necesidad. Nunca lo había usado antes porque estoy bastante feliz escribiendo mis propias rutinas de auditoría, pero suena bien.

1

Uso el enfoque descrito por Greg en su answer y rellene la tabla de auditoría con un procedimiento almacenado llamado desde los desencadenantes de la tabla.

6

Estamos utilizando dos tablas de diseño para esto.

Una tabla contiene datos sobre la transacción (base de datos, nombre de tabla, esquema, columna, aplicación que desencadenó transacción, nombre de host para inicio de sesión, fecha, número de filas afectadas y un par más).

La segunda tabla solo se usa para almacenar cambios en los datos para que podamos deshacer los cambios si es necesario e informar sobre los valores antiguos/nuevos.

Otra opción es utilizar una herramienta de terceros para esto como ApexSQL Audit o la función Cambiar captura de datos en SQL Server.

Cuestiones relacionadas