Vous êtes sur la page 1sur 101

CONTRLE DINTEGRITE ET SECURITE DANS LES BASES DE DONNEES

J. Akoka I. Wattiau
J. Akoka - I. Wattiau 1

Rle :
Faire un systme fiable et performant Assurer l'intgrit des donnes

Notions de base Contrainte d'intgrit :


assertion qui doit toujours tre vrifie par les donnes de la base.

Base de donnes cohrente :


dont l'ensemble des contraintes d'intgrit est vrifi
J. Akoka - I. Wattiau 2

Quelques types de contraintes


contraintes de domaine o contraintes dobligation o dpendances fonctionnelles o dpendances rfrentielles ou d'inclusion o contraintes arithmtiques o contraintes d'intgrit temporelles Transaction : unit de traitement squentiel qui,
o

applique une base de donnes cohrente, restitue une base de donnes cohrente
J. Akoka - I. Wattiau 3

Dfinition des contraintes dintgrit


laide du langage de dfinition de donnes (SQL) pour la plupart des contraintes A laide de triggers dans le cas contraire

J. Akoka - I. Wattiau

Objectif :

Scurit des donnes


ASSURER LA CONFIDENTIALITE on identifie les utilisateurs par un nom ou un numro on vrifie l'identit (exemple : mot de passe) on dfinit des autorisations

Principe :

1er exemple :
D U PO N T D U R A N T D U B O IS
J. Akoka - I. Wattiau

une matrice d'autorisation


c lie n t 10 00 10 s a la r i 11 10 00 p r o d u it 11 11 11

1er bit : lecture 2me bit : criture

0 accs interdit 1 accs autoris 5

2me exemple : des niveaux d'autorisation Niveau 1 Niveau 2 Niveau 3 : : : salari client produit : : : niveau 1 niveau 2 niveau 3

DUPONT (PDG) DURANT (rel. client) DUBOIS (client)

Niveau du sujet accdant <= niveau de lobjet accd


Modle MAC (Mandatory Access Control)

J. Akoka - I. Wattiau

1. Les triggers

Cration de triggers

Exemple :
 CREATE TRIGGER nom BEFORE DELETE OR INSERT OR UPDATE ON table FOR EACH ROW WHEN (new.empno>0) DECLARE ............ <<<<dclarations>>>> BEGIN ............ <<<< bloc d'instructions PL/SQL>>>> END;

J. Akoka - I. Wattiau

Le nom du trigger
 doit tre unique dans un mme schma  peut tre le nom d'un autre objet (table, vue, procdure) mais viter

J. Akoka - I. Wattiau

Option BEFORE/AFTER/ INSTEAD OF


 elle prcise le moment de l'excution du trigger  les triggers AFTER row sont plus efficaces que les BEFORE row parce qu'ils ne ncessitent pas une double lecture des donnes  le trigger INSTEAD OF permet par exemple de contourner linterdiction de mise jour au travers de vues
J. Akoka - I. Wattiau 10

Dfinition du trigger
 Elle comprend le type d'instruction SQL qui dclenche le trigger : DELETE, INSERT, UPDATE On peut en avoir une, deux ou les trois.  Pour UPDATE, on peut spcifier une liste de colonnes. Dans ce cas, le trigger ne se dclenchera que si l'instruction UPDATE porte sur l'une au moins des colonnes prcise dans la liste.  S'il n'y a pas de liste, le trigger est dclench pour toute instruction UPDATE portant sur la table. J. Akoka - I. Wattiau

11

 La dfinition du trigger prcise la table associe au trigger :  une et une seule table  pas une vue.

J. Akoka - I. Wattiau

12

Types de triggers
 Le type dun trigger dtermine :
 quand ORACLE dclenche le trigger :
  

BEFORE : avant lvnement dclencheur AFTER : aprs lvnement dclencheur INSTEAD OF : la place de lvnement dclencheur

 combien de fois ORACLE dclenche le trigger.

 Le type du trigger est dfini par lutilisation de lune ou lautre des options suivantes :
BEFORE, AFTER, INSTEAD OF, FOR EACH ROW

J. Akoka - I. Wattiau

13

ORACLE propose deux types de triggers


 les triggers lignes qui se dclenchent individuellement pour chaque ligne de la table affecte par le trigger,  les triggers globaux qui sont dclenchs une seule fois.  Si l'option FOR EACH ROW est spcifie, c'est un trigger ligne, sinon c'est un trigger global.

J. Akoka - I. Wattiau

14

 Pour les triggers lignes, on peut introduire une restriction sur les lignes l'aide d'une expression logique SQL : c'est la clause WHEN :
 Cette expression est value pour chaque ligne affecte par le trigger.  Le trigger n'est dclench sur une ligne que si l'expression WHEN est vrifie pour cette ligne.  L'expression logique ne peut pas contenir une sous-question.  Par exemple, WHEN (new.empno>0) empchera l'excution du trigger si la nouvelle valeur de EMPNO est 0, ngative ou NULL.

J. Akoka - I. Wattiau

15

 Le corps du trigger est un bloc PL/SQL :


 Il peut contenir du SQL et du PL/SQL.  Il est excut si l'instruction de dclenchement se produit et si la clause de restriction WHEN, le cas chant, est value vrai.  Il est diffrent pour un trigger ligne et pour un trigger global.

J. Akoka - I. Wattiau

