oracle_mettre_en_place_un_audit_sur_une_base

oracle audit

Oracle - Mettre en place un Audit sur une base

Dans un premier temps, il faut activer l'AUDIT_TRAIL sur la base de donnée. Ce paramètre nécessite le redémarrage.

ALTER SYSTEM SET AUDIT_TRAIL={ none | os | db | db_extended | xml | xml_extended } scope=spfile;

none ou false : Audit désactivé
db ou true : Audit activé, toutes les traces seront insérées dans la base de données.
db_extended : Idem que db, mais les champs SQL_BIND et SQL_TEXT seront renseignés.
xml : Audit activé, toutes les traces seront enregistrés dans un fichier sur le serveur au format XML.
xml_extended : Idem que xml, mais les champs SQL_BIND et SQL_TEXT seront renseignés.
os : Audit activé, toutes les traces sont enregistré directement dans les logs de l'OS.

Une fois l'ALTER SYSTEM fait, relancer la base de données.

SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP
ORACLE instance started.

Ensuite, en SYSDBA, lancer les commandes d'AUDIT pour activer la trace sur l'objet ou l'action. Quelques exemples :

Pour tracer les SELECT de l'utilisateur SCOTT :

AUDIT SELECT BY SCOTT BY ACCESS;

Pour tracer les INSERT de tous les utilisateurs dans une table :

AUDIT INSERT ON SCOTT.TABLE BY ACCESS;

Pour tracer les INSERT et UPDATE de l'utilisateur DOE sur la table SCOTT.TABLE :

AUDIT INSERT, UPDATE ON SCOTT.TABLE BY DOE BY ACCESS;

Pour tous tracer sur un objet par session :

AUDIT ALL ON SCOTT.TABLE BY SESSION;

La différence entre “BY ACCESS” et “BY SESSION”, c'est qu'Oracle ne va insérer qu'une seule ligne de trace pour toute la session dans le cas d'un “BY SESSION”, alors qu'un “BY ACCESS” va insérer une ligne pour chaque action. “BY ACCESS” est plus détaillé mais va prendre plus de trace.

Plus d'information sur la commande AUDIT (10g) : http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4007.htm

C'est la table SYS.AUD$ qui contient les traces d'audit. Cette table doit être surveillée et purgée par le DBA. Le mieux est de faire un TRUNCATE régulier. Pour obtenir des informations, il est possible de faire des SELECT directement dans cette table, ou de passer par les vues système suivantes :

DBA_AUDIT_EXISTS
DBA_AUDIT_OBJECT
DBA_AUDIT_SESSION
DBA_AUDIT_STATEMENT
DBA_AUDIT_TRAIL
DBA_OBJ_AUDIT_OPTS
DBA_PRIV_AUDIT_OPTS
DBA_STMT_AUDIT_OPTS

Les 5 premières permettent de consulter les traces d'audit, tandis que les 3 dernières renseignent sur les audits en place sur la base.

Pour supprimer il faut passer par la commande NOAUDIT.

NOAUDIT ALL ON SCOTT.TABLE;

Plus d'information sur la commande NOAUDIT (10g) : http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9017.htm

  • oracle_mettre_en_place_un_audit_sur_une_base.txt
  • Dernière modification: 2011/11/24 07:36
  • de admin