L'audit Oracle est une des possibilités de surveillance de l'activité de la base de données :
Les résultats sont stockés dans une table du dictionnaire : SYS.AUD$
et préférablement accédés à travers des vues
prédéfinies. Ceci permet de faire des requ^tes SQL sur le résultat
et éventuellemnt de produire des rapports sophistiqués.
type de résultat fourni :
la table SYS.AUD$ et les
vues DBA_% ne sont bien sur accessibles qu'au DBA...
la table SYS.AUD$ doit être surveillée et purgée par un
DELETE (ou mieux un TRUNCATE) explicite de Mr SYS si nécessaire
Les vues d'audit sont normalement créées par CATALOG.SQL, et + précisément par le script CATAUDIT.SQL, lors de la création de la base.
Vue d'audit | Description du contenu |
---|---|
STMT_AUDIT_OPTION_MAP |
code des types d'option |
AUDIT_ACTIONS |
codes des actions |
ALL_DEF_AUDIT_OPTS |
otion d'audit OBJET part défaut |
DBA_STMT_AUDIT_OPTS |
options d'audit courantes |
DBA_PRIV_AUDIT_OPTS |
options d'audit SYSTEME courantes |
DBA_OBJ_AUDIT_OPTS, USER_OBJ_AUDIT_OPTS |
options d'audit sur tous les objets et sur ceux du USER |
DBA_AUDIT_TRAIL, |
toutes les entrées d'audit et celles concernant uniquement le USER |
DBA_AUDIT_OBJECT, |
toutes les entrées d'audit OBJET et celles concernant uniquement le USER |
DBA_AUDIT_SESSION, |
les entrées d'audit concernant toutes les (dé)connexions et celles concernant uniquement le USER |
DBA_AUDIT_STATEMENT, USER_AUDIT_STATEMENT |
les entrées d'audit concernant GRANT, REVOKE, AUDIT, NOAUDIT, et ALTER SYSTEM de tous ou du user connecté |
DBA_AUDIT_EXISTS |
les entrées d'audit concernant AUDIT EXISTS et AUDIT NOT EXISTS. |
il faut positionner le paramètre de démarrage AUDIT_TRAIL dans le fichier INIT.ORA de la base.
3 valeurs possibles :
attention cette opération nécessite l'arrêt / démarrage
de la base et NE DEMARRE PAS L'AUDIT !!
Il existe 4 niveaux d'audit :
A chaque niveau d'audit, on peut de + surveiller aussi bien LES SUCCES que LES ECHECS, et avoir une entrée d'audit par commande utilisateur ou globalement pour la session.
Le déclenchement de l'audit effectif se fait par la commande AUDIT et une ou des option(s), qui précise(nt) :
Exemples :
AUDIT CONNECT WHENEVER NOT SUCCESSFULL
surveille toutes les tentatives de connexions infructueuses
AUDIT CREATE ANY PROCEDURE
BY ACCESS
WHENEVER SUCCESSFULL
audit système : surveille les création de procédures
réussies nsur toutes la base, une entrée par commande passée.
AUDIT SELECT TABLE, DELETE TABLE
BY SESSION
WHENEVER NOT SUCCESSFUL
surveille les select et insert infructueux sur n'importe quelle table, une
entrée seulement par session
AUDIT INSERT ON scott.dept
audit objet : surveille les insertion (réussies ou échouées)
sur la table DEPT de SCOTT
Il suffit d'aller consulter les vues adéquates du dictionnaire de données (%AUDIT_OPTS) : ALL_DEF_AUDIT_OPTS , DBA_STMT_AUDIT_OPTS , DBA_PRIV_AUDIT_OPTS , DBA_OBJ_AUDIT_OPTS, USER_OBJ_AUDIT_OPTS
exemple
SELECT * FROM sys.dba_obj_audit_opts
'-' : pas d'audit
'S' : par session
'A' : un par accès
à gauche du '/' : Successful
à droite du '/' : Not successful
La première ligne nous donne :
audit de la table DEPT de SCOTT : Alter not successfull, par session + delete
successful par accès + creation d'index reussie ou échouée,
par session !
Faire un SELECT sur %_AUDIT_OBJECT ou %_AUDIT_SESSION ou %_AUDIT_STATEMENT
Exemple :
SQL> select OS_USERNAME, USERNAME, TERMINAL, TIMESTAMP
FROM dba_audit_session;
OS_USERNAME USERNAME TERMINAL TIMESTAMP
---------------------------------------
TOTO TOTO pts/2 20-AUG-01
oracle SCOTT pts/3 20-AUG-01
SQL> select OS_USERNAME, USERNAME,TERMINAL,
TIMESTAMP, OWNER, OBJ_NAME,
from dba_audit_object; OS_USERNAME
USERNAME TERMINAL TIMESTAMP OWNER OBJ_NAME
-------------------------------------------------
SCOTT pts/3 20-AUG-01 SCOTT EMP
|