16

 Les noms de corrlation


 Dans un trigger ligne, on doit pouvoir accder aux ancienne et nouvelle valeurs de colonne de la ligne.  Les noms de corrlation permettent de dsigner ces deux valeurs : un nom pour l'ancienne et un pour la nouvelle.  Si l'instruction de dclenchement du trigger est INSERT, seule la nouvelle valeur a un sens.  Si l'instruction de dclenchement du trigger est DELETE, seule l'ancienne valeur a un sens.

J. Akoka - I. Wattiau

17

   

La nouvelle valeur est appele :new.colonne L'ancienne valeur est appele :old.colonne Exemple : IF :new.salaire < :old.salaire ........ Si un trigger ligne BEFORE modifie la nouvelle valeur d'une colonne, un ventuel trigger ligne AFTER dclench par la mme instruction voit le changement effectu par le trigger BEFORE.

J. Akoka - I. Wattiau

18

L'option REFERENCING :
Si une table s'appelle NEW ou OLD, on peut utiliser REFERENCING pour viter l'ambigut entre le nom de la table et le nom de corrlation. Exemple :
CREATE TRIGGER nomtrigger BEFORE UPDATE ON new REFERENCING new AS newnew FOR EACH ROW BEGIN :newnew.colon1:= TO_CHAR(:newnew.colon2); END;

J. Akoka - I. Wattiau

19

Les prdicats conditionnels INSERTING, DELETING et UPDATING


Quand un trigger comporte plusieurs instructions de dclenchement (par exemple INSERT OR DELETE OR UPDATE), on peut utiliser des prdicats conditionnels (INSERTING, DELETING et UPDATING) pour excuter des blocs de code spcifiques pour chaque instruction de dclenchement. Exemple :
CREATE TRIGGER ... BEFORE INSERT OR UPDATE ON employe ....... BEGIN ...... IF INSERTING THEN ....... END IF; IF UPDATING THEN ........ END IF; ...... END; J. Akoka - I. Wattiau 20

 UPDATING peut tre suivi d'un nom de colonne :


CREATE TRIGGER ... BEFORE UPDATE OF salaire, commission ON employe ....... BEGIN ...... IF UPDATING ('salaire') THEN ........ END IF; ...... END;

J. Akoka - I. Wattiau

21

 Nombre de triggers par table


 On peut avoir au maximum un trigger de chacun des types suivants pour chaque table :
BEFORE UPDATE row BEFORE DELETE row BEFORE INSERT statement BEFORE INSERT row BEFORE UPDATE statement BEFORE DELETE statement AFTER UPDATE row AFTER DELETE row AFTER INSERT statement AFTER INSERT row AFTER UPDATE statement AFTER DELETE statement.

 Mme pour UPDATE, on ne peut pas en avoir plusieurs avec des noms de colonnes J. Akoka - I. Wattiau diffrents.

22

 Instructions SQL autorises


 les instructions du LMD sont autorises  les instructions du LDD ne sont pas autorises  les instructions de contrle de transaction (ROLLBACK, COMMIT) ne sont pas autorises.

J. Akoka - I. Wattiau

23

 Ordre de traitement des lignes


 On ne peut pas grer l'ordre des lignes traites par une instruction SQL.  On ne peut donc pas crer un trigger qui dpende de l'ordre dans lequel les lignes sont traites.

 Triggers en cascade
 Un trigger peut provoquer le dclenchement d'un autre trigger.  ORACLE autorise jusqu' 32 triggers en cascade un moment donn.

J. Akoka - I. Wattiau

24

 Activation dun trigger


 Un trigger peut tre activ ou dsactiv.  Sil est dsactiv, ORACLE le stocke mais lignore.  On peut dsactiver un trigger si :
i i

il rfrence un objet non disponible on veut charger rapidement un volume de donnes important ou recharger des donnes dj contrles.

 Par dfaut, un trigger est activ ds sa cration.  Pour dsactiver un trigger, on utilise linstruction
ALTER TRIGGER avec loption DISABLE : ALTER TRIGGER nomtrigger DISABLE;

 On peut dsactiver tous les triggers associs une table avec la commande :
ALTER TABLE nomtable DISABLE ALL TRIGGERS;

 A linverse on peut ractiver un trigger :


ALTER TRIGGER nomtrigger ENABLE; ou tous les triggers associs une table : ALTER TABLE nomtable ENABLE ALL TRIGGERS;

J. Akoka - I. Wattiau

25

Recherche dinformation sur les triggers


Les dfinitions des triggers sont stockes dans les tables de la mtabase, notamment dans les tables USER_TRIGGERS, ALL_TRIGGERS et DBA_TRIGGERS

La procdure raise_application_error(error_number,error_message)


error_number doit tre un entier compris entre -20000 et -20999 error_message doit tre une chane de 500 caractres maximum. Quand cette procdure est appele, elle termine le trigger, dfait la transaction (ROLLBACK), renvoie un numro d'erreur dfini par l'utilisateur et un message l'application.
J. Akoka - I. Wattiau 26

 Gestion d'exceptions
 Si une erreur se produit pendant l'excution d'un trigger, toutes les mises jour produites par le trigger ainsi que par l'instruction qui l'a dclench sont dfaites.  On peut introduire des exceptions en provoquant des erreurs.


Une exception est une erreur gnre dans une procdure PL/SQL. Elle peut tre prdfinie ou dfinie par l'utilisateur. Un bloc PL/SQL peut contenir un bloc EXCEPTION grant les diffrentes erreurs possibles avec des clauses WHEN. Une clause WHEN OTHERS THEN ROLLBACK; gre le cas des erreurs non prvues.
27

J. Akoka - I. Wattiau

 Exceptions exemples

prdfinies

quelques

