2008-08-06 7 views
27

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 veux auditer, puis créer un déclencheur de mise à jour/suppression sur la table principale. Avant qu'un enregistrement ne soit mis à jour/effacé, l'état actuel est enregistré dans la table d'audit via le déclencheur. Bien qu'efficaces, les données de la table d'audit ne sont pas les plus utiles ou les plus simples à rapporter. Je me demande si quelqu'un a une meilleure méthode pour vérifier les changements de données?Suggestions pour implémenter des tables d'audit dans SQL Server?

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 tous les changements soient audités et facilement signalés.

+2

SQL Server 2008 dispose d'une prise en charge intégrée avec la nouvelle fonctionnalité de capture de données de modification andyp

+1

Je dois préciser que cette fonctionnalité est uniquement disponible dans l'édition Enterprise. – user17060

+0

La fonction de modification de la capture de données semble également être plus utile pour garantir que les objets d'application sont conservés dans la base de données plutôt que dans une solution d'audit. (Il ne stocke que 2 jours de modifications par exemple.) Vous devez toujours rechercher les modifications et les écrire dans une table. Il est donc préférable de créer et d'utiliser des déclencheurs pour écrire dans une table d'audit centrale comme indiqué ci-dessous. Oh, et l'URL ci-dessus est cassée, utilisez ce [lien] (http://msdn.microsoft.com/en-us/library/bb933874.aspx). – BJury

Répondre

17

Combien d'écriture ou de 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 changements dans la base de données, et tant que beaucoup de données ont été écrites dans ce tableau, les rapports sur ces données étaient assez rares pour pouvoir être exploités pendant les périodes de faible utilisation de la journée.

Ajouté: Si la quantité de données par rapport à l'information est une préoccupation, la table de vérification pourrait être répliquées sur un serveur de base de données en lecture seule, ce qui vous permet d'exécuter des rapports chaque fois que nécessaire sans embourber le serveur maître de faire leur travail.

1

Y a-t-il des progiciels d'audit intégrés? Oracle a un bon paquet, qui enverra même les changements d'audit à un serveur séparé en dehors de l'accès de n'importe quel méchant qui modifie le SQL. Leur exemple est génial ... il montre comment alerter quiconque modifie les tables d'audit.

1

OmniAudit peut être une bonne solution pour votre besoin. Je ne l'ai jamais utilisé auparavant parce que je suis assez content d'écrire mes propres routines d'audit, mais ça sonne bien.

1

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

6

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

La deuxième table est uniquement utilisée pour stocker les modifications de données afin que nous puissions annuler les modifications si nécessaire et signaler les anciennes/nouvelles valeurs.

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

Questions connexes