sql >> Base de Datos >  >> RDS >> Mysql

mysql (casi) auditoría completa

Hmm, yo también estaba pensando en esto.

  • Personalmente, tener una tabla por tabla para mantener las revisiones no sería un gran problema para mí, pero oye.
  • El nombre de usuario se puede mantener con variables definidas por el usuario, creo, (después de un inicio de sesión, emita algo como SET @user='someone' y úsalo.
  • Siempre que haya disparadores después de INSERTAR, ACTUALIZAR y ELIMINAR, obtener los valores anterior/siguiente es una consulta simple, solo almacenaré los valores ANTIGUOS.

En resumen, para una tabla con columnas (a,b,c), crearía una tabla con columnas (user_id,modtime,a,b,c).

Principales inconvenientes:

  • las actualizaciones por lotes son lentas (así que elija sus tablas para mantener las revisiones con cuidado)
  • duplicación de datos de lujo, tendrás/tendré que tener suficiente espacio de almacenamiento
  • los datos 'relacionados' no desencadenan una revisión (es decir, alterar un group_members la tabla realmente no altera un groups tabla, aunque es posible que desee mantener eso como un punto en el tiempo para groups en lugar de profundizar en group_members alteraciones.

En general, me parece un buen negocio, pero como rara vez lo he visto en la práctica, debe habrá razones convincentes por las que es malo, así que esperaré esas respuestas.