NO_DATA_FOUND cette exception est gnre quand un SELECT INTO ne retourne pas de lignes DUP_VAL_ON_INDEX tentative d'insertion d'une ligne avec une valeur dj existante pour une colonne index unique ZERO_DIVIDE division par zro etc

J. Akoka - I. Wattiau

28

Utilisation des triggers


Vrification de lintgrit Rpercussion des mises jour sur donnes redondantes Historisation systmatique Audit de la base Rpercussion de mises jour sur copies de donnes rparties

J. Akoka - I. Wattiau 29

Quelques exemples dutilisation de triggers


N O E TI RIT CA G FI TE RI IN VE L DE

EMPLOYE (NUMEMP,NOM,NUMSERV,NUMCHEF,SALAIRE) PROJET (NUMPROJ,NOMPROJ,NUMRESPONSABLE) PARTICIPE (NUMEMP,NUMPROJ)

a) refuser de nommer responsable dun projet quelquun qui ny participe pas Create trigger t1 before insert or update of numresp on projet For each row When (new.numresponsable is not null) Declare noemp integer; Begin Noemp:=0; Select numemp into noemp from participe where numemp=:new.numresponsable and numproj=:new.numproj; If (numemp=0) then raise_application_error(-20100, cet employ ne participe pas au projet !); End if; End;

J. Akoka - I. Wattiau

30

Create trigger t2 before delete on participe For each row Declare noemp integer; Begin Noemp:=0; Select numresponsable into noemp from projet where numresponsable=:old.numemp and numproj=:old.numproj;

If (numemp=0) then raise_application_error(-20101,cet employ est le responsable du projet !); End if; End;

N O E TI RIT CA G FI TE RI IN VE L DE

J. Akoka - I. Wattiau 31

b) au contraire, au moment de laffectation dun responsable un projet, vrifier quil y participe, sinon le mettre comme participant aussi. Create trigger t3 after insert or update of numresp on projet For each row When (new.numresponsable is not null) Declare noemp integer; Begin Noemp:=0;

Select numemp from participe where numemp=:new.numresponsable and numproj=:new.numproj; If (numemp=0) then insert into participe values (:new.numresponsable,:new.numproj,null); End if; End;

E E RIT AG EG RC T O IN F L DE

J. Akoka - I. Wattiau

32

c) vrifier que la somme des quotas de participation dun employ aux projets nexcde jamais 100.

Create trigger t4 before insert or update on participe For each row when (new.quota is not null) Declare somme integer; Begin Somme:=0; Select sum(quota) into somme from participe where numemp=:new.numemp; If somme+:new.quota > 100 then raise_application_error(-20200,attention au surmenage); End if; End;

N O E TI RIT CA G FI TE RI IN VE L DE

J. Akoka - I. Wattiau

33

On considre les tables relationnelles ci-dessous COMMANDE(ncom, montant, datcom) IGNECOMMANDE (ncom nlig, qt prixunit) ) Comment assurer la mise jour automatique du montant de la commande ? re solution : trigger ligne

O C LL Ce

11

N O SI US .J. RC .A PE E M RE D

Create trigger t5 after insert or update or delete on commande or each row Declare montantligne number, nummaj integer; Begin inserting then montantligne := :new.qte * :new.prixunit; ummaj := :new.ncom; end if; deleting then montantligne := - :old.qte * :old.prixunit; ummaj := :old.ncom; end if;

C FF D B

IIf

nn

IIf

nn

updating then montantligne := :new.qte * :new.prixunit - :old.qte * :old.prixunit; ummaj := :new.ncom; end if; Update commande set montant=montant+montantligne where ncom=nummaj; nd;
J. Akoka - I. Wattiau 34

IIf U

nn

EE

2me solution : trigger global Create trigger t6 after insert or update or delete on commande Begin Update commande Set montant=(select sum(qte*prixunit) from lignecommande Where ncom=commande.ncom); End;

N O SI US .J. RC .A PE E M RE D

J. Akoka - I. Wattiau

35

On considre les tables relationnelles ci-dessous: COMMANDE(ncom, montant, datcom, tat) ANCCOMMANDE(ncom, montant, datcom) On peut crire un trigger qui, ds que la table des commandes contient plus de 100 commandes retire, sil y en a, les commandes soldes et les archive dans ANCCOMMANDE. On considre les deux tables ci-dessous: TABLE1(cl col1 col2 col3) TABLE2(cl col1 col2 col3) On suppose que TABLE2 est la copie de TABLE1 sur un autre site.

On peut crire un trigger qui rpercute toutes les mises jour de TABLE1 sur TABLE2. On considre la table T ci-dessous: T(cl col1 col2) et on lui adjoint une table daudit: TA(opration datop) de sorte que toute mise jour sur T entrane lenregistrement de lopration (INSERT, UPDATE, DELETE) et son heure dans la table T1. J. Akoka - I. Wattiau

H TO IS TI SA RI O P RE CA LI TI O N
36

T DI AU

Trigger INSTEAD OF
Oracle offre la possibilit lutilisateur de crer un trigger (dclencheur) sur la vue. CREATE OR REPLACE TRIGGER TRG_INSTEAD_INSERT_VUE INSTEAD OF INSERT ON VW_NOM_VUE DECLARE BEGIN INSERT INTO table1 INSERT INTO table2 END TRG_INSTEAD_INSERT_VUE; / Un trigger INSTEAD OF ne peut tre dfini que sur une vue et peut remplacer les insertions, les mises jour et/ou les suppressions Une vue ne supporte pas les triggers BEFORE et AFTER. Ce trigger est dclar INSTEAD OF INSERT, cest--dire quil va sexcuter lors dune demande dinsertion et va remplacer celle-ci.
J. Akoka - I. Wattiau 37

