2011-04-05 22 views
6

Esta pregunta ha sido respondida en SO varias veces: here, here y enlaces externos here y here.¿Cómo rastrear los cambios en varias columnas en la tabla de la base de datos con fines de auditoría?

Entiendo los enfoques descritos en los hilos anteriores y planeo usar el enfoque this.

Pero tengo algunas dudas básicas al implementar eso.

En mi caso, varias columnas en una fila podría actualizarse al mismo tiempo, por lo que está siguiendo el camino correcto para poner en práctica:

  1. Averigüe tipo de operación (INSERT/UPDATE/DELETE)
  2. Averigüe columnas que están consiguiendo puestas
  3. leer la fila completa antes de actualizar
  4. Insertar una fila en la tabla de auditoría para cada columna se cambia con el valor antiguo y nuevo (junto con otros detalles)
  5. u pdate la tabla
+0

¿No es compatible con los desencadenadores mysql? –

+0

@ p.marino: Quiero hacerlo desde la aplicación en lugar de usar disparadores. He leído sobre los pros y los contras del uso de desencadenantes en uno de los enlaces mencionados anteriormente. Para mí, también es más sencillo hacerlo en la aplicación. – understack

+1

¡Es mucho más fácil hacer esto usando disparadores! –

Respuesta

4

Asumiendo que está utilizando una versión suficientemente reciente de mySQL, usaría triggers, personalmente.

Suponiendo que funcionan más o menos como los que conozco en otros productos (por ejemplo, Oracle) su problema se vuelve más simple, en el sentido de poner un activador de "actualización" en la fila y utilizarlo para actualizar la auditoría tabla para cada campo que le interese.

Posible advertencia: si su aplicación inicia sesión en la base de datos como un solo usuario (un enfoque común si utiliza la agrupación de conexiones, por ejemplo) puede ser complicado registrar la identidad real del usuario .

+0

Encontrar la identidad real del usuario no es un problema en mi caso. – understack

+0

Entonces, realmente creo que los desencadenantes son el camino a seguir, a menos que mySQL tenga algunos problemas oscuros con ellos (no estoy muy familiarizado con eso, es malo). –

Cuestiones relacionadas