Question

Une méthode simple que j'ai utilisée dans le passé consiste simplement à créer une deuxième table dont la structure reflète celle que je souhaite auditer, puis à créer un déclencheur de mise à jour/suppression sur la table principale.Avant qu'un enregistrement ne soit mis à jour/supprimé, l'état actuel est enregistré dans la table d'audit via le déclencheur.

Bien qu'efficaces, les données du tableau d'audit ne sont pas les plus utiles ni les plus simples à rendre compte.Je me demande si quelqu'un a une meilleure méthode pour auditer les modifications des données ?

Il ne devrait pas y avoir trop de mises à jour de ces enregistrements, mais il s'agit d'informations très sensibles, il est donc important pour le client que toutes les modifications soient auditées et facilement signalées.

Était-ce utile?

La solution

Combien d'écriture vs.la lecture de ce(s) tableau(s) attendez-vous ?

J'ai utilisé une seule table d'audit, avec des colonnes pour Table, Column, OldValue, NewValue, User et ChangeDateTime - suffisamment générique pour fonctionner avec d'autres modifications dans la base de données, et même si BEAUCOUP de données ont été écrites dans cette table, les rapports sur ces données étaient suffisamment rares pour pouvoir être exploitées pendant les périodes de faible utilisation de la journée.

Ajoutée:Si la quantité de données vs.la création de rapports est un problème, la table d'audit pourrait être répliquée sur un serveur de base de données en lecture seule, vous permettant d'exécuter des rapports chaque fois que nécessaire sans empêcher le serveur maître de faire son travail.

Autres conseils

Nous utilisons deux modèles de tables pour cela.

Une table contient des données sur la transaction (base de données, nom de la table, schéma, colonne, application qui a déclenché la transaction, nom d'hôte pour la connexion qui a démarré la transaction, date, nombre de lignes affectées et quelques autres).

Le deuxième tableau est uniquement utilisé pour stocker les modifications de données afin que nous puissions annuler les modifications si nécessaire et rendre compte des anciennes/nouvelles valeurs.

Une autre option consiste à utiliser un outil tiers pour cela, tel que Audit ApexSQL ou Modifier la fonctionnalité de capture de données dans SQL Server.

J'ai trouvé ces deux liens utiles:

Utilisation de CLR et d'une table d'audit unique.
Création d'un déclencheur d'audit générique avec SQL 2005 CLR

Utilisation de déclencheurs et d'une table d'audit distincte pour chaque table auditée.
Comment auditer les modifications apportées aux données SQL Server ?

Existe-t-il des packages d'audit intégrés ?Oracle propose un package intéressant, qui enverra même les modifications d'audit à un serveur distinct hors de l'accès de tout méchant modifiant le SQL.

Leur exemple est génial...il montre comment alerter toute personne modifiant les tables d'audit.

OmniAudit pourrait être une bonne solution pour vos besoins.Je ne l'ai jamais utilisé auparavant car je suis assez content d'écrire mes propres routines d'audit, mais ça sonne bien.

J'utilise l'approche décrite par Greg dans son répondre et remplissez la table d'audit avec une procédure stockée appelée à partir des déclencheurs de la table.

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