Exemple de trigger INSTEAD


CREATE OR REPLACE VIEW VW_EMP_CLERK AS Select empno "Numro", ename "Nom", deptno "Dept.", sal "Salaire From EMP Where JOB = 'CLERK'; Vue cre. select * from VW_EMP_CLERK ; Numro Nom Dept. Salaire ---------- ---------- ---------- ---------Insert into VW_EMP_CLERK values( 9994, 'Schmoll', 20, 2500 ) ; Insertion dans la table EMP 1 ligne cre. Mais cette insertion ne se voit pas au travers de la vue, car le champ JOB nest pas renseign.

7369 SMITH 20 880 7876 ADAMS 20 1210 7900 JAMES 30 1045 7934 MILLER 10 1430 4 ligne(s) slectionne(s). CREATE OR REPLACE TRIGGER TRG_BIR_VW_EMP_CLERK INSTEAD OF INSERT ON VW_EMP_CLERK FOR EACH ROW Begin Insert into EMP ( empno, ename, deptno, sal, job ) Values (:NEW."Numro", :NEW."Nom", :NEW."Dept.", :NEW."Salaire", 'CLERK' ) ; End ; / Wattiau J. Akoka - I. 38 Dclencheur cr.

Triggers sur vnements systme


CREATE OR REPLACE TRIGGER logon_trig AFTER logon ON SCHEMA BEGIN INSERT INTO log_trig_table (user_id, log_date, action) VALUES (user, sysdate, dbut de connexion); END; CREATE OR REPLACE TRIGGER logoff_trig AFTER logoff ON SCHEMA BEGIN INSERT INTO log_trig_table (user_id, log_date, action) VALUES (user, sysdate, fin de connexion); END;

Pour chaque vnement systme dclenchant, Oracle ouvre un domaine de transaction autonome

39

J. Akoka - I. Wattiau

Triggers et procdures
CREATE TRIGGER test BEFORE INSERT ON EMP CALL log_execution;

Un trigger peut appeler une procdure


Instruction CALL

J. Akoka - I. Wattiau

40

Triggers pour la scurit


CREATE OR REPLACE TRIGGER secure_emp BEFORE INSERT OR UPDATE OR DELETE ON emp BEGIN IF TO_CHAR(sysdate, DY IN (SAT,SUN)) THEN RAISE_APPLICATION_ERROR (-20505, Modification sur la table EMP impossible le week-end); END IF; END;

J. Akoka - I. Wattiau

41

Conseils

Utiliser des triggers pour garantir que, lorsqu'une opration spcifique est effectue, les actions lies ont aussi ralises. N'utiliser les triggers que pour les oprations globales, centralises qui doivent tre dclenches indiffremment de l'utilisateur ou de l'application. N'utiliser des triggers que s'il n'y a pas d'autre possibilit intgre dans Oracle (par exemple des contraintes dclaratives dfinies avec la table). Ne pas crer des triggers rcursifs :
 par exemple, un trigger AFTER UPDATE sur une table qui ferait un UPDATE sur la mme table.

J. Akoka - I. Wattiau

Limiter la taille des triggers : la premire utilisation, le trigger est compil (prfrer une procdure stocke, dj compile).

42

Limites des triggers


Certaines contraintes complexes ne peuvent tre vrifies au moyen de triggers car le dclenchement du trigger ne peut tre diffr au COMMIT Limite Oracle : la condition du WHEN ne peut faire intervenir de SELECT

J. Akoka - I. Wattiau

43

Limites des triggers (2)


Oracle : Un trigger ligne ne peut pas lire et/ou modifier la table concerne (appele table mutante) par l'instruction (INSERT, UPDATE ou DELETE) qui a dclench ce trigger. Exemple :
Table initiale EMPLOYE NOM Dupont Durand Dubois SALAIRE 1000 1200 1400 Table mutante EMPLOYE NOM Dupont Durand Dubois SALAIRE 1100 1200 1400

UPDATE EMPLOYE SET salaire=salaire*1.1;

Instruction SQL qui dclenche un trigger ligne AFTER


J. Akoka - I. Wattiau

Le trigger ligne ne peut consulter cette table qui contient des donnes inconsistantes
44

Solutions au problme de la table mutante

Si possible, ajouter une donne calcule (dans une autre table) pour viter daccder cette table Remplacer par un trigger global Utiliser une table temporaire Utiliser des variables globales Utiliser un trigger INSTEAD OF Lintercepter sous forme dEXCEPTION et lignorer
45

J. Akoka - I. Wattiau

2. Le langage PL/SQL

Introduction
Extension du langage SQL norme SQL3 permet :

lutilisation dun sous-ensemble du langage SQL lintroduction de structures procdurales la gestion des erreurs loptimisation de lexcution des requtes
J. Akoka - I. Wattiau 47

Introduction - suite

SQL = L4G, dclaratif C, COBOL, C++, Java = L3G, procdural PL/SQL = dclaratif + procdural PL/SQL= SQL + variables et types prdfinis et dfinis par lutilisateur structures de contrles IF-THEN-ELSE et boucles procdures et fonctions types dobjets et mthodes gestion derreurs

J. Akoka - I. Wattiau

48

Exemple
DECLARE vfiliere VARCHAR2(10):=Histoire; vnom VARCHAR2(15) :=Dupont; vprenom VARCHAR2(15) :=Charles; BEGIN UPDATE etudiant SET filiere=vfiliere WHERE nom=vnom AND prenom=vprenom; IF SQL%NOTFOUND THEN INSERT INTO etudiant (ID, nom, prenom, filiere) VALUES (seqetud.NEXTVAL,vnom,vprenom,vfiliere); END IF; END;

