una - Sugerencias para implementar tablas de auditoría en SQL Server?
tecnicas de auditoria sql server (6)
¿Cuánta escritura vs. lectura de esta (s) tabla (s) espera?
Utilicé una única 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 el DB, y aunque se escribieron MUCHOS datos en esa tabla, los informes en que los 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 los informes es una preocupación, la tabla de auditoría podría replicarse en un servidor de base de datos de solo lectura, lo que le permite ejecutar informes cuando sea necesario sin atascar el servidor principal para que no haga su trabajo.
Un método simple que he usado en el pasado es básicamente crear una segunda tabla cuya estructura refleje 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.
Si bien es efectivo, los datos en la tabla de auditoría no son los más útiles o simples de reportar. 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 se trata de información altamente confidencial, por lo que es importante para el cliente que todos los cambios sean auditados e informados fácilmente.
¿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.
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.
He encontrado estos dos enlaces útiles:
Usando CLR y tabla de auditoría única.
Creación de un disparador de auditoría genérico con SQL 2005 CLR
Usar disparadores y una tabla de auditoría separada para cada tabla que se está auditando.
¿Cómo audito los cambios en los datos de SQL Server?
Estamos usando dos diseños de mesa para esto.
Una tabla contiene datos sobre la transacción (base de datos, nombre de tabla, esquema, columna, aplicación que desencadenó la transacción, nombre de host para el inicio de sesión que inició la transacción, fecha, número de filas afectadas y un par más).
La segunda tabla solo se usa para almacenar cambios de datos para que podamos deshacer los cambios si es necesario e informar sobre valores antiguos / nuevos.
Otra opción es utilizar una herramienta de terceros para esto, como ApexSQL Audit o Change Data Capture en SQL Server.
Utilizo el enfoque descrito por Greg en su respuesta y rellenar la tabla de auditoría con un procedimiento almacenado llamado desde los desencadenantes de la tabla.