Vous êtes sur la page 1sur 43

Cours : Administration des Bases de Données

Enseignante : MSAKNI Imen


L2 RSI 1&2

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 :

1. Audit des bases de données par les triggers


2. Audit des bases de données par la commande AUDIT

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.

 Exemple pour auditer les accès à la base de données, un déclencheur


système LOGON (après une connexion ) est nécessaire .
 Exemple pour auditer toute opération de mise à jour sur une table
particulière , un déclencheur AFTER update OF nom_colonne est
nécessaire

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

CREATE OR REPLACE TRIGGER nom_trigger


{AFTER | BEFORE} évènement_système| évènement_utlisateur
ON DATABASE| SCHEMA
DECLARE
--- Déclarations
BEGIN
--- Contenu du bloc PL/SQL
END;
/

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)

 SHUTDOWN : Evènement déclenché avant le processus d'arrêt de


l'instance (non déclenché en cas d'arrêt brutal du serveur) (BEFORE
seulement)

 SERVERERROR : Evènement déclenché lors d'une erreur Oracle


(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.

 Si le trigger doit "fabriquer" la valeur d'une colonne pour


pouvoir ensuite la mettre dans la table : utiliser BEFORE

 Si on a besoin que l'instruction LMD soit terminée pour


exécuter le corps du trigger : utiliser AFTER

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

:OLD.colonne NULL Valeur avant modification Valeur avant suppression

:NEW.colonne Valeur à insérer Valeur avant modification NULL

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.

IF INSERTING THEN ... END IF;


IF DELETING THEN ... END IF;
IF UPDATING THEN ... END IF;

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 :

1. BEFORE niveau table,


2. BEFORE niveau ligne, aussi souvent que de lignes concernées,
3. AFTER niveau ligne, aussi souvent que de lignes concernées,
4. AFTER niveau table.

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:

SQL> REVOKE execute ON …… FROM PUBLIC;

32
Surveiller les activités suspectes
Limiter les utilisateurs dotés de privilèges d’administrateur

 Limite les types de privilège suivants :


 Octroi des privilèges système et objet
 Connexions dotées des privilèges SYS : SYSDBA et SYSOPER
 Privilèges de type DBA, tels que DROP ANY TABLE
 Exemple : répertorier tous les utilisateurs avec le rôle DBA :

SQL> SELECT grantee FROM dba_role_privs


2 WHERE granted_role = 'DBA';
GRANTEE
------------------------------
SYS
SYSTEM
SQL> SELECT * FROM V$PWFILE_USERS;
USERNAME SYSDBA SYSOPER
------------------------------
SYS TRUE TRUE

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

 Cette configuration empêche les utilisateurs dotés du


privilège système ANY TABLE d'accéder aux tables de base
du dictionnaire de données

 La valeur FALSE empêche également l'utilisateur SYS de se


connecter sous un autre compte que SYSDBA.

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

Définition des Base de données


options d'audit
Processus serveur

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;

 Audit des privilèges système (non ciblé et ciblé)


SQL>AUDIT select any table, create any trigger;
SQL>AUDIT select any table BY hr BY SESSION;
 Audit des privilèges objet (non ciblé et ciblé)
SQL>AUDIT ALL on hr.employees;
SQL>AUDIT UPDATE,DELETE on hr.employees BY ACCESS;
 Audit de session (non ciblé et ciblé)
SQL>AUDIT SESSION WHENEVER NOT SUCCESSFUL;
SQL>AUDIT SESSION BY HR WHENEVER NOT SUCCESSFUL;

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

ALL_DEF_AUDIT_OPTS Options d’audit par défaut


DBA_STMT_AUDIT_OPTS Options d’audit des instructions
DBA_PRIV_AUDIT_OPTS Options d’audit des privilèges
DBA_OBJ_AUDIT_OPTS Options d’audit des objets de schéma

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

DBA_AUDIT_TRAIL Toutes les entrées de la trace d’audit


DBA_AUDIT_EXISTS Enregistrements concernant AUDIT
EXISTS/NOT EXISTS
DBA_AUDIT_OBJECT Enregistrements concernant les objets du
shéma
DBA_AUDIT_SESSION Toutes les entrées de connexion et de
déconnexion
DBA_AUDIT_STATEMENT Enregistrement d’audit des instructions

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

Vous aimerez peut-être aussi