J. Akoka - I. Wattiau

49

Principe
Application client SQL Moteur SQL (noyau) serveur

Application client

bloc PL/SQL

Moteur SQL (noyau) serveur

J. Akoka - I. Wattiau

50

Structure de bloc
Un programme ou une procdure PL/SQL est constitu dun ou de plusieurs blocs Un bloc comporte trois sections :

dclaration : description des structures et des variables utilises dans le bloc corps : instructions du programme + gestion des erreurs traitement des erreurs
J. Akoka - I. Wattiau 51

Structure de bloc
[DECLARE dclaration des variables locales au bloc, constantes, exceptions et curseurs.] BEGIN instructions PL/SQL et SQL possibilit de blocs imbriqus. [EXCEPTION traitement des erreurs.] END;

J. Akoka - I. Wattiau

52

Instructions

Instructions daffectation Instructions SQL : CLOSE, COMMIT, DELETE, FETCH, INSERT, LOCK TABLE, OPEN, ROLLBACK, SAVEPOINT, SELECT, SET TRANSACTION, UPDATE Instructions de contrle itratif ou rptitif Instructions de gestion des curseurs Instructions de gestion des erreurs chaque instruction est termine par ;

J. Akoka - I. Wattiau

53

Gestion des variables


2 types de variables : scalaire et compos Types scalaires : CHAR, NUMBER, DATE et VARCHAR2 + BOOLEAN, SMALLINT, BINARY_INTEGER, DECIMAL, FLOAT, INTEGER, REAL, ROWID dclaration : nom_variable type ou bien nomvariable nom_table.nom_colonne%type variable hte : dfinie dans lenvironnement extrieur au bloc utilise dans le bloc champ dcran en SQL*FORMS, variable de liaison SQL*PLUS dans un bloc :nom

J. Akoka - I. Wattiau

54

Gestion des variables

Types composs
RECORD et TABLE RECORD :

dclaration : nom_variable nomtable%type ou bien nomvariable nomcurseur%type ou bien numration des rubriques :
TYPE nomtype IS RECORD (nomchamp1 typechamp1, nomchamp2 typechamp2, ); nomvariable nomtype;

TABLE :

structure compose dlments dun mme type scalaire, accessible grce un indice de type BINARY_INTEGER (entier sign)
TYPE nomtype IS TABLE OF typechamp, INDEX BY BINARY INTEGER; nomvariable nomtype;

J. Akoka - I. Wattiau

55

Gestion des variables


On peut aussi affecter une variable initiale la dclaration : nomvariable type := valeur; On peut aussi dfinir des constantes par : nomvariable type DEFAULT valeur; ou bien nomvariable CONSTANT type := valeur; Visibilit : limite au bloc et ses bloc imbriqus, sauf si elle y est renomme Conversion de types : explicites avec fonctions TO_DATE, TO_CHAR, TO_NUMBER; implicites par conversion automatique.

J. Akoka - I. Wattiau

56

Affectation dune valeur une variable


Oprateur daffectation Instruction FETCH Instruction SELECT INTO

J. Akoka - I. Wattiau

57

Oprateur daffectation
Variable de type simple : nom_var := valeur; Variable de type compose :

RECORD : nomvar.nomchamp TABLE : nomvar(valeur indice)

J. Akoka - I. Wattiau

58

Valeur rsultat dune requte


SELECT liste dexpressions INTO liste de variables FROM SELECT liste dexpressions INTO nom enregistrement FROM ...

J. Akoka - I. Wattiau

59

Instructions de contrle

Structure alternative - 2 formes IF condition THEN instructions ; [ELSE instructions;] END IF; IF condition THEN instructions; [ELSIF condition THEN instructions;] [ELSE instructions;] END IF;

J. Akoka - I. Wattiau

60

Instructions de contrle

Structure rptitive - 1re forme


LOOP instructions END LOOP; peut contenir des LOOP embotes on en sort par EXIT : IF condition THEN EXIT; ou bien EXIT WHEN condition;

J. Akoka - I. Wattiau

61

Instructions de contrle

Structure rptitive - 2me forme


FOR varindice IN [REVERSE] valeurdbut .. valeurfin LOOP instructions; END LOOP la variable indice est locale la boucle, elle ne doit pas tre dclare la valeur de dbut doit tre une constante ou une variable dclare mme chose pour la valeur de fin le pas est 1 lincrmentation est positive ou ngative (REVERSE)

J. Akoka - I. Wattiau

62

Instructions de contrle

Structure rptitive - 3me forme


WHILE condition LOOP instructions; END LOOP;

J. Akoka - I. Wattiau

63

Curseur

Zone de travail de lenvironnement utilisateur qui contient les informations ncessaires lexcution dun ordre SQL
texte source de lordre SQL forme traduite de lordre tampon correspondant une ligne rsultat statut (tat du curseur) divers
64

J. Akoka - I. Wattiau

Curseur implicite
Gr automatiquement par le noyau quand on excute un ordre SELECT sous SQL*PLUS, quand un ordre SELECT ramne une seule ligne rsultat dans les autres interfaces pour les instructions UPDATE, INSERT et DELETE dans tous les cas

J. Akoka - I. Wattiau 65

Curseur explicite
Pour grer les ordres SELECT renvoyant plusieurs lignes 4 tapes :

dclaration du curseur ouverture du curseur traitement des lignes fermeture du curseur


