2009-09-17 19 views
6

Nuestra solución empresarial actual es una aplicación ASP.NET MVC impulsada por Entity Framework. Hay un par de enlaces sobre cómo conectar los eventos de cambio para auditar. No estoy realmente interesado en esto.Enterprise Data Auditing

Me interesa la arquitectura de auditoría de nivel empresarial. Aquellos de ustedes con las heridas de batalla de nivel empresarial, ¿cuáles han sido sus soluciones de auditoría? ¿Serializa objetos en bases de datos en un marco? ¿Está configurando desencadenadores de base de datos para auditar tablas? ¿Utiliza una base de datos separada para que su crecimiento de auditoría no afecte a la base de datos de su aplicación? Estoy interesado en las soluciones probadas y verdaderas aquí. Sé que hay opciones en nuestra elección de tecnología (EF) pero primero estoy interesado en la base.

Los enlaces serían muy apreciados.

+0

Permítanme también hacer otra nota importante. Nos apasiona poder retroceder y ver datos antiguos en la aplicación. Aquí es donde creemos que los objetos seriados persistentes son útiles (no solo para registrar los deltas). – RailRhoad

+2

La distinción entre una base de datos y varias bases de datos es algo artificial. Las bases de datos pueden tener múltiples grupos de archivos, y las tablas pueden tener múltiples particiones. Puede tratar con eficacia una única base de datos como si se tratara de muchas bases de datos, y una sola tabla como si se tratara de varias tablas. –

Respuesta

1

que he visto varias soluciones, pero mi favorita era la simplicidad misma:

  • crear tablas de auditoría que Refleje cada tabla fuente, agregue algunas columnas adicionales para rastrear la fecha y el tipo de cambio (insertar, actualizar o eliminar si lo admite) y el usuario que realiza el cambio. Elimine todas las restricciones e índices (a menos que espere realizar muchas búsquedas).

  • Dentro de la lógica de actualización de la tabla (utilizamos procedimientos, pero no hay razón para que no se pueda hacer con OR/M u otra capa de persistencia, con los ganchos apropiados), escriba tanto en la tabla fuente como en tabla de auditoría.

Esto tiene numerosos beneficios, pero el más grande (en mi opinión) es no tener que preocuparse o escribir todo el código para gestionar la integridad de las transacciones de las operaciones de escritura emparejados en el cliente.

+0

No hay procesos almacenados aquí con la decisión de EF, aunque podemos engancharnos a los cambios, lo que significa que podríamos hacer que esto ocurra en persistencia. Entonces, básicamente, ¿este es un espejo de las tablas de aplicaciones en un db separado? – RailRhoad

+0

Correcto, excepto en la misma base de datos, de modo que tendría tablas como "Empleado" y "Historial de empleados" una junto a la otra. (Aunque el comentario anterior de Craig Stuntz se refiere aquí). En retrospectiva, no hay razón para que diga que asume procedimientos almacenados, por lo que he editado ese texto. –

+0

¿Eso significa que la única base de datos tiene que escribir todo dos veces? ¿Has notado algún impacto en el rendimiento al hacer esto? – glenatron

2

No tengo ningún enlace, pero en el sistema tengo la alegría de mantener aquí en el trabajo del día. Tenemos una sola tabla de auditoría, que básicamente almacena la siguiente información.

NombreTabla, PrimaryKeyValue, ModifiedColumn, ValorAnterior, NewValue, ChangeUser, Cambiar fecha

Ahora bien, esto funciona muy bien para la velocidad de auditoría, en nuestro código, tenemos una interfaz común para la auto-aplicación del registro de auditoría, pero a partir de un punto de vista de "revisión", no es la forma "más rápida" de recuperar la información. (Admito que en realidad no hemos hecho nada a tener que mirar el registro de auditoría ...)

+0

Entonces, básicamente, una tabla de crecimiento, ¿está en la misma base de datos? – RailRhoad

+0

Sí, eso es correcto, tampoco tenemos ningún índice sobre la mesa en este momento. Se encuentra en la misma base de datos para algunos, pero hay otra versión que agrega una columna "Base de datos" y se almacena fuera. –

+0

¿Cómo manejas los cambios en las relaciones? – camainc

2

Recientemente tuvimos que resolver el mismo problema en nuestra empresa. También se nos pidió que pudiéramos volver a versiones anteriores.

Terminamos auditando las entidades comerciales en lugar de las tablas en sql. Básicamente, serializamos los registros en el DB y hacemos un seguimiento de los cambios que se realizan de una versión a la siguiente. Este enfoque nos permite recuperar versiones anteriores en las entidades comerciales y luego revertir llamando a las mismas operaciones de guardado. Esta funcionalidad para revertir se desplazará en la responsabilidad de las aplicaciones porque debe resolverse aquí; de lo contrario, nuestro servicio podría necesitar conocer demasiados detalles sobre las aplicaciones participantes. Se proporcionan operaciones de servicio para recuperar registros por versiones, por fechas, historial de vistas y, por supuesto, para auditar los cambios. Es un enfoque opcional para diferentes grupos de aplicaciones y diferentes entidades (no todo lo que hay en el DB debe ser auditado, entonces ¿por qué hacer eso?).

Luego creamos un sitio web liviano que habla con el servicio y puede mostrar todas las versiones.Creamos un mecanismo para mostrar las adiciones/actualizaciones/eliminaciones para comparar versiones (representación de la interfaz de usuario realmente genial), esto permite a los usuarios ver quién cambió qué y cuándo. El servicio puede devolver un enlace a la url para ver las versiones de una entidad. Esto permite a nuestras aplicaciones webaps + winform/wpf iniciar un navegador para que los usuarios puedan ver los cambios.

Quizás puedo empaquetar esto y proporcionar si alguien está interesado ....

+0

¿Entonces está tomando los objetos EF y serializando aquellos y luego almacenándolos en una tabla/base de datos de auditoría propia? ¿Cómo manejas las relaciones entre padres e hijos? – glenatron

Cuestiones relacionadas