2010-10-07 7 views

Répondre

0

J'ai trouvé un moyen de créer une spécification d'audit de base de données, a écrit un code C# qui générait dynamiquement l'instruction SQL pour toutes les tables et toutes les actions dont j'avais besoin et exécutait la chaîne résultante. Franchement, l'assistant fourni n'est d'aucune aide si vous créez une spécification d'audit de base de données pour plus de deux tables.

0

Change Data Capture

Vous pouvez utiliser le mécanisme de fonctionnalité Data Capture Change fournies par SQL Server 2008.

http://msdn.microsoft.com/en-us/library/bb522489.aspx

Remarque que cela ne fera que créer, mettre à jour et supprimer.

triggers et des tables de vérification

Même pour 100 tables, vous pouvez utiliser un seul script qui va générer les tables d'audit et les éléments déclencheurs nécessaires. Notez que ce n'est pas un très bon mécanisme - il ralentira le contrôle ne sera pas retourné à moins que l'exécution du déclencheur soit terminée.

+1

Cette fonctionnalité nécessite Enterprise Edition. –

0

J'ai eu la même question. La réponse est en fait plus simple que prévu et n'a pas besoin d'une application C# personnalisée pour générer beaucoup de SQL pour couvrir toutes les tables. Exemple SQL ci-dessous. L'important était de spécifier database et public pour INSERT/UPDATE/DELETE.

USE [master] 
GO 

CREATE SERVER AUDIT [CancerStatsAudit] 
TO FILE 
( FILEPATH = N'I:\CancerStats\Audit\' 
    ,MAXSIZE = 128 MB 
    ,MAX_ROLLOVER_FILES = 64 
    ,RESERVE_DISK_SPACE = OFF 
) 
WITH 
( QUEUE_DELAY = 1000 
    ,ON_FAILURE = CONTINUE 
    ,AUDIT_GUID = '5a0a18cf-fe42-4171-ad01-5e19af9e27d1' 
) 
ALTER SERVER AUDIT [CancerStatsAudit] WITH (STATE = ON) 
GO 

USE [CancerStats] 
GO 

CREATE DATABASE AUDIT SPECIFICATION [CancerStatsDBAudit] 
FOR SERVER AUDIT [CancerStatsAudit] 
ADD (INSERT ON DATABASE::[CancerStats] BY [public]), 
ADD (UPDATE ON DATABASE::[CancerStats] BY [public]), 
ADD (DELETE ON DATABASE::[CancerStats] BY [public]), 
ADD (EXECUTE ON DATABASE::[CancerStats] BY [public]), 
ADD (DATABASE_OBJECT_CHANGE_GROUP), 
ADD (SCHEMA_OBJECT_CHANGE_GROUP) 
WITH (STATE = ON) 
GO 

NB: DATABASE_OBJECT_CHANGE_GROUP et SCHEMA_OBJECT_CHANGE_GROUP ne sont pas nécessaires pour la vérification INSERT, UPDATE et DELETE - voir les notes complémentaires ci-dessous.

Notes complémentaires:

L'exemple ci-dessus comprend également les DATABASE_OBJECT_CHANGE_GROUP et SCHEMA_OBJECT_CHANGE_GROUP. Celles-ci ont été incluses car mon exigence était également de suivre les actions CREATE/ALTER/DROP sur les objets de base de données. Il est à noter que la documentation est fausse pour ceux-ci. La page ci-dessus indique les pistes DATABASE_OBJECT_CHANGE_GROUP CREATE, UPDATE et DELETE. Ce n'est pas vrai (je l'ai testé dans SQL Server 2016), ne CREER est suivi, voir: https://connect.microsoft.com/SQLServer/feedback/details/370103/database-object-change-group-audit-group-does-not-audit-drop-proc

En fait, pour suivre CREATE, UPDATE, DELETE, utilisez SCHEMA_OBJECT_CHANGE_GROUP. Malgré la page de documentation docs.microsoft.com ci-dessus suggérant que cela ne fonctionne que pour les schémas, cela fonctionne aussi bien pour les objets dans le schéma.

Questions connexes