
🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.
AUDIT Oracle SQL : Surveiller et tracer les accès à votre base de données
La commande AUDIT Oracle SQL est un outil essentiel pour tout administrateur de base de données souhaitant surveiller les actions des utilisateurs et garantir la sécurité des données sensibles. Grâce à l’AUDIT Oracle, il est possible de tracer les connexions, les modifications de données, les accès aux objets ou encore les changements de structure, dans le respect des exigences réglementaires et de sécurité.
Définition et utilisation de la commande AUDIT Oracle SQL
La commande AUDIT fait partie du sous-langage DCL (Data Control Language) d’Oracle. Elle permet d’activer la surveillance des actions effectuées dans la base de données, qu’il s’agisse d’opérations sur les objets (tables, vues, procédures) ou d’actions système (connexions, créations de comptes, droits accordés).
Oracle distingue deux grands types d’audit :
- L’audit standard (Traditional Auditing) : disponible depuis les premières versions, il repose sur le paramètre
audit_trailde l’instance. - L’audit unifié (Unified Auditing) : introduit à partir d’Oracle 12c, il centralise tous les événements dans une vue unique
UNIFIED_AUDIT_TRAILet constitue la solution recommandée aujourd’hui.
Cas d’usage en entreprise
- Conformité réglementaire (RGPD, SOX, PCI-DSS) : tracer qui accède aux données personnelles ou financières.
- Détection des comportements suspects : identifier les connexions en dehors des horaires habituels.
- Analyse forensique : reconstituer une séquence d’actions après un incident de sécurité.
- Contrôle interne : surveiller les modifications sur les tables critiques (salaires, transactions).
Syntaxe de la commande AUDIT Oracle SQL
Oracle propose deux syntaxes principales selon le mode d’audit activé.
Audit standard (Traditional Auditing)
-- Audit d'une action système
AUDIT action_système
[BY utilisateur]
[BY SESSION | BY ACCESS]
[WHENEVER [NOT] SUCCESSFUL];
-- Audit d'un objet
AUDIT action_objet
ON [schéma.]nom_objet
[BY SESSION | BY ACCESS]
[WHENEVER [NOT] SUCCESSFUL];
Audit unifié (Unified Auditing — Oracle 12c et supérieur)
-- Création d'une politique d'audit
CREATE AUDIT POLICY nom_politique
ACTIONS action1 [, action2, ...]
[ON [schéma.]nom_objet]
[WHEN condition EVALUATE PER SESSION | INSTANCE | STATEMENT]
[CONTAINER = CURRENT | ALL];
-- Activation de la politique
AUDIT POLICY nom_politique
[BY utilisateur1 [, utilisateur2, ...]]
[WHENEVER [NOT] SUCCESSFUL];
Paramètres essentiels
| Paramètre | Description |
|---|---|
BY SESSION | Enregistre une seule ligne par session, même si l’action est répétée |
BY ACCESS | Enregistre une ligne par action exécutée (plus précis) |
WHENEVER SUCCESSFUL | Trace uniquement les actions qui ont réussi |
WHENEVER NOT SUCCESSFUL | Trace uniquement les actions qui ont échoué |
BY utilisateur | Restreint l’audit à un utilisateur spécifique |
CONTAINER | Applicable dans un environnement multitenant (CDB/PDB) |
Exemples pratiques de la commande AUDIT Oracle SQL
Exemple 1 — Audit des connexions échouées (Traditional Auditing)
Contexte métier : Un responsable sécurité souhaite détecter les tentatives de connexion infructueuses sur la base de données de production afin d’identifier d’éventuelles attaques par force brute.
-- Activation de l'audit des connexions
-- Seules les tentatives échouées seront enregistrées
AUDIT CREATE SESSION
WHENEVER NOT SUCCESSFUL;
-- Vérification des événements dans la vue d'audit
SELECT OS_USERNAME,
USERNAME,
TERMINAL,
TIMESTAMP,
RETURNCODE
FROM DBA_AUDIT_SESSION
WHERE RETURNCODE != 0
ORDER BY TIMESTAMP DESC;
Le code retour RETURNCODE = 1017 indique un mot de passe incorrect, tandis que 1005 signale un mot de passe vide. Ces informations sont consultables dans la vue DBA_AUDIT_SESSION.
Exemple 2 — Politique d’audit unifié sur une table sensible (Unified Auditing)
Contexte métier : La direction financière d’une entreprise exige que toutes les modifications (INSERT, UPDATE, DELETE) effectuées sur la table PAIE.SALAIRES soient tracées afin de répondre aux exigences de l’audit interne annuel.
-- Création d'une politique d'audit sur la table SALAIRES
CREATE AUDIT POLICY audit_salaires
ACTIONS INSERT, UPDATE, DELETE
ON PAIE.SALAIRES;
-- Activation de la politique pour tous les utilisateurs
-- Chaque action individuelle sera enregistrée
AUDIT POLICY audit_salaires;
-- Consultation des événements dans la vue unifiée
SELECT EVENT_TIMESTAMP,
DB_USERNAME,
ACTION_NAME,
OBJECT_SCHEMA,
OBJECT_NAME,
SQL_TEXT
FROM UNIFIED_AUDIT_TRAIL
WHERE OBJECT_NAME = 'SALAIRES'
AND OBJECT_SCHEMA = 'PAIE'
ORDER BY EVENT_TIMESTAMP DESC;
-- Désactivation de la politique si nécessaire
NOAUDIT POLICY audit_salaires;
-- Suppression de la politique
DROP AUDIT POLICY audit_salaires;
La vue UNIFIED_AUDIT_TRAIL consolide tous les événements et offre la colonne SQL_TEXT qui permet de visualiser exactement l’instruction exécutée, ce qui est particulièrement utile lors d’investigations.
Erreurs courantes avec AUDIT Oracle SQL
Erreur : ORA-00942 ou absence de résultats dans DBA_AUDIT_TRAIL
Symptôme : Vous activez un audit mais aucune ligne n’apparaît dans DBA_AUDIT_TRAIL ou DBA_AUDIT_SESSION.
Cause : Le paramètre d’initialisation AUDIT_TRAIL est positionné à NONE, ce qui signifie que l’écriture des données d’audit est désactivée au niveau de l’instance.
Solution :
-- Vérifier la valeur actuelle du paramètre
SHOW PARAMETER AUDIT_TRAIL;
-- Activer l'audit vers la base de données
ALTER SYSTEM SET AUDIT_TRAIL = DB SCOPE = SPFILE;
-- Redémarrer l'instance pour que le changement soit pris en compte
-- SHUTDOWN IMMEDIATE;
-- STARTUP;
Attention : En mode Unified Auditing pur (Oracle 12c+), le paramètre AUDIT_TRAIL n’est plus utilisé. Vérifiez si l’audit unifié est actif avec la requête suivante :
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
Résumé
| Point clé | Détail |
|---|---|
| Commande principale | AUDIT / NOAUDIT / CREATE AUDIT POLICY |
| Deux modes disponibles | Traditional Auditing et Unified Auditing (12c+) |
| Vues de consultation | DBA_AUDIT_TRAIL, DBA_AUDIT_SESSION, UNIFIED_AUDIT_TRAIL |
| Granularité | Par session (BY SESSION) ou par accès (BY ACCESS) |
| Filtrage | WHENEVER [NOT] SUCCESSFUL, BY utilisateur |
| Privilège requis | AUDIT SYSTEM ou rôle DBA |
| Recommandation Oracle | Préférer Unified Auditing sur Oracle 12c et versions ultérieures |
Bonnes pratiques Oracle
- Privilégier
BY ACCESSpour les tables critiques : contrairement àBY SESSION, cette option trace chaque instruction individuellement, ce qui garantit une traçabilité complète, indispensable pour les audits réglementaires. - Purger régulièrement les données d’audit : les tables et vues d’audit peuvent croître rapidement et impacter les performances. Utilisez le package
DBMS_AUDIT_MGMTpour automatiser la purge des enregistrements obsolètes selon une politique de rétention définie.
Aller plus loin
Pour approfondir vos connaissances sur la sécurité et la gestion des accès en Oracle SQL, voici trois sujets complémentaires qui vous permettront de maîtriser l’environnement sécurisé d’une base Oracle :
- GRANT Oracle SQL : accorder des privilèges aux utilisateurs — Apprenez à gérer finement les droits d’accès sur vos objets et actions système.
- REVOKE Oracle SQL : révoquer des privilèges — Découvrez comment retirer des droits accordés et sécuriser votre environnement.
- CREATE USER Oracle SQL : créer et gérer les comptes utilisateurs — Maîtrisez la création et la configuration des utilisateurs dans Oracle Database.
Sur le même thème
- ROLE Oracle SQL : Gérer les droits et privilèges
- RESTORE POINT Oracle : Gérer les Points de Restauration SQL
- DATABASE LINK Oracle : Connexion entre bases de données
- REVOKE Oracle : Révoquer les privilèges SQL facilement
- CREATE USER Oracle : créer un utilisateur SQL facilement
- FLASHBACK DATABASE Oracle : restauration rapide
