Dans la majeure partie des bases de données, un audit fin d'une table utilisateur se fait généralement à coup de déclencheurs (création d'une table de journal, création des triggers...)... et toutes les actions d'une base (le SELECT par exemple) de déclenchent pas forcément un déclencheur. Dès Oracle 10, le Fine Grained Audit (FGA) offre une alternative élégante et peu coûteuse pour ce type de tâche.
Configurer le fine grained audit
Cela se passe assez aisément à l'aide du package idoine, ou le statement policy détermine l'action à auditer... select, insert, update ou delete. Si nécessaire, reportez-vous à la documentation du package DBMS_FGA.ADD_POLICY : il y a moyen de filtrer encore plus finement, notamenent en utilisant l'option audit_condition.
Code SQL : | Sélectionner tout |
1 2 3 4 5 6 7 | exec DBMS_FGA.ADD_POLICY ( object_schema => 'MonSchema', object_name => 'MaTable', policy_name => 'fga_MaTable_S', enable => TRUE, statement_types => 'SELECT' ); |
Les lignes d'audit remplissent la table sys.dba_fga_audit_trail. Prenez garde à ne pas auditer des actions trop importantes (par exemple un update massif sur de grosses tables) au risque de saturer le tablespace système sous-jacent.
Code SQL : | Sélectionner tout |
1 2 3 4 | select DB_USER, extended_timestamp, SQL_TEXT from dba_fga_audit_trail where object_name='MaTable' order by extended_timestamp |
Même table pour déterminer ce que vous êtes en train d'auditer
Code SQL : | Sélectionner tout |
1 2 | select distinct policy_name, object_name, object_schema FROM dba_fga_audit_trail ; |
L'arrêt de l'audit est une chose... encore faut-il ne pas oublier de purger la table contenant les données
Code SQL : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | exec DBMS_FGA.DROP_POLICY object_schema => 'monSchema', object_name => 'MaTable', policy_name => 'FGA_MATABLE_S' ); -- En tant que SYSDBA delete dba_fga_audit_trail where object_name='MaTable' AND ... |
Source
http://www.orafaq.com/wiki/DBMS_FGA
http://www.oracle.com/technetwork/ar...tn-082646.html