J. Akoka - I. Wattiau 66

Dclaration du curseur

Un curseur est associ une requte SELECT Il est dclar dans la section DECLARE CURSOR nomcurseur IS requte; ou bien CURSOR nomcurseur (nomparamtre type ) IS requte; le paramtre peut tre utilis dans le SELECT, le WHERE ou ORDER BY

J. Akoka - I. Wattiau

67

Exemple de dclaration
DECLARE CURSOR c1 IS SELECT nom FROM pilote WHERE salaire > 1000; CURSOR c2 (psalaire NUMBER(7,2), pcom NUMBER(7,2) IS SELECT ename FROM emp WHERE salaire > psalaire AND comm > pcom ;

J. Akoka - I. Wattiau

68

Ouverture du curseur
OPEN nomcurseur; OPEN curseur (paramtres effectifs); association par position ou par nom

OPEN c1; OPEN c2(12000, 2500); OPEN c2(pcom => 2500, psal => 12000);
J. Akoka - I. Wattiau 69

Fermeture du curseur
CLOSE nomcurseur; il est possible dutiliser plusieurs fois le mme curseur, ventuellement avec des paramtres diffrents, au cours de lexcution dun mme programme il faut alors louvrir et le fermer chaque utilisation

J. Akoka - I. Wattiau 70

Traitement des lignes


FETCH nomcurseur INTO listevariables; FETCH nomcurseur INTO nomenregistrement; les lignes obtenues par lexcution de la requte SQL sont distribues une une par lexcution dun ordre FETCH inclus dans une structure rptitive

J. Akoka - I. Wattiau 71

Exemple de procdure
Declare -- dclaration du curseur CURSOR C_EMP ( PN$Num IN EMP.empno%Type ) IS SELECT empno,ename ,job FROM EMP WHERE empno = PN$Num ; -- variables d'accueil LN$Num EMP.empno%Type ; LC$Nom EMP.ename%Type ; LC$Job EMP.job%Type ; BEGIN OPEN C_EMP(7369) ; -- ouverture du curseur avec passage du paramtre 7369 LOOP FETCH C_EMP INTO LN$Num, LC$Nom, LC$Job ; -- Lecture d'une ligne EXIT WHEN C_EMP%NOTFOUND; -- sortie lorsque le curseur ne ramne plus de ligne dbms_output.put_line( 'Employ ' || To_char(LN$Num) || ' ' ||LC$Nom ) ; END LOOP ; CLOSE C_EMP ; -- fermeture du curseur OPEN C_EMP( 7521 ) ; -- ouverture du curseur avec passage du paramtre 7521 LOOP FETCH C_EMP INTO LN$Num, LC$Nom, LC$Job ; EXIT WHEN C_EMP%NOTFOUND ; dbms_output.put_line( 'Employ ' || To_char(LN$Num) || ' ' || LC$Nom ) ; END LOOP ; CLOSE C_EMP ; J. Akoka - I. Wattiau END ;

72

Exemple de fonction
CREATE OR REPLACE FUNCTION F_Test_Augmentation (PN$Numemp IN EMP.empno%Type, PN$Pourcent IN NUMBER) RETURN NUMBERISLN$Salaire EMP.sal%Type ; BEGIN SELECT sal INTO LN$Salaire From EMP WHERE empno = PN$Numemp ; -- augmentation virtuelle de l'employ LN$Salaire := LN$Salaire * PN$Pourcent ; RETURN ( LN$Salaire ) ; -- retour de la valeur END; / Fonction cre. Declare LN$Salaire emp.sal%Type ; Begin Select sal Into LN$Salaire From EMP Where empno = 7369 ; dbms_output.put_line( 'Salaire de 7369 avant augmentation ' || To_char( LN$Salaire ) ) ; dbms_output.put_line( 'Salaire de 7369 aprs augmentation ' || To_char( F_Test_Augmentation( 7369, 1.1 ) ) ) ; End ; / Salaire de 7369 avant augmentation 880 Salaire de 7369 aprs augmentation 968 Procdure termine avec succs. J. Akoka PL/SQL - I. Wattiau 73

3. Gestion des utilisateurs (Oracle)

Cration dutilisateurs
CREATE USER utilisateur IDENTIFIED {BY mot de passe | EXTERNALLY } [DEFAULT TABLESPACE tablespace] [TEMPORARY TABLESPACE tablespace] [QUOTA { entier [K,M] | UNLIMITED } ON tablespace] [PROFILE profile][PASSWORD EXPIRE]

Tablespace par dfaut : SYSTEM Quota en Ko ou en Mo dans ce tablespace pour cet utilisateur Sans profil, lutilisateur reoit le profil par dfaut, qui est, sauf chgt, sans limitation de ressource PASSWORD EXPIRE oblige lutilisateur changer son mot de passe avant sa prochaine connexion
75

J. Akoka - I. Wattiau

Exemple
CREATE USER biblio IDENTIFIED BY auteur DEFAULT TABLESPACE data TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON data QUOTA UNLIMITED ON indx PASSWORD EXPIRE;

J. Akoka - I. Wattiau

76

Modification dun utilisateur


ALTER USER utilisateur IDENTIFIED {BY mot de passe | EXTERNALLY } [DEFAULT TABLESPACE tablespace] [TEMPORARY TABLESPACE tablespace] [QUOTA { entier [K,M] | UNLIMITED } ON tablespace] [PROFILE profile] [DEFAULT ROLE { role,| ALL [EXCEPT role,]| NONE}] [PASSWORD EXPIRE];

Permet dactiver les rles qui doivent dj avoir t affects


77

J. Akoka - I. Wattiau

Suppression dun utilisateur


DROP USER utilisateur [CASCADE]; CASCADE supprime les objets crs par lutilisateur

J. Akoka - I. Wattiau

78

Utilisateurs prdfinis
Il y a deux super-utilisateurs (administrateurs) prdfinis : sys et system Le rle prdfini sysdba (ou dba dans danciennes versions) peut tre octroy par les utilisateurs sys et system

J. Akoka - I. Wattiau

79

Vues du dictionnaire
* Table DBA_USERS qui comporte notamment les colonnes : USERNAME, PROFILE, LOCK_DATE, EXPIRY_DATE, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE * Table DBA_TS_QUOTAS contient les quotas allous aux utilisateurs

J. Akoka - I. Wattiau

80

Un profil est un ensemble nomm de limitations de ressources Permet de contrler les ressources utiliss par un utilisateur

Profil utilisateur

CREATE PROFILE profile LIMIT SESSIONS_PER_USER {entier | DEFAULT | UNLIMITED}


connexions en parallle par utilisateur

CPU_PER_SESSION {entier | DEFAULT | UNLIMITED} en centimes de secondes CONNECT_TIME {entier | DEFAULT | UNLIMITED} en secondes IDLE_TIME {entier | DEFAULT | UNLIMITED}
temps max dinactivit en continu pour une session en secondes

LOGICAL_READS_PER_SESSION {entier | DEFAULT | UNLIMITED}


nb max de blocs de donnes lus par session

LOGICAL_READS_PER_CALL {entier | DEFAULT | UNLIMITED}


nb max de blocs de donnes lus par appel au noyau

COMPOSIT_LIMIT {entier | DEFAULT | UNLIMITED} PRIVATE_SGA J. Akoka - I. Wattiau {entier [K,M] | DEFAULT | UNLIMITED};
taille alloue lespace priv dune session dans la SGA
81

Dfinition de la limite compose


ALTER RESOURCE COST CONNECT_TIME 3 LOGICAL_READS_PER_SESSION 10; Dfinit loption COMPOSIT_LIMIT 3 * CONNECT_TIME + 10 * LOGICAL_READS_PER_SESSION

Quand une limite est atteinte, Oracle fait chouer lopration en cours, annule la transaction et envoie un code erreur
J. Akoka - I. Wattiau 82

Gestion des comptes utilisateur


A partir de la version 8 dOracle Limitation des paramtres dutilisation des comptes Options visibles dans la table DBA_PROFILE

CREATE PROFILE profile LIMIT FAILED_LOGIN_ATTEMPTS {entier | DEFAULT | UNLIMITED} PASSWORD_LOCK_TIME {entier | DEFAULT | UNLIMITED}
nb de jours de blocage dun compte aprs un nb dchecs conscutifs

PASSWORD_GRACE_TIME {entier | DEFAULT | UNLIMITED}


nb de jours donns pour changer un mot de passe (aprs avertissement)

PASSWORD_LIFE_TIME {entier | DEFAULT | UNLIMITED} PASSWORD_REUSE_TIME {entier | DEFAULT | UNLIMITED};


nb de jours avant que le mot de passe courant puisse tre rutilis
J. Akoka - I. Wattiau 83

Gestion des privilges


Privilges systme : concernent la connexion la base Oracle et permettent un utilisateur un certain nombre dactions sur la dfinition dobjets de la base Privilges objets : permettent des accs aux objets dsigns, accords par le propritaire de ces objets

J. Akoka - I. Wattiau 84

Privilges systmes
GRANT {privilge systme | rle } [{privilge systme | rle },] TO {utilisateur | rle | public} [,{utilisateur | rle} ,] [WITH ADMIN OPTION];

Avec WITH ADMIN OPTION, les privilges reus peuvent tre transmis dautres utilisateurs ou rles REVOKE privilge FROM {utilisateur|rle|public};

J. Akoka - I. Wattiau

85

Privilges systme
Privilges systme CREATE CLUSTER oui ANY CLUSTER oui DATABASE oui DATABASE LINK oui PUBLIC DATABASE LINK oui ANY INDEX oui LIBRARY oui ANY LIBRARY oui PROCEDURE oui ANY PROCEDURE oui
ANY permet J. Akoka - I. Wattiau

ALTER DROP Divers oui oui

oui

oui oui oui oui oui execute execute


86

oui

un utilisateur dagir sur les objets de tous les utilisateurs

Privilges systme (suite)


Privilges systme PROFILE RESOURCE COST ROLE ANY ROLE ROLLBACK SEGMENT SESSION SEQUENCE ANY SEQUENCE SNAPSHOT ANY SNAPSHOT SYNONYM ANY SYNONYM PUBLIC SYNONYM SYSTEM TABLE CREATE ALTER DROP Divers oui oui oui oui oui oui oui grant oui oui oui oui oui oui oui oui oui select oui oui oui oui oui oui oui oui oui oui oui lock, comment, select, insert, oui oui oui update, delete oui oui oui manage oui oui oui oui oui oui oui become oui oui oui

ANY TABLE TABLESPACE TRIGGER ANY TRIGGER USER VIEW J. Akoka - I. Wattiau ANY VIEW

87

Privilges systme (suite)


Privilges systme ANALYZE ANY AUDIT ANY AUDIT SYSTEM GRANT ANY PRIVILEGE RESTRICTED SESSION UNLIMITED TABLESPACE FORCE TRANSACTION FORCE ANY TRANSACTION CREATE ANY DIRECTORY Actions permises Analyser tout cluster, table, index Auditer tout objet de la base Auditer toute commande, privilge de la base Accorder tout privilge systme Pouvoir se connecter une instance de faon restreinte pas de quota force sa propre transaction distribue dans la base locale force tte transaction distribue dans la base locale Crer un alias de rpertoire dans la base

J. Akoka - I. Wattiau

88

Privilges objets
GRANT {privilge objet [,privilge objet, ] | ALL} TO {utilisateur | rle | public} [,{utilisateur | rle} ,] [WITH GRANT OPTION]; Avec WITH GRANT OPTION, les privilges reus peuvent tre transmis dautres utilisateurs Privilges : ALTER, DELETE, EXECUTE, IDNEX, INSERT, REFERENCES, SELECT, UPDATE
J. Akoka - I. Wattiau 89

Le groupe PUBLIC
Tous les utilisateurs On peut crer des synonymes publics :

CREATE PUBLIC SYNONYM nom FOR schma.nom;

permet dutiliser la table nom sans mentionner son schma

J. Akoka - I. Wattiau

90

Les privilges dans la mtabase

Vue DBA_TAB_PRIVS
(grantee,table_name,grantor,privilege)

Vue DBA_COL_PRIVS
(grantee,table_name,column_name,privilege)

J. Akoka - I. Wattiau

91

Concept de rle

Ensemble de privilges systme ou privilges objets sous un nom Permet de simplifier la gestion de la scurit Permet de regrouper les utilisateurs sous un nom Permet dassocier un ensemble de privilges systme un type dutilisateur (dveloppeur, administrateur, )
92

J. Akoka - I. Wattiau

Cration : CREATE ROLE nomrole {[NOT IDENTIFIED] | [IDENTIFIED BY motdepasse] | [IDENTIFIED EXTERNALLY]};
Par dfaut : pas de mot de passe

Gestion des rles

Affectation de privilges un rle: GRANT nomprivilege TO nomrole; Affectation dun rle un utilisateur : ALTER USER DEFAULT ROLE; ou GRANT role TO user; Activation dun rle: SET ROLE nomrole; pour un utilisateur connect

J. Akoka - I. Wattiau 93

Modle RBAC (RoleBased Access Control)


Utilisateur1 Utilisateur2 Privilge1 Privilge2 Privilge3 Privilge4 ..

Rle1 Rle2 Rle3

J. Akoka - I. Wattiau

94

La vue : un outil de contrle dintgrit

Au moyen des vues, on peut restreindre laccs:


certaines colonnes dune table : Cration dune vue par projection

Exemple : la table des salaris en omettant les informations personnelles

certaines lignes dune table : cration dune vue par restriction

Exemple : la table des fournisseurs situs Londres

J. Akoka - I. Wattiau

95

4. Autres problmes dintgritconfidentialit

But : autoriser l'interrogation de bases de donnes statistiques


sans divulguer des informations individuelles

Scurit des donnes : le contrle d'infrence

Problme de la dduction d'information confidentielle par infrence


N O M
a le x a n d r c h a r le s is a b e lle ja c k y p ie r r e ra o u l s im o n e m m m f m m m f

SE X E

P R O F E SSIO N
in g n ie u r c h a u ffe u r c o m p ta b le s e c r ta ir e c o m p ta b le in g n ie u r c o m p ta b le in g n ie u r

SA L A IR E
2 1 1 1 1 3 3 2 0 0 2 0 5 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Les questions autorises ne doivent faire intervenir que des sommes ou des cardinalits d'ensembles Je pense que simone est la seule femme ingnieur
J. Akoka - I. Wattiau

je veux

1- le vrifier 2- connatre son salaire

97

Q1 : Combien y a t-il femmes ingnieurs ? 1 Q2 : Quel est le salaire total des femmes ingnieurs ? 25 000

Objectif du contrle d'infrence :


rendre prohibitif le cot d'obtention de telles informations
J. Akoka - I. Wattiau 98

1re solution :
CONTROLE SUR LA TAILLE DU RESULTAT on ne donne pas de rponses portant sur moins d'un certain nombre k d'informations

Exemple :
Q1 : Combien y a t-il d'ingnieurs ? Q2 : Combien y a t-il d'hommes ingnieurs? Q3 : Salaire total des ingnieurs Q4 : Salaire total des ingnieurs de sexe masculin
J. Akoka - I. Wattiau 99

Autres solutions

J. Akoka - I. Wattiau

viter de rpondre des questions dont le rsultat recouvre partiellement celui de questions prcdentes coteux partitionner la base de donnes et n'autoriser que les questions portant sur un groupe en entier construction des groupes distorsion volontaire des rsultats : on ajoute la rponse une valeur pseudoalatoire qui dpend des donnes donner la bonne rponse aux personnes autorises choix alatoire des chantillons : les questions poses ne sont plus appliques toute la base de donnes mais un chantillon alatoire qui chappe l'usager
100

Scurit des donnes : la cryptographie - Fonctions de cryptage et de dcryptage : paquetages Oracle Scurit des donnes : le brouillage
- Brouiller les donnes sensibles pour transfrer une base tester: outils DataMasker, Masketeer

Scurit des donnes : contrle des flux


Problme : X n'a pas droit d'accs R Y a droit d'accs R Y fait une copie R' de R qu'il envoie X

Solution : CLASSES DE SECURITE Le transfert d'information de Y vers X n'est possible que si X a une classe de scurit au moins aussi privilgie que Y

J. Akoka - I. Wattiau

101

Vous aimerez peut-être aussi