Académique Documents
Professionnel Documents
Culture Documents
CHAPITRE 5 :
AUDIT DES BASES DE DONNEES
AU: 2020/2021
1
Introduction
L’administrateur d’une base de données, a toujours besoin de savoir ce qui
se passe dans la bas données qu’il administre, surtout lorsqu’il y a perte de
données suspecte ou effacement de table index etc. …
Pour cela Oracle donne deux possibilités d’auditer une base de données :
2
Introduction
1. Audit par les triggers, et c’est à l’administrateur d’intervenir
pour écrire les procédures d’audit, et de décider comment et quelles informations doit on
stocker et où.
2.Audit par la commande AUDIT où l’administrateur a seulement besoin d’activer l’audit sur
une action ou un objet, et Oracle s’occupe de l’enregistrement des informations sur l’action
produite.
3
Audit des bases de données par les triggers
4
Audit des bases de données par les
triggers
Un trigger (déclencheur) est un programme qui se déclenche
automatiquement suite à un événement sur une table ou une vue ou
un événement lié à la base de données.
5
Audit des bases de données par les
triggers
Il existe deux types de déclencheurs, system triggers et
DML triggers.
Les system triggers pour les ( LOGON,
STARTUP, CREATE, DROP …)
Les DML triggers pour toutes requêtes (update, select, delete …).
6
Audit des bases de données par les
triggers (Les Systems triggers)
Création d’un trigger
7
Audit des bases de données par les
triggers (Les Systems triggers) :
les évènements système
STARTUP : Evènement déclenché lors de l'ouverture de l'instance
(AFTER seulement)
8
Audit des bases de données par les
triggers (Les Systems triggers) :
les évènements utilisateur
LOGON : Après une connexion (AFTER seulement)
LOGOFF : Avant une déconnexion (BEFORE seulement)
CREATE : Lors de la création d'un objet
ALTER : Lors de la modification d'un objet
DROP : Lors de la suppression d'un objet
GRANT Lors de l'exécution d'une commande GRANT
RENAME Lors de l'exécution d'une commande RENAME
REVOKE Lors de l'exécution d'une commande REVOKE
9
Audit des bases de données par les
triggers (Les Systems triggers)
Exemple 1 : Comment savoir la date et l’heure de chaque
démarrage ou arrêt de la base ?
1. Créez une table trace (action varchar2(50)) ;
2. Créez deux triggers (un pour le démarrage et un autre
pour l’arrêt)
10
Audit des bases de données par les
triggers (Les Systems triggers)
------------------ Démarrage ------------------------
CREATE OR REPLACE TRIGGER TRACE_BD1
AFTER STARTUP ON DATABASE
DECLARE
a constant varchar2(50):='DEMMARAGE DE LA BASE :';
BEGIN
INSERT INTO TRACE VALUES('''||a||TO_CHAR(SYSDATE,'yyyymmdd')||''');
EXCEPTION
WHEN others THEN NULL;
END;
/
----------------- Arrêt ----------------
CREATE OR REPLACE TRIGGER TRACE_BD2
BEFORE SHUTDOWN ON DATABASE
DECLARE
a constant varchar2(50):='ARRET DE LA BASE :';
BEGIN
INSERT INTO TRACE VALUES('''||a||TO_CHAR(SYSDATE,'yyyymmdd)||''');
EXCEPTION
WHEN others THEN NULL;
END; 11
/
Audit des bases de données par les
triggers (Les Systems triggers)
Exemple 2 : On désire journaliser dans la table
log_trigger_table (user, date, action) toute connexion
et déconnexion à un schéma. Ecrire les triggers
nécessaires.
12
Audit des bases de données par les
triggers (Les Systems triggers)
------------------ Connexion ------------------------
Create or Replace trigger Log_On_trigger
AFTER LOGON ON DATABASE
Begin
insert into log_trig_table values(user,sysdate,' logging on');
End;
/
----------------- Déconnexion----------------
Create or Replace trigger Log_Off_trigger
BEFORE LOGOFF ON DATABASE
Begin
insert into log_trig_table values(user,sysdate,' logging off');
End; 13
Audit des bases de données par les
triggers (Les DML triggers)
Création d’un trigger
CREATE [OR REPLACE] TRIGGER nom_trigger
{AFTER | BEFORE} DELETE | INSERT | UPDATE [OF {nom_col { , nom_col
} }] [ OR …]
ON nom_table [FOR EACH ROW]
[WHEN ( condition ) ]
DECLARE
--- Déclarations
BEGIN
--- Contenu du bloc PL/SQL
END;
/
14
Audit des bases de données par les
triggers (Les DML triggers)
Création d’un trigger
CREATE [OR REPLACE] TRIGGER nom_trigger
{AFTER | BEFORE} DELETE | INSERT | UPDATE [OF {nom_col { , nom_col
} }] [ OR …]
ON nom_table [FOR EACH ROW]
[WHEN ( condition ) ]
DECLARE
--- Déclarations
BEGIN
--- Contenu du bloc PL/SQL
END;
/
15
Audit des bases de données par les
triggers (Les DML triggers)
Pour l’entête on définit : condition supplémentaire de
La table à laquelle le trigger est déclenchement (clause
lié, WHEN) le trigger se
Les instructions du LMD qui
déclenchera pour chaque ligne
déclenchent le trigger vérifiant la condition..
Le moment où le trigger va se
déclencher par rapport à
l'instruction LMD (avant ou
après)
Il est possible d’ajouter une
16
Audit des bases de données par les
triggers (Les DML triggers)
After ou Before ?
Si le trigger doit déterminer si l'instruction LMD est
autorisée, utiliser BEFORE.
17
Audit des bases de données par les
triggers (Les DML triggers)
Dans un trigger , on peut faire référence à la ligne courante,
celle pour laquelle le trigger s'exécute.
Pour cette ligne, on a accès à la valeur avant l'instruction LMD
(nommée :old) et à la valeur après l'instruction (nommée :new)
Dans la clause WHEN, les colonnes avec NEW ou OLD sont
nommées sans les ‘:’ .
INSERT UPDATE DELETE
18
Audit des bases de données par les
triggers (Les DML triggers)
Si le trigger est activé par plusieurs événements (par ex : INSERT
OR DELETE), il est possible d’utiliser des prédicats booléens
prédéfinis tels que INSERTING, DELETING ou UPDATING.
19
Audit des bases de données par
les triggers (Les DML triggers)
Ordre d’activation
Si il ya plusieurs triggers sur une même table, l'ordre
d'activation est :
20
Audit des bases de données par
les triggers (Les DML triggers)
Exemple 1 :
Ecrire le trigger T_Date_Embauche permettant de
vérifier que la date d’embauche HIRE_DATE lors de
l’ajout d’un nouveau employé dans la table EMPLOYEES
ne peut être supérieure à la date système.
21
Audit des bases de données par
les triggers (Les DML triggers)
Exemple 1
Create or Replace Trigger T_date_embauche
Before insert
on employees
For each row
Begin
if( :new.hire_date>sysdate )then
raise_application_error(-20001,'insertion impossible!!');
end if;
End;
/
22
Audit des bases de données par
les triggers (Les DML triggers)
Exemple 2 :
Ecrire le trigger Verifier_MAJ_Employees ne
permettant l’insertion dans la table EMPLOYEES qu’à
l’utilisateur HR et affichant pour toute modification un
message indiquant l’opération effectuées.
23
Audit des bases de données par
les triggers (Les DML triggers)
Exemple 2
Create or Replace Trigger Verifier_MAJ_Employees
Before INSERT or UPDATE
on employees
Begin
if inserting then
if user != 'HR' then
raise_application_error(-20001,‘User non autorisé');
end if;
end if;
if updating then
dbms_output.put_line('employé va être mis à jour!');
end if;
end;
/
24
Audit des bases de données par
les triggers (Les DML triggers)
Exemple 3 :
Ecrire le trigger Historique_Sal_Emp qui pour chaque
abaissement de salaire ajoute une ligne dans la table
Salary_History indiquant le numéro de l’employé ,la
date de l’opération et le montant d’abaissement.
25
Audit des bases de données par
les triggers (Les DML triggers)
Exemple 3
Create or Replace trigger Historique_Sal_Emp
AFTER update OF salary
on employees
for each row
when (old.salary>new.salary)
Begin
insert into Salary_History values
(:old.employee_id, sysdate, :old.salary - :new.salary);
End;
/ 26
Gestion des Trigger
Désactiver ou réactiver un trigger :
ALTER TRIGGER nom_trigger DISABLE | ENABLE;
Désactiver ou réactiver tous les trigger d’une table :
ALTER TABLE nom_table DISABLE | ENABLE ALL TRIGGERS;
Recompiler un trigger pour une table :
ALTER TRIGGER nom_trigger COMPILE;
Suppression d’un trigger :
DROP TRIGGER nom_trigger ;
27
Audit des bases de données par la commande AUDIT
28
Surveiller les activités suspectes
La surveillance ou l’audit doit faire partie intégrante des procédures
de sécurité.
Un système sécurisé garantit la confidentialité des données qu'il
contient. La sécurité englobe plusieurs aspects :
Limiter l'accès aux données et aux services
doit passer par l'application du principe du moindre privilège
Authentifier les utilisateurs
Gestion des utilisateurs et des profils
Surveiller les activités suspectes
Même autorisés, les utilisateurs authentifiés peuvent parfois
compromettre le système
Audit
29
Surveiller les activités suspectes
Appliquer le principe du moindre privilège
Protéger le dictionnaire de données
Révoquer les privilèges non nécessaires de PUBLIC
Limiter les utilisateurs dotés de privilèges d'administration
….
30
Surveiller les activités suspectes
Appliquer le principe du moindre privilège
Le principe du moindre privilège consiste à n'accorder à un
utilisateur que les privilèges dont il a réellement besoin
pour effectuer une tâche de manière efficace
31
Surveiller les activités suspectes
Révoquer les privilèges non nécessaires de PUBLIC
Etant donné que n'importe quel utilisateur de base de données peut se servir des
privilèges accordés à PUBLIC, vous devez révoquer de PUBLIC les privilèges et rôles
qui ne sont pas indispensables.
Exemple:
32
Surveiller les activités suspectes
Limiter les utilisateurs dotés de privilèges d’administrateur
33
Surveiller les activités suspectes
Protéger le dictionnaire de données
Protéger le dictionnaire de données en prenant soin
d'affecter la valeur FALSE au paramètre d'initialisation
suivant :
O7_DICTIONARY_ACCESSIBILITY = FALSE
34
Audit des bases de données par la
commande AUDIT
Il existe 4 niveaux d'audit :
connexion / déconnexion : surveille les connexions
ordre SQL : audit par type d'ordre SQL utilisé
Privilège système : audit d'un privilège SYSTEM (SELECT ANY,
DROP ANY, CREATE ANY, …..)
objet : un ordre SQL particulier sur un objet particulier (audit
SELECT sur SCOTT.EMP)
A chaque niveau d'audit, on peut de plus surveiller aussi bien LES
SUCCES que LES ECHECS, et avoir une entrée d'audit par
commande utilisateur ou globalement pour la session.
35
Audit des bases de données par la commande
AUDIT
Activé via le paramètre AUDIT_TRAIL
=NONE : désactiver la collecte des enregistrements d’audit
=DB: active l’audit ,enregistrements stockés dans la base de données
=OS: active l’audit, enregistrements stockés dans la traçe d’audit du
système d’exploitation.
Evénements audités :
Evénement de connexion
Utilisation des privilèges système
Utilisation des privilèges objet
Utilisation des instructions SQL :dans ce cas il faut affecter l’option db,extended .
36
Audit des bases de données par la commande
AUDIT
Activation de l'audit de base
de données
Fichier de paramètres L'utilisateur
DBA
exécute une commande
Options d'audit
Génération de la
trace d'audit
Examen des
informations d'audit
Trace d'audit
Trace d'audit du système
d'exploitation
37
Application d’audit
Initialisation du paramètre AUDIT_TRAIL :
SQL>Alter system set audit_trail=DB scope =spfile;
Etendre l’audit sur les requêtes SQL :
SQL>Alter system set audit_trail=DB,extended scope =spfile;
38
Définir les options d’audit
Audit des instructions SQL :
SQL>AUDIT table;
39
Définir les options d’audit
Audit par utilisateur: auditer les actions exécutées par
utilisateur
Auditer toutes les actions réalisées par le compte HR et par
accès :
SQL> AUDIT all by HR by access
Auditer les requêtes SELECT TABLE du compte HR:
SQL> audit select table by HR by access
Auditer le privilège create session du compte HR :
SQL>Audit create session by HR
40
Afficher les options d’audit
VUES DU DICTIONNAIRE DE DONNEES DESCRIPTION
Exemple :
select object_name,object_type,ins,upd
From dba_obj_audit_opts
Where object_name=‘EMPLOYEES’;
Ins : A : par accès S : par session
41
Afficher les résultats d’audit
VUES DU DICTIONNAIRE DE DONNEES DESCRIPTION
42
Annulation d’audit
Supprimer toutes les entrées d’audit :
truncate table aud$;
Annuler l’audit ciblé : NOAUDIT
Exemple : NOAUDIT INSERT ON HR.EMPLOYEES;
43