Question

Notre solution d'entreprise actuelle est une application ASP.NET MVC pilotée par Entity Framework. Il existe quelques liens sur la manière d’accéder aux événements de changement pour l’audit. Cela ne m'intéresse pas vraiment.

Je suis intéressé par l'architecture d'audit au niveau de l'entreprise. Ceux d'entre vous avec les blessures au niveau de l'entreprise, quelles ont été vos solutions d'audit? Sérialisez-vous des objets dans des bases de données dans un framework. Configurez-vous des déclencheurs de base de données pour auditer les tables? Utilisez-vous une base de données distincte pour que la croissance de votre audit n’affecte pas la base de données de votre application? Je suis intéressé par les solutions éprouvées ici. Je sais qu'il y a des options dans notre choix technologique (EF) mais je m'intéresse d'abord à la fondation.

Des liens seraient très appréciés.

Était-ce utile?

La solution

J'ai vu plusieurs solutions, mais ma solution préférée était la simplicité même:

  • Créez des tables d'audit qui reflètent chacune des tables source, en ajoutant quelques colonnes supplémentaires pour suivre la date et le type de modification (insertion, mise à jour ou suppression si vous la prenez en charge) et l'utilisateur effectuant la modification. Supprimez toutes les contraintes et les index (sauf si vous vous attendez à faire beaucoup de recherches).

  • À l'intérieur de la logique de mise à jour de la table (nous avons utilisé des procédures, mais rien ne nous empêche de le faire avec une couche de persistance OR / M ou autre, étant donné les points d'ancrage appropriés), écrivez dans la table source et la table d'audit.

Cela présente de nombreux avantages, mais le plus important (à mon avis) n’est pas obligé de s’inquiéter de l’écriture de tout le code pour gérer l’intégrité transactionnelle des opérations d’écriture couplées dans le client.

Autres conseils

Je n’ai aucun lien, mais dans le système que j’ai la joie de maintenir ici au travail de jour. Nous avons une seule table d'audit, qui stocke essentiellement les informations suivantes.

TableName, PrimaryKeyValue, ModifiedColumn, OldValue, NewValue, ChangeUser, Date de modification

Maintenant, cela fonctionne très bien pour la vitesse d'audit, dans notre code, nous avons une interface commune pour l'implémentation automatique de la journalisation d'audit, mais à partir d'un "examen". point de vue, ce n'est pas le "plus rapide" moyen de récupérer les informations. (Certes, nous n'avons rien fait de consulter le journal d'audit ...)

Nous avons récemment dû résoudre ce même problème dans notre entreprise. Nous devions également pouvoir revenir aux versions précédentes.

Nous avons fini par auditer les entités commerciales plutôt que les tables de SQL. En gros, nous sérialisons les enregistrements dans la base de données et gardons une trace des modifications apportées d’une version à l’autre. Cette approche nous permet de récupérer les versions précédentes dans les entités métier, puis de revenir en arrière en appelant les mêmes opérations de sauvegarde. Cette fonctionnalité à revenir reviendra sur la responsabilité des applications car elle doit être résolue ici, sans quoi notre service pourrait avoir besoin de connaître trop de détails sur les applications participantes. Des opérations de serivce permettant de récupérer des enregistrements par version, par date, par historique, et bien sûr de vérifier les modifications sont fournies. C'est une approche opt-in pour différents groupes d'applications et différentes entités au sein de la base de données (tout ce qui se trouve dans la base de données n'a pas besoin d'être audité, alors pourquoi le faire).

Nous construisons ensuite un site Web léger qui communique avec le service et peut afficher toutes les versions. Nous avons créé un mécanisme permettant d'afficher les ajouts / mises à jour / suppressions afin de comparer les versions (représentation vraiment cool de l'interface utilisateur), ce qui permet aux utilisateurs de voir qui a changé quoi et quand. Le service peut renvoyer un lien vers l'URL pour afficher les versions d'une entité. Cela permet à nos applications webaps + winform / wpf de lancer un navigateur afin que les utilisateurs puissent voir les modifications.

Peut-être que je peux emballer ceci et fournir si quelqu'un est intéressé ....

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top