AUDIT Oracle SQL : Surveiller et tracer les accès

Découvrez comment utiliser la commande AUDIT en Oracle SQL pour surveiller les accès et actions sur votre base de données. Syntaxe, exemples et bonnes pratiques.

Illustration du tutoriel SQL Oracle : AUDIT Oracle SQL : Surveiller et tracer les accès

Publicité

🧪 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_trail de l’instance.
  • L’audit unifié (Unified Auditing) : introduit à partir d’Oracle 12c, il centralise tous les événements dans une vue unique UNIFIED_AUDIT_TRAIL et 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ètreDescription
BY SESSIONEnregistre une seule ligne par session, même si l’action est répétée
BY ACCESSEnregistre une ligne par action exécutée (plus précis)
WHENEVER SUCCESSFULTrace uniquement les actions qui ont réussi
WHENEVER NOT SUCCESSFULTrace uniquement les actions qui ont échoué
BY utilisateurRestreint l’audit à un utilisateur spécifique
CONTAINERApplicable 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.

Publicité

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 principaleAUDIT / NOAUDIT / CREATE AUDIT POLICY
Deux modes disponiblesTraditional Auditing et Unified Auditing (12c+)
Vues de consultationDBA_AUDIT_TRAIL, DBA_AUDIT_SESSION, UNIFIED_AUDIT_TRAIL
GranularitéPar session (BY SESSION) ou par accès (BY ACCESS)
FiltrageWHENEVER [NOT] SUCCESSFUL, BY utilisateur
Privilège requisAUDIT SYSTEM ou rôle DBA
Recommandation OraclePréférer Unified Auditing sur Oracle 12c et versions ultérieures

Bonnes pratiques Oracle

  1. Privilégier BY ACCESS pour 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.
  2. 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_MGMT pour 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 :

Sur le même thème

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité