Vous êtes sur la page 1sur 355

Systmes de Gestion

de Bases de Donnes (SGBD)


1
de Bases de Donnes (SGBD)
Nicolas Anciaux Nicolas.Anciaux@inria.fr
Luc Bouganim Luc.Bouganim @inria.fr
Nature et objectifs du module
Pr requis : ceux du M1
Conception de BD (Modle EA)
Algbre
SQL (DDL et DML)
Objectif du M2 : connaissances techniques avances
2
Objectif du M2 : connaissances techniques avances
Programmation SGBD : PL/SQL, JDBC
Panorama des SGBD
SGBD XML
Contraintes dintgrit
Triggers
Optimisation de requtes
Concurrence daccs
Scurit des BD et utilisation dOracle XE
Plan des sessions
Rappels des notions de base
Cration de BD
MAJ, interrogation SQL
Programmation SGBD - Langage PL/SQL
SGBD et XML
Panorama des SGBD
SGBD lignes, SGBD colonnes
SGBD et mmoire Flash
Contraintes d'intgrit
Installation de Oracle XE
Exercices SQL (Oracle)
PL/SQL (Oracle)
Xquery
Contraintes dintgrit SQL (Oracle)
Jour 1
Jour 2
Jour 3
Gr. B
3
Contraintes d'intgrit
Dclencheurs (Triggers)
Concurrence daccs
Optimisation de requtes
Introduction la scurit des BD
Programmation SGBD - JDBC
Dictionnaire de donnes
Chiffrement de bases de donnes
Rvisions
Contraintes dintgrit SQL (Oracle)
Triggers (Oracle)
Exp. sur la concurrence (Oracle)
Exp. sur loptimisation (Oracle)
Installation driver JDBC (Oracle)
Programmation JDBC (Oracle)
Dfinition de droits daccs
Protection par chiffrement
Examen
Jour 3
Jour 4
Jour 5
Jour 6
Rappels
-
Programmation SGBD
4
Programmation SGBD
PL/SQL Oracle
CFA - AFTI Nicolas Anciaux
Plan de la journe
1. Rappels
TP sur OracleXE
Installation OracleXE
Cration de schma, insertion, insertion massive, lancement de
scripts SQL, mises jour, interrogation en SQL
5
2. La programmation SGBD
Introduction
Zoom sur le PL/SQL Oracle
Exercices sur OracleXE
Lapproche Bases de donnes (1)
Modlisation des donnes
liminer la redondance de donnes
Centraliser et organiser correctement les donnes
Plusieurs niveaux de modlisation
Outils de conception
6
Outils de conception
Logiciel Systme de Gestion de Bases de Donnes
Factorisation des modules de contrle des applications
- Interrogation, cohrence, partage, gestion de pannes, etc
Administration facilites des donnes
Lapproche Bases de donnes (2)
I- Indpendance
Physique
IX - Gestion de la
II- Indpendance
Logique
X - Standards
III Langage de
SQL
JDBC
Modlisation
Entit/Association
Relationnel
Droits daccs
Disques Flash
7
BD
VIII - Concurrence
daccs
VII - Gestion des
pannes
IX - Gestion de la
confidentialit
VI - Gestion de la
cohrence
V - Optimisation des
questions
III Langage de
manipulation
IV - Gestion des
vues
Contrainte dintgrit SQL
Triggers PL/SQL
Niveaux
disolation
Protocoles
multiversion
Optimiseur
modle de rgles
modle de cot
Droits daccs
Chiffrement
PL/SQL
XML/XQuery
+ Panorama des
produits SGBD
Modle conceptuel: Entit/Association
Les clients
Identifis par un code client
Chaque client est dcrit par son
nom et son pays
...passent des commandes
Identifis par un numro
Indiquent les frais de ports et la
date (ou uniquement lanne)
Passe
Commande
NumCom
Fraisport
DateCom
Qt
Remise
Client
Code
NomCli
Pays
1-1
1-n
concerne
Produit
NumPro
NomPro
Type
1-n
1-n
Passe
Commande
NumCom
Fraisport
DateCom
Client
NumCli
NomCli
Pays
1-1
1-n
concerne
Produit
NumPro
NomPro
Type
Qt
Remise
1-n
1-n
A:
B:
8
date (ou uniquement lanne)
Les dtails dune commande
Indiquent les produits
commands, leur quantit et la
remise faite sur ces produits
Les produits
Identifis par un numro
Chaque produit est dcrit par
son nom et un type
Passe
Commande
NumCom
Fraisport
DateCom
Client
Code
NomCli
Pays
1-1
1-n
Dtaille
Qt
Remise
Produit
NumPro
NomPro
Type
0-n
1-n
Detail
Qt
Remise
Passe
Commande
NumCom
Fraisport
DateCom
Client
Code
NomCli
Pays
1-1
1-n
Produit
NumPro
NomPro
Type
0-n 1-n
a
a
1-1
1-1
C:
D:
Modle logique: Relationnel
Passe
Commande
NumCom
Fraisport
DateCom
Client
Numcli
NomCli
Pays
1-1
1-n
Dtaille
Qt
Remise
Produit
NumPro
NomPro
Type
0-n
1-n
NumCom NumPro DateCom NumCli DETAIL
9
NumCli NomCli Pays CLIENT
NumCom NumCli DateCom FraisPort COMMANDE
NumCom NumPro DateCom NumCli DETAIL
NumPro NomPro Type PRODUIT
Installation dOracle XE
Cration du schma relationnel
Insertion et mise jour
Interrogation
Programmation SGBD
Langages procduraux ddis
10
Langages procduraux ddis
(Oracle PL/SQL)
Programmation SGBD (1)
Comment passer une commande dans la base telle que :
*cette procdure peut tre dclenche par un trigger !
Impossible en SQL pur (SQL nest pas un langage complet)
PROCEDURE COMM
Si le client nest pas encore dans la base
Insrer les informations du client dans la table client
Si larticle est disponible dans la quantit commande
ET le livreur disponible la date de livraison dsire
Insrer sa commande dans la base
Sinon abandonner la commande
11
Impossible en SQL pur (SQL nest pas un langage complet)
Pas de structure de contrle : itrations, tests
Besoin dun langage complet pour programmer des actions sur les BD
Avec un langage traditionnel (C, C++, Java, Cobol, )
Qui puisse parler avec la BD (avec SQL grce SQL CLI, JDBC, ODBC, )
Avec un langage ddi au SGBD (PL/SQL pour Oracle, TSQL pour
SQLServer, )
Types identiques aux types SQL
Facilits de rcupration/lecture des rsultats de requtes
Adapt aux types de donnes BD
Programmation SGBD (2)
Langage procdural propritaire fournis par lditeur du SGBD
Ex: PL/SQL (Oracle), PL/pgSQL (PostgreSQL), T-SQL (SQLServer, Sybase),
Extension de SQL des lments de programmation procdurale
instructions conditionnelles, itrations, variables, etc.
API Propritaires fournies par lditeur de SGBD
Ex: OCI (Oracle), DB-Lib (Sybase),
Programme crit dans un langage classique (C, C++, Cobol, etc.)
avec des appels ces API non standards fournies par lditeur du SGBD
12
avec des appels ces API non standards fournies par lditeur du SGBD
Embedded SQL (gnrateur de code + API propritaires)
Ex: Pro*C (Oracle), ECPG (Postgres), Pro*Cobol (Oracle), etc
Programme crit dans un langage classique (C, C++, Cobol, etc.)
avec des instructions SQL directement dans le programme
Prcompilation : le source (ex: C+SQL)
est transform en code compilable (ex: C pur)
Suivi dune compilation classique (ex: C pur)
API indpendantes du SGBD
SQL-CLI (Call Level Interface) popularis par les mdiateurs ODBC, JDBC
Langages procduraux propritaires (1)
Excution client (envoie de SQL par ODBC, JDBC,)
Moteur
JDBC
Client
Serveur Oracle
BD
Serveur
SQL

COMM
Java
13
Excution serveur (envoie de procdure anonyme)
Client
Serveur Oracle
BD
Moteur
PL/SQL
Serveur
SQL
Rsultat excution
COMM
PL/SQL
Langages procduraux propritaires (2)
Stockage de procdures sur le serveur
Chargement et compilation de la procdure sur le serveur
Lancement distance par appel de procdure (EXECUTE)
Client
Moteur Serveur
COMM
PL/SQL
Execute COMM
14
Stock comme un objet base de donnes
Le crateur les droits dexcuter, modifier, re-compiler la procdure
Partage les droits avec dautres (GRANT/REVOKE EXECUTE)
Serveur Oracle
BD
Moteur
PL/SQL
Serveur
SQL
Rsultat excution
Execute COMM
15
API indpendantes du SGBD
(standardises)
SQL-CLI (Call Level Interface)
Permet de se connecter et denvoyer des requtes SQL tout serveur SQL, quel
que soit son type, sa localisation, le mode de connexion ...
API standardise par X/Open depuis 1994
Intgre dans le standard SQL (SQL 1992, SQL 2003)
ODBC (Open DataBase Connectivity)
Cre par Microsoft
Interface C de connection un SGBD, administration via une interface Microsoft
15
Interface C de connection un SGBD, administration via une interface Microsoft
Pour chaque SGBD, un pilote ODBC est necessaire (Microsoft Access,
SQLServer)
Base sur le standard SQL-CLI
Disponible sur plateformes autres que Windows : http://www.unixodbc.org/
JDBC (Java DataBase Connectivity)
Cr par SUN (rachet par Oracle)
Interface JAVA de connection un SGBD
Pour chaque SGBD, un pilote JDBC est ncessaire
Bas sur le standard SQL-CLI
Oracle PL/SQL
16
Procedural Language / Structured Query
Language
(Langage propritaire Oracle)
Bloc PL/SQL
Bloc de dclaration de variables:
Suivi dun bloc dinstructions et exceptions:
DECLARE
<liste des variables utiles au programme>
17
Suivi dun bloc dinstructions et exceptions:
BEGIN
<liste dinstructions du programme PL/SQL>
[ EXCEPTION
<instructions exceptionnelles> ]
END;
/
Types des variables PL/SQL (1)
Types de base
Types Oracle (CHAR, NUMBER, DATE...)
Type Boolen : boolean
Types rfrenant le dictionnaire de donnes : table.col%TYPE
Types complexes
18
Types complexes
Record
TYPE monType IS RECORD (champ1 NUMBER, champ2
VARCHAR2);
Table
TYPE maListe IS TABLE OF NUMBER ;
Curseurs (cf. plus loin)
Types et variables PL/SQL (2)
Dclaration des variables dans le bloc declare
Affectation de valeur
DECLARE
maVar VARCHAR2 DEFAULT ROUGE;
maVar Personne.nom%TYPE; -- type de lattribut concern
maVar Personne%ROWTYPE; -- type RECORD
maVar MonCurseur%ROWTYPE; -- type RECORD
19
Dans toutes les sections avec loprateur :=
Dans la section begin end avec loprateur into
Appel de variables extrieures dans le bloc begin end
Variables SQL*FORMS prfixes par :
Variables SQL*PLUS prfixes par &
Select max(table.col) into maVar from table;
maVar := 2;
Structures de contrle PL/SQL
Traitement conditionnel
Itrations
IF condition THEN traitement1
[ELSIF condition THEN traitement2]
[ELSE traitement3]
END IF;
20
Itrations
WHILE condition LOOP
traitement
END LOOP;
FOR i IN 1..n LOOP
traitement
END LOOP;
LOOP
traitement
EXIT WHEN condition END LOOP;
Curseurs PL/SQL : dclaration
Rsultat dune requte SQL gr comme un fichier
squentiel
Dclaration
Curseurs avec paramtres
DECLARE
CURSOR monCurseur IS requte_SQL;
21
Curseurs avec paramtres
Paramtre fixs louverture du curseur
DECLARE
CURSOR monCurseur (nomRecherche IN VARCHAR2) IS
SELECT nom, adresse FROM Personne
WHERE nom = nomRecherche;
Curseurs PL/SQL : manipulation (1)
Attributs de curseur
%NOTFOUND, %FOUND, %ISOPEN, %ROWCOUNT
Svaluent true, false, null, ou au numro de tuple
commandes classiques douverture, lecture, fermeture
OPEN, FETCH, CLOSE
22
DECLARE
CURSOR dept_10 IS SELECT Nom, Salaire
FROM employes WHERE NumDept = 10;
tuple dept_10%ROWTYPE;
BEGIN
OPEN dept_10;
LOOP
FETCH dept_10 INTO tuple;
.........
EXIT WHEN(dept_10%NOTFOUND) END LOOP;
CLOSE dept_10;
END;
Curseurs PL/SQL : manipulation (2)
Manipulation simplifie
Pas de dclaration de lenregistrement rcepteur
Ouverture et fermeture du curseur implicites
Ordre de lecture pas pas fetch implicite
DECLARE
GO TO CONCLUSION
23
DECLARE
CURSOR dept_10 IS SELECT Nom, Salaire
FROM employes WHERE NumDept = 10;
BEGIN
FOR tuple IN dept_10 LOOP
.........
END LOOP;
END;
Curseurs PL/SQL : manipulation (3)
Clause for update of
rservation des lignes lors de la dclaration du curseur par un verrou
d intention indispensable la modification
Permet densuite modifier les lignes du curseur
Clause current of
Accs direct en modification la ligne ramene par fetch
Utilisable seulement avec update of
24
Utilisable seulement avec update of
DECLARE
CURSOR c1 IS SELECT Nom, Salaire FROM employes
FOR UPDATE OF Salaire;
BEGIN
FOR c1_enr IN c1
LOOP
IF c1_enr.Salaire > 1500 THEN
UPDATE employes SET Salaire = Salaire*1.3
WHERE CURRENT OF c1;
END IF;
END LOOP;
END;
Augmente de 5% le salaire des employs du service
compta
DECLARE
CURSOR Compta IS
SELECT nom, salaire FROM Employe WHERE service = comptabilit;
Emp Compta%ROWTYPE;
BEGIN
Curseurs PL/SQL : exemple
25
BEGIN
OPEN Compta;
FETCH Compta INTO Emp;
WHILE Compta%FOUND LOOP
IF Emp.salaire IS NOT NULL AND Emp.Salaire < 30.000 THEN
UPDATE Employe SET salaire = salaire*1,05 WHERE nom = Emp.nom;
END IF;
FETCH Compta INTO Emp;
END LOOP;
CLOSE Compta;
END;
Exceptions prdfinies (1)
Leves automatiquement par le moteur PL/SQL
CURSOR_ALREADY_OPEN, INVALID_CURSOR
NO_DATA_FOUND, LOGIN_DENIED,
PROGRAM_ERROR
ZERO_DIVIDE, DUP_VAL_ON_INDEX
26
Traites par la procdure PL/SQL section begin
end
BEGIN

EXCEPTION
WHEN CURSOR_ALREADY_OPEN THEN
BEGIN Affiche_Err (-20000, problme) ; END;
END;
Exceptions prdfinies (2)
Exemple de traitement lors de la leve de
lexception oracle DUP_VAL_ON_INDEX
Dtecte les doublons sur la cl primaire dans la table
BEGIN
27
INSERT INTO employes VALUES (num, nom,
salaire);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
INSERT INTO doublons VALUES (num, nom);
END;
Dclaration dans la section declare
Leve dans la section begin end par linstruction raise
Traitement de lexception dans la section begin end
Dans la sous section exception
Lors de la dtection dans la clause when
La clause when others traite les exceptions non traites
Exceptions dfinies par lutilisateur (1)
28
La clause when others traite les exceptions non traites
DECLARE
sal_nul EXCEPTION;

BEGIN

IF THEN RAISE sal_nul;


END IF;
EXCEPTION
WHEN sal_nul THEN
WHEN OTHERS THEN
END;
Exemple
Lve une exception quand la temprature du four dpasse
1000
DECLARE
Err_Temp EXCEPTION;
MaxTemp NUMBER;
Exceptions dfinies par lutilisateur (2)
29
MaxTemp NUMBER;
BEGIN
SELECT Max(temp) INTO MaxTemp FROM Four;
IF MaxTemp > 1000 THEN RAISE Err_Temp END IF;
EXCEPTION
WHEN Err_Temp THEN
BEGIN Affiche_Err (-200, le four va exploser) ; END;
END;
Procdures et fonctions PL/SQL (1)
Stockes sous forme compile dans la base de donnes,
de la mme faon quun objet de la base
soumise aux mcanismes de scurit ou de confidentialit
Partages par plusieurs applications et utilisateurs
condition davoir le privilge EXECUTE
Procdure
30
Procdure
unit de traitement qui peut contenir des instructions
SQL (sauf DDL), PL/SQL, variables, constantes, curseurs et
gestionnaire derreurs
Fonction
procdure qui retourne une valeur
Procdures et fonctions PL/SQL (2)
Cration de procdure
Cration de fonction
CREATE [OR REPLACE] PROCEDURE nom_procdure [(liste_arguments)]
<IS|AS> declaration_variables
bloc_PLSQL
liste_arguments ::= nom_argument_1 {IN | OUT | IN OUT} type,
nom_argument_2 {IN | OUT | IN OUT} type,
...
nom_argument_n {IN | OUT | IN OUT} type
31
Cration de fonction
Re-compilation de procdure et fonction en cas de
modification du schma de la BD
Suppression de procdure et fonction
CREATE [OR REPLACE] FUNCTION nom_fonction [(liste_arguments)]
RETURN type {IS | AS} declaration_variables
bloc_PLSQL
ALTER <PROCEDURE | FUNCTION> nom COMPILE;
DROP {PROCEDURE | FUNCTION} nom;
Procdures et fonctions PL/SQL (3)
Exemple de procdure
Modifie le prix dun article dun certain taux
CREATE PROCEDURE modif_prix (id IN NUMBER, taux IN NUMBER)
IS
BEGIN
UPDATE article a
SET a.prix_unitaire = a.prix_unitaire*(1+taux)
WHERE a.id_article = id;
32
Exemple de fonction
Calcule le chiffre daffaire
CREATE FUNCTION chiffre_affaire (id IN NUMBER) RETURN NUMBER
IS
ca NUMBER;
BEGIN
SELECT SUM(montant) INTO ca FROM vendeurs WHERE id_vendeur = id;
RETURN ca;
END;
WHERE a.id_article = id;
END;
Package PL/SQL
Package
regroupement de programmes dans un objet de la BD
Visible par
lapplication
(public)
CREATE [OR REPLACE] PACKAGE nom_Package
<IS|AS>
dclaration_variables
dclaration_exceptions
dclaration_procdures
dclaration_fonctions
33
Interne au
package
(priv)
dclaration_fonctions
END nom_Package;
CREATE [OR REPLACE] PACKAGE BODY nom_Package
<IS|AS>
dclaration_variables_globales
corps_procdures
corps_fonctions
END nom_Package
Package PL/SQL : exemple
CREATE PACKAGE traitements_vendeurs IS
FUNCTION chiffre_affaire (id_Vendeur IN NUMBER) RETURN NUMBER;
PROCEDURE modif_com (id IN NUMBER, tx IN NUMBER);
END traitements_vendeurs;
CREATE PACKAGE BODY traitements_vendeurs IS
FUNCTION chiffre_affaire (id_Vendeur IN NUMBER) RETURN NUMBER
IS
ca NUMBER;
34
ca NUMBER;
BEGIN
SELECT SUM(montant) INTO ca FROM vendeurs WHERE id_vendeur = id;
RETURN ca;
END;
PROCEDURE modif_com (id IN NUMBER, taux IN NUMBER)
IS
BEGIN
UPDATE vendeur v
SET v.com = v.com*(1+taux)
WHERE v.id_vendeur = id;
END;
END traitements_vendeurs;
Conclusion langages ddis
Les langages de type PL/SQL constituent le mode
d'utilisation le plus courant des bases de donnes
relationnelles
Utilis pour programmer des procdures stockes
Utilis pour programmer des triggers
35
Bonnes performance (rduit le transfert rseau)
Bien adapt aux clients lgers (ex: smart phones) car
dporte des traitements sur le serveur
Utilis par les outils de dveloppement de plus
haut niveau (SQLforms)
SGBD et XML
-
Panorama des SGBD
36
Panorama des SGBD
-
SGBD et mmoire Flash
CFA - AFTI Luc Bouganim
Bases de donnes XML
Documents XML
Extensible Markup Language (XML)
Document Type Definition (DTD)
XML Schema Definition (XSD) XML Schema Definition (XSD)
Mo!le e onn"es et langages e re#u$tes XML
Mo!le e onn"es XML
Stockage e onn"es XML
%nterrogation & X'ath( X)uery( XMLS)L
S*+D XML
Support e XML ans les S*+D relationnels
S*+D natifs
37
XML et la gestion e onn"es
XML s,impose
Stanar ,"change e onn"es uni-ersel
%nt"gration es onn"es et es m"ta.onn"es
XML permet e stanariser la mani!re ont l/information est
"chang"e XML( 0amespaces(
pr"sent"e XSL(
retrou-"e X'ath( X)uery(
s"curis"e XML Encryption( XML Signature
+esoin e supporter XML ans les +D
n"cessit" e stocker les ocuments XML -ari"s
n"cessit" e pou-oir interroger ces ocuments
Quel modle de donnes, de stockage, dindexation ?
Quel langage de requte ?
Quelle intgration avec l'existant ?
38
12xml -ersion34567428
19estos region340ormanie4 8
19esto cat34:::48
10om8Le *ran ;<tel1=0om8
1>resse8
19ue8'rom6 'roust1=9ue8
1?ille8@abourg1=?ille8
1=>resse8
1Manager8Dupont1=Manager8
1Menu8'lat u Aour1=Menu8
1=9esto8
Exemple e ocument et repr"sentation
Resto
cat : ***
Restos
region: Normandie
Adresse Nom Manager Menu
lment lment
lment Attribut
1=9esto8
19esto cat34:48
10om8L/>bsinthe1=0om8
1>resse8
108571=0o8
19ue8#uai )uarantaine1=9ue8
1?ille8;onfleur1=?ille8
1=>resse8
1Tel87BC5DECE77 1=Tel8
1Manager8Dupont1=Manager8
1Manager8Duran1=Manager8
1Menu 'rix345B48 Fruits e Mer 1=Menu8
1=9esto8
1=9estos8
Rue
Prom. Proust
Ville
Cabourg
Le Grand Htel Dupont Plat du jour
39
Document Type Definition (DTD)
XML Schema Definition (XSD)

<!ELEMENT Resto (Nom, Adresse, Tel?, Manager*,


Menu+)>
<!ATTLIST Resto cat CDATA #REQUIRED>
<!ELEMENT Nom (#PCDATA)>
<!ELEMENT Adresse (N?, Rue, Ville)>
<!ELEMENT Rue (#PCDATA)>
<!ELEMENT Ville (#PCDATA)>
<!ELEMENT Tel (#PCDATA)>
<!ELEMENT Manager (#PCDATA)>
<!ELEMENT Menu (#PCDATA)>
DTD
12xml -ersion34567428
19estos region340ormanie4 8
19esto cat34:::48
10om8Le *ran ;<tel1=0om8
1>resse8
19ue8'rom6 'roust1=9ue8
1?ille8@abourg1=?ille8
1=>resse8
1Manager8Dupont1=Manager8
1Menu8'lat u Aour1=Menu8
1=9esto8
<!ELEMENT Menu (#PCDATA)>
<!ATTLIST Menu Prix CDATA #IMPLIED>

<xsd:element name="Adresse" >


<xsd:complexType name="Addresse">
<xsd:sequence>
<xsd:element name="Rue" type="xsd:string"/>
<xsd:element name="Ville" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name ="N" type="xsd:short"/>
</xsd:complexType>
</xsd:element>

1=9esto8
19esto cat34:48
10om8L/>bsinthe1=0om8
1>resse8
108571=0o8
19ue8#uai )uarantaine1=9ue8
1?ille8;onfleur1=?ille8
1=>resse8
1Tel87BC5DECE77 1=Tel8
1Manager8Dupont1=Manager8
1Manager8Duran1=Manager8
1Menu 'rix345B48 Fruits e Mer 1=Menu8
1=9esto8
1=9estos8
XSD
40
DTD -s Schema
DTD
D"fini le G-ocabulaireH et la structure utilis"s ans le ocument XML
DTD externe & appel"e ans le ocument XML
'as e types e onn"es
'as en XML langage sp"cifi#ue
XML Sch"ma
In sch"ma /un ocument "finit& In sch"ma /un ocument "finit&
les "l"ments possibles ans le ocument et attributs associ"s
la structure u ocument (Se#uence = @hoice = >ll)
les types e onn"es
Le sch"ma est sp"cifi" en XML pas e nou-eau langage
'r"sente e nombreux a-antages
structures e onn"es a-ec types e onn"es
extensibilit" par h"ritage et ou-erture
analysable J partir /un parseur XML stanar
41
DTD & D"claration /"l"ment simple
1K ELEME0T balise ("finition) 8
Le param!tre "finition repr"sente soit un type e onn"e pr""fini(
soit un "l"ment e onn"es compos"( constitu" lui m$me /"l"ments
Types pr""finis
>0L & L/"l"ment peut contenir tout type e onn"e
EM'TL & L/"l"ment ne contient pas e onn"es sp"cifi#ues
M'@D>T> & L/"l"ment oit contenir une chaNne e caract!re M'@D>T> & L/"l"ment oit contenir une chaNne e caract!re
Exemple
1K ELEME0T 0om (M'@D>T>)8
10om8?ictor ;ugo1=0om8
42
DTD & D"claration /"l"ment compos"
D"finit une s"#uence ou un choix /"l"ments
Syntaxe sp"cifi#ue a-ec op"rateurs e composition
/"l"ments &
1K ELEME0T balise (composition) 8
Oprateur Signification Exemple
+ L'lment doit tre prsent au minimum une fois A+
* L'lment peut tre prsent plusieurs fois (ou aucune) A*
? L'lment peut tre optionnellement prsent A?
| L'lment A ou B peuvent tre prsents (pas les deux) A|B
, L'lment A doit tre prsent et suivi de l'lment B A,B
()
Les parent!ses permettent de re"rouper des lments afin de leur appli#uer les
autres oprateurs
(A,B)+

43
DTD & D"claration /attributs
1K >TTL%ST balise >ttribut Type Moe 8
balise sp"cifie l/"l"ment au#uel est attach" l/attribut
>ttribut est le nom e l/attribut "clar"
Type "finit le type e onn"e e l/attribut choisi parmi&
@D>T>
@haNnes e caract!res entre guillemets (4aa4) non analys"es
Enum"ration Enum"ration
Liste e -aleurs s"par"es par O
1K >TTL%ST balise >ttribut (?aleur5 O ?aleurB O 666 ) 8
%D et %D9EF
@l" et r"f"rence J cl"
Moe pr"cise le caract!re obligatoire ou non e l/attribut
M9E)I%9ED( M%M'L%ED (optionnel) ou MF%XED
44
DTD & Exemple e %D et %D9EF
12xml -ersion345674 stanalone34yes428
1KDP@TL'E DP@IME0T Q
1KELEME0T DP@IME0T('E9SP00E:)8
1KELEME0T 'E9SP00E (M'@D>T>)8
1K>TTL%ST 'E9SP00E '0IM %D M9E)I%9ED8
1K>TTL%ST 'E9SP00E ME9E %D9EF M%M'L%ED8
1K>TTL%ST 'E9SP00E 'E9E %D9EF M%M'L%ED8
R8 R8
1DP@IME0T8
1'E9SP00E '0IM 3 4'548Marie1='E9SP00E8
1'E9SP00E '0IM 3 4'B48Sean1='E9SP00E8
1'E9SP00E '0IM 3 4'C4 ME9E34'54 'E9E34'B48'ierre1='E9SP00E8
1'E9SP00E '0IM 3 4'T4 ME9E34'54 'E9E34'B48Sulie1='E9SP00E8
1=DP@IME0T8
45
XSD & Le mo!le es sch"mas
D"claration es "l"ments et attributs
0om
Typage similaire J l/obAet
Sp"cification e types simples
*rane -ari"t" e types
*"n"ration e types complexes *"n"ration e types complexes
S"#uence (Se#uence)
@hoix (@hoice)
Tas (>ll)
46
XSD & @ommanes e base xs&
element & association /un type J une balise
attributs name( type( ref( minPccurs( maxPccurs( 666
attribute & association /un type J un attribut
attributs name( type
type simple & les multiples types e base type simple & les multiples types e base
entier( r"el( string( time( ate( %D( %D9EF( U(
extensibles par es contraintes
type complexe & une composition e types
"finit une agr"gation /"l"ments typ"s
47
XSD & Les types simples
48
XSD & Les types complexes
D"finition /obAets complexes
1se#uence8 & collection oronn"e /"l"ments typ"s
1all8 & collection non oronn"e /"l"ments typ"s
1choice8& choix entre "l"ments typ"s
Exemple
<xsd:complexType name="AddresseFR">
<xsd:sequence> <xsd:sequence>
<xsd:element name="nom" type="xsd:string"/>
<xsd:element name="rue" type="xsd:string"/>
<xsd:element name="ville" type="xsd:string"/>
<xsd:element name="codep" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="pays" type="xsd:NMTOKEN" fixed="FR"/>
</xsd:complexType>
49
Modle de donnes et langages
de requtes XML
Mo!le e onn"es XML
Stockage e onn"es XML Stockage e onn"es XML
%nterrogation
X'ath(
X)uery(
XMLS)L
50
Mo!le e onn"es XML
In ocument est un arbre J nVu "ti#uet"
@ha#ue nVu poss!e une ientit"
Exprim" en XML( sou-ent repr"sent" graphi#uement
Ine for$t est une collection e ocuments e m$me sch"ma
Ine source e onn"es est soit un ocument( soit une for$t
elationnel XML
Table For$t (@ollection)
Tuple (ligne) >rbre
>ttribut (colonne) El"ment ou >ttribut
Domaine Type
@l" %D
9"f"rence %D9EF
51
Stockage e onn"es XML
D"compos" en relationnel
XML Shreing (D+B)
Structure storage (Pracle)
S)LXML Mapping (S)L Ser-er)
Stockage comme un attribut
'ure XML (XML Stuffing . D+B)
+inary=Instructure (Pracle)
XML atatype (S)L Ser-er)
52
Stockage "compos" en relationnel
@omment 2
Sch"ma XML annot"s a-ec infos e mapping
>ssistants( "cou-erte automati#ue e la structure
>-antages
Meilleure gestion e la consommation e m"moire et
u stockage
%nexation ais"e (par +.Tree) %nexation ais"e (par +.Tree)
%nterrogation efficace (multi.ocuments)
%ncon-"nients
Flexibilit" r"uite
@oWt ,insertion et e renu ,un ocument
@omplexit" u maintien es infos e mapping
@omplexit" u sch"ma relationnel
>apt" J
Documents fortement structur"s et peu complexes
53
Stockage attribut( chaine e caract!res
@omment 2
Le ocument XML est "-entuellement compress" et
stock" ans un G @LP+ H (@haracter Large P+Aect)
@LP+ (D+B( S)L Ser-er)( Instructure XML (Pracle)
>-antages
Flexibilit"( simplicit"
9enu ,un ocument G J l,ienti#ue H et efficace
%ncon-"nients
Surcout e stockage (taille)
Surcout m"moire=performance lors e l,interrogation
(taille( parsing)
'as ,inexation (ou recherche plein texte)
Mise J Aour couteuse ou int"grale
>apt" J
Documents utilis"s ini-iuellement( besoin e renu
G J l,ienti#ue H
!L"B
54
Stockage attribut( propri"taire
@omment 2
Le ocument XML est pars"( -ali"( "-entuellement
compress" et stock" ans un champ G binaire H
(+LP+ & +inary Large P+Aect)
'ureXML (D+B)( +inary XML type (Pracle)(
XML atatype (S)L Ser-er)
>-antages
Flexibilit"
%nexation possible
'arsing et -aliation faite lors e l,insertion
Stockage compact possible
%ncon-"nients
9enu G pres#ue H ienti#ue
Stockage propri"taire
L"ger surcout e traitement lors u stockage
Mise J Aour couteuse
>apt" J
Documents utilis"s ini-iuellement
BL"B
55
@onclusion sur le stockage XML
#eu structurs $tructurs
%&&roc'e
oriente
donnes
Stockage
;ybrie ("compos"
X @LP+)
%nex&
+.Tree
sp"cifi#ues J XML
Stockage
D"compos"
%nex
+.Tree
sp"cifi#ues J XML
plein texte
%&&roc'e
oriente
documents
Stockage
>ttribut propri"taire (+LP+)
>ttribut @LP+
%nex&
sp"cifi#ues J XML
plein texte
56
X'ath
Syntaxe pour la na-igation en arbre
La na-igation est "finie par es chemins
Itilis" par /autres stanars& XSLT( XLink( X'ointer( 666
Les chemins sont compos"s /"tapes
= racine ou s"parateur entre "tapes
: Aoker pour n/importe #uel nom : Aoker pour n/importe #uel nom
Y "signe un attribut
== Aoker pour n/importe #uel sous chemin
66 "tape pr"c"ente
Q R permet la sp"cification /un filtre (pr"icat) sur les
nVus courants (peut contenir es chemins)
QnR s"lectionne le 0.!me "l"ment /une s"#uence
57
12xml -ersion34567428
19estos region340ormanie4 8
19esto cat34:::48
10om8Le *ran ;<tel1=0om8
1>resse8
19ue8'rom6 'roust1=9ue8
1?ille8@abourg1=?ille8
1=>resse8
1Manager8Dupont1=Manager8
1Menu8'lat u Aour1=Menu8
1=9esto8
Exemple e ocument et repr"sentation
Resto
cat : ***
Restos
region: Normandie
Adresse Nom Manager Menu
lment lment
lment Attribut
1=9esto8
19esto cat34:48
10om8L/>bsinthe1=0om8
1>resse8
108571=0o8
19ue8#uai )uarantaine1=9ue8
1?ille8;onfleur1=?ille8
1=>resse8
1Tel87BC5DECE77 1=Tel8
1Manager8Dupont1=Manager8
1Manager8Duran1=Manager8
1Menu 'rix345B48 Fruits e Mer 1=Menu8
1=9esto8
1=9estos8
Rue
Prom. Proust
Ville
Cabourg
Le Grand Htel Dupont Plat du jour
58
Exemples 5(B(C & X'ath
0oms e tous les 9estos &
ocument(Z9estos6xml[)=9esto=0om=text()
ocument(Z9estos6xml[)=9esto=0om
Expression r"guli!re
Menu e tous les 9estos Menu e tous les 9estos
ocument(Z9estos6xml[)==Menu
>cc!s -ia pr"icat J attribut
0om es menus u 9esto 4Maxims4
ocument(Z9estos6xml[)=9esto Q0om=text()34Maxims4R
=Menu=Y0om
59
X)uery
Langage e re#u$te u \C@( inspir" e S)L
'ropos" par %+M et les auteurs e XML=)L( soutenu par Microsoft
s"lection( proAection( Aointure( imbrication( agr"gat( tri( etc6
Tout X'ath est une re#u$te -alie
Forme e re#u$te FL\9 ans es for$ts Forme e re#u$te FL\9 ans es for$ts
FP9 ]1-ar8 in 1forest8 Q( ]1-ar8 in 1forest8RU == itration
LET ]1-ar8 &3 1subtree8 == assignation
\;E9E 1conition8 == lagage
9ETI90 1result8 == construction
une for$t est soit une collection( soit s"lectionn"e par un
ocument et une expression X'ath
Le r"sultat est une for$t
60
Exemple T( ^ & S"lection (Xpath( X)uery)
Lister le nom es 9estos e @abourg&
ocument(Z9estos6xml[)=9estoQ>resse=?ille3 Z@abourg4R =0om
1resultat8
FP9 ]9 %0 ocument(Z9estos6xml[)=9esto

FP9 ]9 %0 ocument(Z9estos6xml[)=9esto
\;E9E ]9=>resse=?ille 3 Z@abourg[
9ETI90 _]9=0om`
1=resultat8
61
Exemple a & Sointure
Lister le nom es 9estos a-ec t"l"phone #ui se trou-ent
ans la rue e l/;<tel Lutecia&
FP9 ]9 %0 ocument(Z9estos6xml[)=9esto(
]; %0 collection(4;otels4)=;otel
\;E9E ];==9ue 3 ]9==9ue \;E9E ];==9ue 3 ]9==9ue
>0D ];==0om 3 4Le Lutecia4
9ETI90 19esult8
_]9=0om`
_]9=Tel`
1=9esult8
62
Exemple b & 9estructuration /arbres
@onstruire une liste e 9estos par ?ille
FP9 ]@ %0 istinct(ocument(Z9estos6xml[)=9esto==?ille)
9ETI90
1?ille8_]@`1=?ille8
19estos8 19estos8
FP9 ]9 %0 ocument(Z9estos6xml[)=9esto
\;E9E ]9==?ille 3 ]@
9ETI90 _]9`
19estos8
63
Exemple D & >gr"gat simple
@ombien e 9estos y.a.t.il ans la base 2
LET ]9 &3 ocument(Z9estos6xml[)=9esto
9ETI90 10ombre9esto 8 count (]9) 1=0ombre9esto8
64
Exemple E & >gr"gat partitionn"
Lister le nom e cha#ue 9esto a-ec le prix moyens es
menus propos"s
FP9 ]9 %0 ocument(Z9estos6xml[)==9esto
LET ]> &3 a-g(ocument(Z9estos6xml[)==Q9esto 3 ]9R==Menu=Y'rix)
9ETI90 1resultat8 9ETI90 1resultat8
_]9=0om`
1a-g'rix8_]>`1=a-g'rix8
1=resultat8
65
X)uery Ipate Facility
Extension e X)uery pour la mise J Aour e ocuments XML
0orme publi"e par le \C@ le 5b Mars B755
%nsertion ,un nVu (%nsert)
Suppression ,un nVu (Delete)
Moification ,un nVu (9eplace = 9ename)
Moification ,une copie ,un nVu (@opy) (pour affichage) Moification ,une copie ,un nVu (@opy) (pour affichage)
%nt"gration ans les expressions FL\9
>ttention & les effets es mises J Aour ne sont appli#u"es
#ue lors#ue la re#u$te s"lectionnant les nVus J mettre J
Aour est ex"cut"e6
66
S)L=XML
%nt"gration e fonctionnalit"s X'ath J S)L
'ublication e tables en XML
Fonctions e construction e XML (pont relationnel)
Support J la S)LC (obAet XML c +LP+ ou @LP+ XML)
Type e onn"e natif XML Type (colonnes XML)
Fonctions ,extraction X'ath Fonctions ,extraction X'ath
%nsertion et MaA e XML en colonne(s)
Exemple e re#u$te
SELE@T XMLElement(4Emp4(
XMLForest ( e6hire( e6ept >S 4epartment4) ) >S 4resultZ
F9PM EM'LPLEE e
\;E9E Extract?alue(e6XMLemp( =emp=Yi) 8 B77d
%nt"gr" J Pracle( D+B( S)LSer-er
67
Mo!le e contr<le acc!s XML
Mo!le simplifi"
%nspir" e +ertino( Damiani
Droit acc!s pour un utilisateur 3
ensemble e r!gles 1Sign( X'ath8
a
b
c
d
b
R1
'oliti#ue ferm"e
'oliti#ue e r"solution e conflits
Most.Specific.PbAect.Takes.'receence
Denial.Takes.'receence
d
d
c
h
R1
R1
R2
Rules for doctor John Doe
R1 <+, //b[c]/d>
R2 <-, //h>
68
Diff"rentes propositions
'as e stanar pour le @> actuellement
Diff"rentes politi#ues en ce #ui concerne le chemin
acc!s aux onn"es autoris"es (e6g6( a=b ans
lexemple pr"c"ent)
%nterire lacc!s si le chemin nest pas autoris"
Forcer le chemin Forcer le chemin
Forcer le chemin en le renant anonyme
+esoin un mo!le plus fin et plus pr"cis
Droits sur les liens
69
$(B) XML
Support e XML ans les S*+D relationnels Support e XML ans les S*+D relationnels
S*+D natifs
70
S*+D relationnel XML
@omposants logiciels int"gr"s J un S*+D relationnel
assurant&
le stockage et l/interrogation e ocuments XML
en transformant le XML en tables
et les tables en XML (-ues XML)
a-ec es attributs e type XML a-ec es attributs e type XML
Langage e re#u$tes
X'ath
X)uery
XMLS)L
S)L "tenu a-ec fonctionnalit"s XML
71
Pracle
Stockage
Mapping e XML plat sur une table
Mapping e XML imbri#u" en tables imbri#u"es
Stockage e XML en colonne (XML Type)
@ompression e XML en table ou colonne
%nexation u XML par tags et mots cl"s %nexation u XML par tags et mots cl"s
Sch"ma XML optionnel a-ec -aliation
Manipulation
Support e S)L=XML (?E)
Support e X)uery (?57)
9""criture e re#u$tes X)uery( XMLS)L -ers S)L
?ues XML e tables relationnelles
?ues relationnelles e ocument XML
72
Microsoft S)L Ser-er
S)L Ser-er B777
SELE@T U FP9 XML & 9etourne u XML J partir e re#u$tes
relationnelles et permet e "finir le format u XML retourn"6
PpenXML & Manipulation e ocuments XML comme es tables
a-ec T.S)L et es proc"ures stock"es6
S)L Ser-er B77^
Stockage natif comme 4XML ata type4 Stockage natif comme 4XML ata type4
?aliation par rapport J un sch"ma XML
%nexation e onn"es XML
Support basi#ue e X)uery
'ossibilit" e "finir es -ues XML et e les interroger
S)L Ser-er B77D
?aliation G souple H
Support e la clause G let H (-ariables) ans X)uery
Mise J Aour & %nsert = Delete = 9eplace -alue of U6
73
S*+D 0atif XML
Stockage es ocuments entiers
sans les "composer en
"l"ments
Similaire J 'ureXML e D+B(
+inary ,Pracle(
et XML Datatype e S)L Ser-er
Techni#ues /inexation
Stockage
XML
Recherche
XML
XQuery XML XML
Techni#ues /inexation
sp"cifi#ues
%nex e structure (arbres)
%nex e contenu (mots cl"s)
Support e X)uery
Pptimisation( ex"cution
Arbres
XML
Index
Noyau SGBD
Concurrence, Fiabilit
74
@onclusion sur XML
'oints forts 9elationnel
pas e nou-eau S*+D
possibilit" e normaliser les onn"es (structur")
possibilit" e stocker comme -aleur ,attribut
une certaine portabilit" multi.S*+D
performance pour acc!s grain fin performance pour acc!s grain fin
'oints forts 0atif (et types XML propri"taire es S*+D
relationnels)
pas e mapping J "finir et J maintenir
int"grit" u ocument (moe chaine e caract!res)
recherche plein texte
performance pour acc!s gros grain
75
#anorama des $(B)
76
'anorama es S*+D U KKK
4D (4th Dimension)
MariaDB
ADABAS
Adaptive Server Enterprise
Advantage Database Server
(ADS)
Altibase
Apache Derby
Datacom
Linter SQL RDBMS
LucidDB
MaxDB
Microsoft Access
Microsoft Visual Foxpro
Microsoft SQL Server
Microsoft SQL Server
Compact (Embedded
Database)
Pervasive PSQL
Polyhedra DBMS
PostgreSQL
Postgres Plus Standard
Server
Postgres Plus
Advanced Server
R:Base
RDM Embedded Datacom
CUBRID
DB2
Drizzle
Empress Embedded
Database
FileMaker
Firebird
FrontBase
HSQLDB
H2
Informix Dynamic Server
Ingres
InterBase
Database)
MonetDB
mSQL
MySQL
Nexusdb
HP NonStop SQL
Omnis Studio
OpenBase SQL
Oracle
Oracle Rdb
OpenEdge
OpenLink Virtuoso
Paradox
RDM Embedded
RDM Server
ScimoreDB
SmallSQL
SQL Anywhere
SQLBase
SQLite
Superbase
Teradata
UniVerse
Valentina
77
#anorama des $(B)
'rincipaux S*+D &
March" es S*+D9( comparaison synth"ti#ue
Ser-eurs e bases e onn"es Ser-eurs e bases e onn"es
Licences propri"taires & Pracle( D+B( S)L Ser-er
Licences Ppen Source & MyS)L( 'osgreS)L
)uel#ues S*+D orient"s G colonne H
>utres syst!mes
S)Lite (composant)
Microsoft >ccess (S*+D G personnel H . LT*)
@onclusion& *"n"alogie
78
Oracle
Teradata (3.2%)
Sybase (3.0%)
'arts e march" (B77D c Source & %D@)
Autres
(< 1.2%)
Oracle
(43.5%)
IBM (DB2)
(21.7%)
Microsoft
SQL Server
(19.5%)
http://idcdocserv.com/219232E
79
@lasses e S*+D & Ser-eurs( LT*( composants
Nom Cration Version Editeur License
Serveurs Oracle 1979 11g R2 Oracle Corporation Propritaire
SQL Server 1989 2012 (v11) Microsoft Propritaire
DB2 1983 9.7 IBM Propritaire
Teradata 1979 13.1 Teradata Corporation Propritaire
Adaptive Server Ent. 1980 15.7 Sybase Propritaire
Informix 1981 11.7 IBM Propritaire
MySQL 1995 5.5 / 7.2 Oracle (Sun) GPL MySQL 1995 5.5 / 7.2 Oracle (Sun) GPL
PostgreSQL 1985 9.1 Michael Stonebraker BDS
Ingres 1974 10 Computer Associates GPL
MariaDB 2009 5.5 Monty Program Ab GPL
L4G Access 1992 2010 Microsoft Propritaire
4me Dimension 1985 12.2 4me Dimension Propritaire
OpenOffice.org Base 2002 3.4 Oracle (Sun) LGPL
Composant SQLite 2000 3.7 D. Richard Hipp Dom. Public
Berkeley DB 1986 5.3 Oracle (Sleepycat) BDSD
Derby 1996 10.8 Apache Software Apache
HyperFile 1993 16 PC Soft (WinDev) Propritaire
80
@omparaison (5) & syst!mes support"s
evenus des $(B) &ar "$
*+,,-.+,/01
http://idcdocserv.com/219232E
"$ su&&ort
Nom Windows
UNIX-Linux-
BSD
MacOS Symbian
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite
81
@omparaison (B) & Fonctionnalit"s
Nom ACID
Intgrit
rfrentielle
Vues
matrialises
Domaines Dclencheurs
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite
Nom
Support du
paralllisme
Partitionnement
Indexs
spatiaux
Indexs
Bitmap
Indexs
partiels
Indexs sur
expressions
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite
82
@omparaison (C) & S"curit"
Nom Communications
Chiffrement des
fichiers
Complexit des mots
de passes
Audit
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite SQLite
Nom
Limitation de
ressources
Sparation des rles Certification EALx
Oracle
SQL Server
DB2
MySQL
PostgreSQL
Access
SQLite
83
$erveurs *licences &ro&ritaires1
"racle
D+B D+B
S)L Ser-er
84
Pracle
;istori#ue &
%nitialement SDL fon"e en 5Ebb par Larry Ellison e co
De-ient 9S% en 5EbE puis Pracle @orporation en 5EDC
Depuis( plus e ^7 ac#uisitions ont
%nno+ase (B77^) c moteur transactionnel e MyS)L
TimesTen (B77^) c +D m"moire tr!s performante TimesTen (B77^) c +D m"moire tr!s performante
Sleepy@at (B77a) c moteur e +D embar#u" +erkeleyD+
Sun (B757) c incluant MyS)L
Pracle est le leaer monial es syst!mes e bases e
onn"es
Pracle inclut e nombreux outils( progiciels( applications et
fonctionne sur toutes plate.formes
I0%X( \inofs( Linux( M?S( etc6
85
Les -ersions ,Pracle
5EbE c ?B & ?ersion initiale( "crite en 'D'.55
5ED7 c ?C & 9""crit en @( support es transactions
5EDT c ?T & Support multi.plate.formes( protocoles multi.-ersions
5EDa c ?^ & @lient=ser-er( istribution
5EDE c ?a & PLT' optg( 'L=S)L( sau-egare online( -errouillage tuple
5EEC c ?b & D"clencheurs( proc"ures( ex"cution parall!le( int"grit" 5EEC c ?b & D"clencheurs( proc"ures( ex"cution parall!le( int"grit"
r"f"rentielle( r"plication
5EEb c ?D & PbAet( architecture C.tier( support PL>' (partitionnement)
5EEE c ?Di & Support Sa-a( XML( LD>'( portage Linux
B775 c ?Ei & @luster (passage J l,"chelle)( Data *uar( securit"
B77C c ?57g & >utomatisation e l,aministration( Flashback( Data gri
B77b c ?55g & @ompression( >SM (gestion auto6 u stockage)( 9eal
>pplication Testing( >cti-e Data *uar U
86
D"-eloppement
S>?> &
Support e Sa-a (compilation)( SD+@( Sa-a Ser-er 'ages( S)LS
'L=S)L
Support e 'L=S)L (compilation)( "clencheurs( proc"ures( 'L=S)L
Ser-er 'ages
@ache e fonctions 'L=S)L
XML
Support XML binaire Support XML binaire
%nex XML
XML repository
Support e X)uery
PbAets &
Support es obAets( Extensibilit"
Putils e "-eloppement
S)L De-eloper(
SDe-eloper(
>pplication Express

Application Express
87
;aute isponibilit" (5)
Pptions
>cti-e Data *uar
"porte certaines acti-it"s sur
une base r"pli#u"e (stanby D+)
>-ance compression
trafic r"seau
sau-egares sau-egares
Total 9ecall
@onser-e un histori#ue complet
es moifications e la +D
Fonctionnalit"s
Flashback & SELE@T U >S PF U
Sau-egare en ligne( parall!le(
incr"mentale
U
Active Data !ard
Total "ecall
88
'erformance=passage J l,"chelle
Pptions
%n.Memory Database @ache
Itilisation u moteur TimesTen
9eal >pplication @luster (9>@)
*estion automati#ue e la charge
Fonctionnalit"s
>utomate Storage Management
(>SM)
Pracle Database Machine
>-ec Exaata Storage Ser-er
Temps de
r#ponse mo$en
TimesTen
%&D'
89
'erformance & *9%D
*lobalisation et -irtualisation es
ressources
E#uilibrage e charge
;aute isponibilit"
@omplexe = cher
Sous utilisation
configur" pour les pics ,acti-it"
'as e partage e ressources
'eu isponible
Serve!rs
d(applications
Serve!rs
de donn#es
Dis)!es
parta*#s
90
*estion e ?LD+ (D\( +%)
Pptions
'artitioning
PL>'
Data Mining
@ompression
Fonctionnalit"s
%nex +itmap
'arall"lisme
inter.transaction & n instances Pracle(
-errous istribu"s et coh"rence e cache
intra.re#u$te & partitionnement es onn"es(
parall"lisme pipeline et in"penant
@r"ation ,inex( imports( exports( U
91
G Manageability H
Pptions
@hange Management 'ack
@onfiguration Management 'ack
Diagnostic 'ack
Tuning 'ack
'ro-isioning an 'atch >utom 'ack
Fonctionnalit"s
Pracle Enterprise Manager
>utomatisation
*estion m"moire (>MM)
Stockage (>SM)
Statisti#ues
Sau-egares = restaurations
%denti+ication des re)!,tes co-te!ses
92
S"curit"
Pptions
>-ance Security
@hiffrement transparent (TDE)
S"curisation es
communications
Label Security
Data Masking 'ack Data Masking 'ack
Database ?ault
Fonctionnalit"s
Encryption toolkit
F*> & Fine *rain >uiting
Data.ase /a!lt
0a.el Sec!rit$
93
Donn"es complexes = fichiers
Pptions
Pracle Spatial
@ompression
'artitioning
Security
Fonctionnalit"s
%mages m"icales (D%@PM)
Secure files
@hiffrement( "uplication(
compression
Pracle Text
Multimeia
94
PLT' = D\ Pracle Database Machine
Ser-eurs Sun XT5b7 & D x (B %ntel 0ehalem = 2+ (o 9>M)
34 cVurs et ^ba *o e 9>M
Exaata Storage Ser-ers 5T x (/+ ;DD e B To X T FlashFire Ea*+)
5aD ;DD = CCa To X ^C To e Flash
'rix h B6a M]
95
Pracle atabase >ppliance (E=B755)
"56ecti7 & permettre J une entreprise e consolier
l/ensemble e ses petites bases6
Matriel8 9egroupe e B J BT coeurs (a-ec un
maximum e 5EB *o e m"moire) et 5B To e stockage6
#rix8 "marre J ^7 777 ollars( a-ec un processeur
eux coeurs (contre CC7 777 ollars pour le plus petit eux coeurs (contre CC7 777 ollars pour le plus petit
mo!le /Exaata)
96
D+B /%+M
%ssu e prototypes e recherche (>lmaen 9esearch Lab6)
System 9& le pionnier es S*+D9( J l,origine e S)L
Star+urst& S*+D9P J l,origine e S)LC
Deux -ersion iff"rentes
D+B mainframe (issu e System 9)
M?S( ?SE( ?M6
D+B Ini-ersal Database D+B Ini-ersal Database
>%X( ;'.IX( Solaris( Linux( \inofs( 0IM>.)( 7S=B( PS=CE7(
PS=T776
@hallenger ,Pracle sur le march"
0ombreux partenariats a-ec "iteurs ,outils et e progiciels
in"penants
>c#uisition ,%nformix en B775
@ollaboration a-ec 'ostgreS)L en B77E (compatibilit" Pracle)
97
D+B & langages( supports
S)LC tr!s complet
obAets
contraintes et triggers
re#u$tes r"cursi-es
langage e proc"ures stock"es 'SM
Langages obAet
Sa-a( @XX( SmallTalk
XML
stockage ans tables par "clatement
stockage en colonnes comme -aleur obAet
%nterrogation en S)L=XML et X)uery
Extensibilit" grice aux D+B relational exteners
exteners %+M& texte( XML( image( son( -ieo( spatial
exteners tiers& s"ries temporelles( etc6
98
D+B & Distribution es onn"es
>cc!s J +D istantes
%nformation %ntegrator& S*+D istribu" tr!s optimis"
s"curit" et coh"rence globalesd f""ration a-ec XML
transactions istribu"es B'@
9"plication&
(a) sym"tri#ue( (b) synchrone a-ec Data'ropagator
'arall"lisme = @luster & D+B pureScale 'arall"lisme = @luster & D+B pureScale
parall"lisme inter. et intra.transaction
parall"lisme pipeline et in"penant
>cc!s irect J la m"moire (9DM>)
D+B Database 'artitioning Feature
D+B E-eryfhere&
-ersion l"g!re pour 'D>( 'alm( etc6 a-ec synchronisation
D+B Express.@ &
?ersion gratuite
99
Microsoft S)L Ser-er
%ssu u moteur Sybase (accor 5EDb.ET)( int"gr" J \inofs
Transac S)L (TS)L)& langage e proc"ures stock"es
Support S)LC limit"& +LP+( @LP+( types utilisateurs( fonctions en
TS)L
Putil e "-eloppement ?isual Stuio
?+( @XX( @M( SM( U
%nterface par >DP %nterface par >DP
Techni#ues
a-anc"es sur XML( \eb( PL>'( DM
Distribution
transactions istribu"es( r"plication a-ec >ccess
parall"lisme SM'( support cluster
S"curit" a-anc"e
>uthentification( autorisation( encryptage
100
S)L Ser-er B75B & Top nou-eaut"s
Meilleure protection es onn"es
@ryptage( cl" e s"curit"( auit
>m"lioration e la fiabilit"
Pptimisation es performances
@ompression es onn"es
>nalyse et reporting es perf6
'erformance pr"-isible
OLAP
FILE
XML
RDBMS
Services
Query Query
Analysis Analysis
Reporting ReportingIntegration Integration
Synch Synch
Search Search
'erformance pr"-isible
Support onn"es semi.structur"es
%nterrogation e textes et X)uery
>m"lioration +% et ata mining
Synchronisation a-ec bases mobiles
%nt"gration a-ec Pffice
B75B& ;aute isponibilit" (>lfaysPn)
B75B& 'erformances accrues
B75B& Efforts sur la s"curit"
Mobile and Mobile and
Desktop Desktop
Cloud Cloud
Server Server
101
$(B) "&en source 9
MyS)L
'ostgreS)L 'ostgreS)L
102
MyS)L (5)
Serait le ser-eur e base e onn"es open source le plus
utilis"e ans le mone (8 577 Millions e copies
t"l"charg"es ou istribu"es epuis sa cr"ation)
MyS)L fait partie u #uatuor L>M' & Linux( >pache( MyS)L(
';'( \>M' (\inofs) et M>M' (Mac)
;istori#ue & ;istori#ue &
5EE^ & 'remi!re -ersion (issu e mS)L)
B77C & >ccor entre MyS)L et S>' MaxD+ (inclusion e S>' D+)
B77^ & >chat ,%nnoD+ (stockage transactionnel) par Pracle
B77D & >chat e MyS)L par Sun (5 M e ])
E=7D & D"part e Monty \ienius c cr"ation e Maria D+
B77E & >chat e Sun par Pracle autoris" en Aan-ier B757 par la
@ommission Europ"enne c %n#ui"tue e la communaut" U
103
MyS)L (B) & >rchitecture
Source : http://mysqlschool.com/?p=12
104
MyS)L (C) & Moules e stockage
M:;$%M 8
moteur par "faut( simple( pas e transactions ni e clefs "trang!res6
;nno)B 8
support es transactions et es clefs "trang!res
!L<$=> &
support u stockage en cluster (MyS)L b)
?%L!"@ &
nou-eau moteur pour MyS)L a (remplacerait %nnoD+) nou-eau moteur pour MyS)L a (remplacerait %nnoD+)
%!A;B> &
moteur aapt" J l/archi-age e onn"es (compression)
?>)>%=>) &
moteur permettant /acc"er J es tables /une base e onn"es
istantes plut<t #ue ans les fichiers locaux6
M>(> &
moteur fait pour fusionner plusieurs tables
M>M"C &
moteur manipulant uni#uement es onn"es en m"moire
105
MyS)L (T) & 'rouits et 0ou-eaut"s
'rouits
MyS)L Enterprise & ?ersion 'ME (basic J platinium) a-ec iff"rents ni-eaux e ser-ices
%nclut MyS)L Enterprise Monitor et MyS)L )uery >nalyjer
MyS)L @luster & ?ersion parall!le (Share 0othing) hautement isponible
MyS)L Embar#u" & @omposant logiciel int"grable
MyS)L Data \arehouse & Support u D\ c moteur e stockage %nfo+right (orient"
colonnes( compress")
Sau-egare et restauration MyS)L & Itilitaire eit" par kmana
MyS)L \orkbench (*I% Tool) & @onception e +D
0ou-eaut"s e la ^65
'artitionnement e tables et ,inex
>m"lioration e la recherche en texte int"gral
Support e XML=X'ath
Moteur e stockage @S?
>m"liorations u moteur >rchi-e
;aute isponibilit"
'lus grane simplicit" e gestion
>m"lioration es performances (e6g6( imports ==( cache)
106
MyS)L (^)& 9"plication -s @luster
9"plication (8 ?C6BC)
Sens uni#ue & maitre Escla-e
Si panne( besoin e reconfiguration
@luster (8 ?T65)
'as e point uni#ue e "faillance
E#uilibrage e charge ynami#ue
'artitionnement es onn"es
107
'ostgreS)L (5)
+as" sur %0*9ES
%niti" par M6 Stonebreaker et E6 \ong en 5EbT (I6 +erkeley)
9efonte totale en 5ED^ & 'ost.%ngres( puis 'ostgresE^ et
finalement 'ostgreS)L
@,est un logiciel Ppen source (Licence & +SD)
Tr!s utilis" ans la recherche aca"mi#ue pour exp"rimenter e Tr!s utilis" ans la recherche aca"mi#ue pour exp"rimenter e
nou-elles techni#ues et algorithmes
Syst!me e bases e onn"es relationnelles open source le plus
pointu
Est J la base ,%nformix (rachet" par %+M c actuellement
%nformix Dynamic Ser-er %DS 55)
108
'ostgreS)L (B)
Supporte
une grane partie es stanars S)L
re#u$tes complexes d cl"s "trang!res d triggers d -ues d
int"grit" transactionnelle d contr<le e concurrence multi.-ersionsd
fonctions externesd
inexation "tenue (bitmap( spatial( partiels( etcU)d recherche plein.texte
support e XML
nombreux langages e proc"ure (e6g6( 'L=pgS)L) nombreux langages e proc"ure (e6g6( 'L=pgS)L)
'ostgreS)L peut $tre "tenu a-ec &
e nou-eaux types e onn"es d
e nou-elles fonctions d
e nou-eaux op"rateurs d
e nou-elles fonctions /agr"gat d
e nou-elles m"thoes /inexation d
e nou-eaux langages e proc"ure6
109
'ostgreS)L (C)
?ersions &
'ostgres 'lus c ?ersion packag" #ui s/installe en un clic
EnterpriseD+ . ?ersion estin"e aux entreprises incluant un contrat e
maintenance et une compatibilit" am"lior"e a-ec Pracle D+6
EnterpriseD+ int"gr" ans D+B E6b (@obra c Suin B757)
'ostgreS)L s/ex"cute nati-ement sous \inofs epuis la -ersion D6x6
En-iron B^7 outils annexes & migration( aministration( r"plication( etc6 En-iron B^7 outils annexes & migration( aministration( r"plication( etc6
Forces &
cou-erture fonctionnelle(
compatibilit" Pracle( MyS)L
moteurs a-anc"s (spatial et obAet)
Faiblesses &
outil touffu(
moins r"panu #ue MyS)L
Site & fff6postgres#l6org
Fonctionnalit"s "taill"es sur http&==fff6postgres#l6org=about=featurematrix
110
Quelques $(B) orients
D colonne E
MonetD+ (open source)
?ector\ise (-ersion commerciale) ?ector\ise (-ersion commerciale)
@.Store (open source)
?ertica (-ersion commerciale)
111
Stockage e onn"es & lignes = colonnes
Stockage en ligne Stockage en colonnes
Le stockage en colonne est aapt" J es charges
Lecture intensi-e (-oire lecture seule)
*ran -olume e onn"es
PL>'( pas PLT' K
X >cc!s aux onn"es utiles
c %nsertion ,un tuple plusieurs acc!s
X >Aout=suppression simple
c Lecture e onn"es inutiles
112
Stockage en colonnes & compression (5)
9un.Length Encoing (9LE)
113
Stockage en colonnes & compression (B)
?ecteurs e bits
114
Stockage en colonnes & compression (C)
Ex"cution sur les onn"es compress"es
115
MonetD+
Prigine
'rototype e recherche tr!s utilis" ans la communaut"
D"-elopp" par le @\% (>msteram)
'remi!res i"es en 5EEC (+>T( M%)
Ppen source en B77T( 57 year +est 'aper >far en B77E
Support Support
Support relationnel (S)L)
Support XML=X#uery
Extensions S%*
'articularit"s
Efficacit" (@olonnes( compression( maximisation caches @'I(
traitements par G lots e tuples H( U)
+ase u prouit ?ector\iseU
116
?ector\ise
Prigine
MonetD+
'remiers contact a-ec %0*9ES (>@T%>0) en B77b
Pfficialis" en Auillet B77E
Support
+D "cisionnelles (analyses e gran -olumes e onn"es) +D "cisionnelles (analyses e gran -olumes e onn"es)
'remiere place pour le +enchmark T'@.;
x C(T (S)L Ser-er B77D)
Futur
Machine +D (Database >ppliance) pour l,analyse e onn"es
Pptimis" pour Leno-o Think Ser-er
117
@.Store = ?ertica
Prigine
Tra-aux e recherche publi"s en B77^ (?LD+) (Stonebraker et al)
D"-elopp" par M%T( Lale( +raneis Ini-ersity( +rofn Ini-ersity(
et IMass +oston
Le prototype n,est plus maintenu c les efforts ont "t" port" -ers la
-ersion commerciale & ?ertica rachet" par ;' r"cemment6
Support (@.Store)&
9elationnel (S)L) X propositions pour XML=9DF
'articularit"s
Pptimis" pour la lecture (eux G store H)
'arall"lisme (share nothing)
@ompression
;aute isponibilit"
118
%utres s:stmes
S)Lite & @omposant logiciel (omaine public) S)Lite & @omposant logiciel (omaine public)
Microsoft >ccess & LT*( licence propri"taire
119
S)Lite (5)
@omposant logiciel ans le omaine public (pas e copyright)
'our les "iteurs e logiciels souhaitant embar#uer u S)L transactionnel6
liteur & S)Lite @onsortium (ah"sion & minimum b^ m]=an)
Mojilla( >obe( Symbian et +loomberg en font partie
Syst!mes /exploitation & Linux( Mac PS X( \inofs( U
)uel#ues extensions (a-ec License) &
S)Lite Encryption Extension (SEE) & chiffrement es onn"es (>ES)
@ompresse an Encrypte 9ea.Pnly D+ (@E9PD)& compressionXchiffrement @ompresse an Encrypte 9ea.Pnly D+ (@E9PD)& compressionXchiffrement
Forces &
l"g!ret"(
performance(
p"rennit"(
Licence
Faiblesses &
@ou-erture fonctionnelle (contexte G composant logiciel H)
G S)Lite is not esigne to replace Pracle6 %t is esigne to replace fopen() H
120
S)Lite (B)
@onsi"r" comme le moteur S)L le plus "ploy" au
mone (8 ^77 Millions) &
http&==fff6s#lite6org=mosteploye6html
Site & fff6s#lite6org
121
S)Lite (C)
L%rc'itecture de $QLite est trs sim&le 8
%nterface
>'% ,acc!s J S)Lite( tout est pr"fix" par s#liteCn
S)L @omman 'rocessor
9econnaNt les mots cl"s S)L( transmis au parseur puis au
g"n"rateur e coe
@oe *enerator
'rouit un coe optimis"( implantant la re#u$te J
ex"cuter( en instruction utilis"es par la machine -irtuelle
?irtual Machine ?irtual Machine
La machine -irtuelle implante les op"rateurs e e bases
e onn"es( appel"s en fonction u coe g"n"r"
+.Tree
*estion es onn"es inex"es par un +.Tree
'age @ache
*estion es acc!s au is#ue et u cache en m"moire
PS %nterface
'ermet la portabilit" sur plusieurs syst!mes
,exploitation6
Itilities
@ontient #uel#ues routines utiles pour S)Lite6
Test @oe
'roc"ures e tests( incluant es simulations e pannes
pour tester les m"canismes e reprise6
9epr"sentent plus e la moiti" u coe source e S)Lite
122
Microsoft >ccess
5
!re
-ersion (>ccess 567) en 5EEB c ?ersion B757 en Auin=Auillet
@omprens
In moteur e base e onn"es relationnelles
In en-ironnement e "-eloppement ,applications
Tables( re#u$tes( formulaires( "tats( pages( macros( moules
Des assistants J foison( interface )+EU
G 'opularisation H es bases e onn"es par Microsoft G 'opularisation H es bases e onn"es par Microsoft
Forces
%nterface graphi#ue Sou-ent utilis" comme front.en
'ossibilit"s ,attacher es tables externes
%nt"gration a-ec la suite Pffice
Faiblesses
Transactions limit"es
'assage J l,"chelle (nombre ,utilisateurs( complexit"( -olume)
@ou-erture fonctionnelle
123
!onclusion 8 (nalogie
124
*"n"alogie es S*+Ds (epuis @o 5Eb7)
Ingres
(1974 1985)
PostGres
(1985 1996)
PostgreSQL
(1996 )
Illustra (1992 97)
Informix (1980 2001)
SystemR
1975
SQL/DS
1980
IBM DB2
(1982 )
BerkeleyDB (1991 2006)
MySQL (1994 2009)
SDL
1977
RSI
1979
Oracle
(1982 )
BerkeleyDB (1991 2006)
SQLite
(2000 )
TimesTen (1996 2005)
InnoDB (1995 2005)
Sybase
(1984 1996)
Microsoft SQLServer
(1988 )
1975 1980 1985 1990 1995 2000 2005
ASE
(1996 )
125
Bases de donnes et mmoires
?las'
126
%mpact es m"moires Flash
Des m"moire Flash pour le stockage e bases e onn"es2
ioDrive Octal, 10,24 To PCIe
Lecture : 1 300 000 IOPS 6,7 Go/s
Ecriture : 1 240 000 IOPS 3,9 Go/s
96 package de Flash
OCZ Vertex 4 - 2.5" SATA III
Capacit : 512 Go - Prix : env. 600 euros
Lecture : 35 000 IOPS - 535 Mo/s
Ecriture : 75 000 IOPS - 475 Mo/s
Compression, chiffrement,
Cartes Micro SD, SD et cls USB
Capacit : 1 32 Go (2 To annoncs en SD)
Prix : 1 2 euros le Go
Lecture : env. 1000 IOPS - env. 20 Mo/s
Ecriture : max. 200 IOPS - env. 10 Mo/s
127
E-olution es m"moires seconaires
2000 2010
Capacit
IOPS
200 Go 2 To
200 200
14 Go (2001) 256 Go
Go/$ 0,05
0, 0003 0,5
30
> 1 M (PCIe)
>5000 (SATA)
1000 (SCSI)
x1
x600
x10
x20
x1000
x1000
Capacit
IOPS
Go/$
F
l
a
s
h
D
i
s
q
u
e
s

m
a
g
n

t
i
q
u
e
s
>5000 (SATA)
Capacit
IOPS > 1 M (1 chip)
200 000 cells, 4 bits/cell
P
C
M

Consommation lectrique
Plus faible que les disques
magntiques
Proportionnel lusage !
128
A .it o+ electronic to
!nderstand +lash chip
constraints and trends
Bonnet, Bouganim, Koltsidas, Viglas, VLDB 2011
129
Flash cells
Flash cell& resembles a semiconuctor transistor
B gates instea of 5
Floating gate insulate all aroun by an oxie layer
Electrons place on the floating gate are trappe
The floating gate fill not ischarge for many years
'ontrol ate
1loatin* ate
2 s!.strate
3
4
3
4
5xide
0a$er
Flash cell: a floating
gate transistor
130
Flash cells& 0P9 -s 0>0D
0P9
)uick rea (+yte)
Slof prog6 (+yte)
Slof erase
X%' @oe
@%@)
Slofer rea ('age)
)uicker prog6 ('age)
)uicker erase (+lock)
Files( ata
131
#rogramming& >pply a high -oltage to the control gate
electrons get trappe in the floating gate
>rasing& >pply a high -oltage to the substrate
electrons are remo-e from the floating gate
0>0D Flash cells moe of operation
9eaing& the charge changes the threshol -oltage of the cell
Single le-el cell (SL@) store one bit per cell& charge 3 7( not charge 3 5
Multi le-el cell (ML@) store B bits per cell (T le-els)
2ro*rammin*
26 /
6 / 6 /
7ear o!t cell Erasin*
6 /
26 / 26 /
>fter a number of program=erase cycle( electrons are getting trappe in
the oxye layer En of life of the cell
132
0>0D >rchitecture e timings
+ase upon inepenent
blocks (T Mio cells here)
+lock& smallest erasable unit
'age& smallest
programmable unit
(eometr: F =imings
1 pa*e
(eometr: F =imings
0>0D flash M%@9P0 ML@& MTBEF5BD*7D@S>++
389:6 .its/pa*e ;8 <= 4 228 =>
29:
pa*es/
.loc?
1 +lash
cell
ML!
'age Sije T m+
+lock Sije 5 M+
@hip Sije 5a *+
9ea 'age (os) 5^7
'rogram 'age (os) 5777
Erase +lock (os) C777
1loatin*
*ate
1loatin*
*ate
'ontrol
*ate
'ontrol
*ate
133
'rogram Disturb
Some cells not being
programme recei-e
ele-ate -oltage stress
(near the cells being
programme)
Stresse cells can Stresse cells can
appear feakly programme
9eucing program isturb&
Ise Error @orrection @oe to reco-er errors
'rogram page se#uentially fithin a block
'oo?e ;1&S 266@>
134
%mpact on flash chip %Ps
Flash cell technology
Limite lifetime for entire blocks (fhen a cell fear
out( the entire block is marke as faile)6
0>0D Layout an structure
+lock is the smallest erase granularity +lock is the smallest erase granularity
'rogram Disturb
'age is the smallest program granularity (p for SL@)
'ages must me programme se#uentially fithin a
block
Ise of E@@ is manatory E@@ unit is the smallest
rea unit (generally 5 or p page)
135
Flash chips& trens
Density increases (price ecreases)
0>0D process migration& faster than Moore,s Laf (toay B7 nm)
More bits=cell&
SL@ (5)( ML@ (B)( TL@ (C)
Flash chip layout an structure& larger( parallel
Larger blocks (CB B^a 'ages) Larger blocks (CB B^a 'ages)
Larger pages& ^5B + (ol SL@) 5am+ (future TL@)
Dual plane Flash parallelism fithin the flash chip
Lifetime ecreases
577 777 (SL@)( 57 777 (ML@)( ^777 (TL@)
E@@ sije increases
+asic performance ecreases
@ompensate by parallelism
A.raham ;1&S 2611>A Stora*eSearch.com
136
@aract"risti#ues es m"moires Flash
Les bonnes nou-elles &
In seul chip e Flash & T7 Mo=s (lecture) et 57 Mo=s ("criture) K
%l consomme tr!s peu ,"nergie
Et ans un SSD( il y a plusieurs ijaines (-oire centaines) e chips6
Les mau-aises nou-elles
*ranularit" ,acc!s & La page (B mo c D mo) *ranularit" ,acc!s & La page (B mo c D mo)
*ranularit" ,effacement & Le block (5BD mo c ^5B mo)
'ages programm"es s"#uentiellement ans le bloc
0ombre limit" e cycles ,effacement (57
T
J 57
a
)
@ons"#uences
In SSD (comme une cl" IS+ ou une carte SD) n"cessite une FTL
(Flash Translation Layer) pour cacher ces contraintes au prix ,une
baisse e performanceU6
137
Flash Translation Layer (FTL)
>u moins C composants &
Ma&&ing & @orresponance entre aresse
logi#ue et physi#ue
(ar5age !ollection & 9"cup"ration es
espaces obsol!tes
Gear Leveling & Distribution "#uilibr"e
es effacements es effacements
Mais aussi
*estion u parall"lisme (entre les chips)
*estion u T9%M
>aptabilit"
@ompression =D"uplication
@hiffrement
@ache
U
138
G 'i!ges H es m"moires Flash (5)
'erformance instables a-ec le taux e remplissage u SSD
"andom 7rites B Sams!n* SSD
5!t o+ the .ox
"andom 7rites B Sams!n* SSD
A+ter +illin* the device
139
G 'i!ges H es m"moires Flash (B)
t (s)
T (s)
'erformances et comportements iff"rents
Memoright & Ecriture al"atoire tr!s coWteuse (in"p6 taille)
%ntel XB^ & Lecture al"atoire coWteuse (mais "pens e la taille)
!omment concevoir et o&timiser un $(B) &our ?las' ?
Performance SSD Memoright
Taille (Ko) Taille (Ko)
Performance SSD X25
140
M"moire Flash comme m"moire seconaire
RAM
SSD
141
Stockage ;ybrie (magn"ti#ue = Flash)
RAM
SSD Dis#ue magn"ti#ue
142
M"moire Flash comme m"moire cache
SSD cache RAM
Dis#ue magn"ti#ue
143
Stockage hybrie X Flash cache
SSD cache RAM
Dis#ue magn"ti#ue SSD
144
@onclusion & ;i"rarchie m"moire (a-ant)
Cache processeur
RAM
Disques
10 Go/s
1 Go/s
(x10
-1
)
100 Mo/s
5
57
57
b
57ms
57
5
7675
Ratio Prix (approx) Accs (ns) Dbit
Disques
Bandes / Disques optiques
100 Mo/s
(x10
-2
)
10 Mo/s
(x10
-3
)
57
57ms
57
57
## sec
7675
76775
145
@onclusion & ;i"rarchie m"moire (apr!s)
Cache processeur
RAM
Ratio Prix (approx) Accs (ns)
10 Go/s
1 Go/s
(x10
-1
)
Dbit
Flash
5
57
57
5
Disques
10 Mo/s
(x10
-2
)
Flash
57
b
57 ms
7675
Tape is Dead,
Disk is Tape,
Flash is Disk,
RAM Locality is King
Bandes / Disques optiques
Jim Gray (Turing Award 1998) 146
Contraintes dintgrit
-
147
-
Triggers
CFA - AFTI Nicolas Anciaux
Plan de la journe
1. Contrle de lintgrit des donnes
Typologie et spcification des contraintes dintgrit
Norme SQL2
Implmentation dans Oracle (bcp de diffrences avec la norme !)
Analyse, contrle des contraintes par le SGBD
2. Les dclencheurs
148
2. Les dclencheurs
Dfinition de la norme SQL2
Implmentation dans Oracle (bcp de diff. avec la norme !)
3. Exercices sur Oracle
Cration de contraintes : SQL pur, SQL check ou Trigger ?
Exercices
Contrle dintgrit
But
Dtecter les mises jour errones
Ragir
rejeter la transaction
compenser les erreurs
Mise en oeuvre
149
Mise en oeuvre
Langage de dfinition de contraintes d'intgrit
Processus de vrification automatique des contraintes
Bnfice supplmentaires de cette implmentation
Simplifie le code des applications
Mise en commun des contraintes
Cohrence globale des contraintes
Types de contraintes
Contraintes structurelles
Spcifient la structure des donnes de la base
Tables, colonnes, lignes
Trois sortes de contraintes structurelles
Contrainte dentit
Contrainte rfrentielle
Contrainte de domaine
150
Contrainte de domaine
Contraintes comportementales
Spcifient une rgle dvolution des donnes
Plusieurs sortes de contraintes comportementales
Domaine de variation
Contraintes temporelles
Contraintes quationnelles
Dpendances gnralises,
Contraintes structurelles
Contrainte dentit
Contrainte de cl
Un groupe dattributs cl par relation
Ex: identifiant de chaque personne
Contrainte de non nullit
Valeur dattribut doit tre renseigne
Ex: nom de chaque personne
Contrainte dunicit
CREATE TABLE personne
(
id INTEGER PRIMARY KEY,
151
Contrainte dunicit
Valeur dattribut doit tre unique
Ex: numro de scurit sociale
Contrainte rfrentielle
Valeurs dun dattribut existent
comme cl dune relation
Contrainte de domaine
typage des valeurs de lattribut
nom VARCHAR(15) NOT NULL,
num_scu NUMBER(15) UNIQUE NOT NULL,
nom_ent VARCHAR(15) REFERENCES entreprise
);
Contraintes comportementales (1)
Domaine de variation
Prcise lensemble des valeurs
permises dun attribut
Lensemble peut tre une liste de
valeurs discrte ou non
Ex: couleur rouge, blanc, ros
Contraintes temporelles (SQL2)
CREATE TABLE Vin
(,
couleur VARCHAR(5) CHECK ( couleur IN
('rouge', 'blanc', 'ros') ),
)
TRIGGER degr_croissant
BEFORE UPDATE OF degr ON vin REFERENCING
152
Contraintes temporelles (SQL2)
Comparent ancienne et nouvelle
valeurs dun attribut
Ex : degr du vin ne peut dcrotre
Contraintes quationnelles
Comparent des expr. arithmtiques
sur les donnes de base
Peuvent tre temporelles
(ancienne et nouvelle valeur)
Ex : qt produite qts bues
CREATE ASSERTION quantite_produite
CHECK ( ( SELECT SUM(qte) FROM Vins) >
( SELECT SUM(qte) FROM Buveur) )
OLD ROW AS vin_avant
NEW ROW AS vin_aprs
FOR EACH ROW
WHEN (vin_aprs.date > vin_avant.date AND
vin_aprs.degr < vin_avant.degr )
BEGIN
lancerException
END
Contraintes comportementales (2)
Dpendances fonctionnelles
valeur {attributs}
! valeur {autres attributs}
Ex : cru et anne dun vin degr
Dpendances multivalues
valeur {attributs}
! {valeurs {autres attributs}}
CREATE ASSERTION dependance_fonctionnelle
CHECK( NOT EXISTS (SELECT * FROM Vin V1, Vin V2
WHERE V1.cru = V2.cru AND
V1.anne = V2.anne AND
V1.degr V2.degr ));
CREATE ASSERTION dependance_nultivalue
CHECK( NOT EXISTS (SELECT * FROM Vente V1,
Vente V2
WHERE V1.prix > V2.cout));
153
Ex : prix vente > cot production
Dpendances dinclusion
{valeurs {attributs}}
{valeurs {autres attributs}}
Ex : client.nom personne.nom
Cas part. : dpendance rfrentielle
{valeurs {attributs}}
{valeurs {attributs_cl}}
Ex : client.nom_ent ent.nom
CREATE ASSERTION dependance_inclusion
CHECK ( NOT EXISTS ( SELECT * FROM Cli C
WHERE nom NOT IN (
SELECT C.nom
FROM Pers P
WHERE C.nom = P.nom)
)
);
CREATE TABLE Client
(,
nom_ent VARCHAR(20) REFERENCES Ent(nom),
)
Expression des contraintes en SQL2
Une contrainte dintgrit peut tre
Associe un domaine
Spcifie
Au travers de la clause CREATE DOMAIN
Lors de la dfinition de lattribut dans la clause CREATE TABLE
Associe une relation
154
Associe une relation
spcifie
Aprs la dfinition des attributs de la clause CREATE TABLE
Aprs la dfinition de la table avec ALTER TABLE
Dissocies
Spcifie au travers de la clause CREATE ASSERTION
Tout ceci peut tre spcifi par la langage SQL2
SQL2 : contrainte de domaine (1)
Dfinition possible dans la clause CREATE DOMAIN
CREATE DOMAIN <nom> <type> [DEFAULT VALUE valeur]
[CONSTRAINT <nom_contrainte> CHECK (VALUE expr) ]
expr ::=[NOT|IS NOT] EXISTS|IN|BETWEEN|LIKE|NULL requete_sql | <val>*
Exemple
155
Ensuite, le domaine peut servir typer des attributs
CREATE DOMAIN couleur_vins CHAR(5) DEFAULT VALUE 'rouge'
CONSTRAINT couleurs_possibles
CHECK ( VALUE IN ('rouge', 'blanc', 'ros') )
SQL2 : contrainte de domaine (2)
Spcification possible dans la clause CREATE TABLE
CREATE TABLE <nom_table>
(
<nom_colonne type|nom_domaine>* [<contrainte_colonne>*]
[<contrainte_table>*]
)
<contrainte_colonne>::=
[CONSTRAINT nom_contrainte]
< NOT NULL|UNIQUE|PRIMARY KEY|
156
Exemple
< NOT NULL|UNIQUE|PRIMARY KEY|
REFERENCES nom_table(liste_colonnes)|
CHECK(expr)>
[NOT] DEFERRABLE
CREATE TABLE Vin
(
id INTEGER PRIMARY KEY,
couleur COULEURS_VINS,
cru VARCHAR(20),
millesime DATE,
degre INTEGER CHECK(degre BETWEEN 8 AND 15) NOT DEFERRABLE,
quantite INTEGER
);
SQL2 : contraintes de relations (1)
Spcification possible dans la clause CREATE TABLE
CREATE TABLE <nom_table>
(
<nom_colonne type|nom_domaine>* [<contrainte_colonne>*]
[<contrainte_table>*]
)
< contrainte_table > ::=
[CONSTRAINT nom_contrainte ]
< UNIQUE (liste_colonnes)|PRIMARY KEY (liste_colonnes)|
CHECK (expr)|
FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes)>
157
Exemple
CREATE TABLE Vin
(id INTEGER PRIMARY KEY,
couleur COULEURS_VINS,
cru VARCHAR(20),
millesime DATE,
degre INTEGER CHECK(degre BETWEEN 8 AND 15) NOT DEFERRABLE,
quantite INTEGER,
CONSTRAINT dependance_fonctionnelle
CHECK (NOT EXISTS (SELECT *
FROM vins
GROUP BY cru,millesime
HAVING COUNT(degre) > 1)
NOT DEFERRABLE);
FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes)>
[NOT] DEFERRABLE
SQL2 : contraintes de relations (2)
Sous-cas important : les contraintes rfrentielles
Caractrisent toutes les associations
Peuvent tre croises mode DEFERRABLE
En cas de violation de la contrainte
Mise jour peut tre rejete
Action de correction peut tre dclenche
ON DELETE : action effectuer si suppression d'un tuple rfrenc
ON UPDATE : action effectuer si MAJ de la cl d'un tuple rfrenc
158
Exemple
ON UPDATE : action effectuer si MAJ de la cl d'un tuple rfrenc
FOREIGN KEY (<liste_colonnes>)
REFERENCES <nom_table> (<liste_colonnes>)
[ON DELETE {CASCADE | SET DEFAULT | SET NULL}]
[ON UPDATE {CASCADE | SET DEFAULT | SET NULL}]
[NOT] DEFERRABLE
CREATE TABLE Abus
( id INTEGER NOT NULL,
id_vin INTEGER NOT NULL,
date DATE,
CONSTRAINT rfrence_buveurs FOREIGN KEY id REFERENCES Buveurs (id)
ON DELETE CASCADE DEFERRABLE
);
Exemple
SQL2 : contraintes dissocies
Spcification sous forme dassertion (rgle)
Ex: la quantit bue reste < 100 pour chaque buveur
CREATE ASSERTION <nom_contrainte> CHECK (condition)
159
Exemple
NB : les contraintes dissocies peuvent tre multi-tables
Exemple
CREATE ASSERTION quantite_produite
CHECK ( (SELECT SUM(quantite) FROM Vins) >
( SELECT SUM(quantite) FROM Abus) )
CREATE ASSERTION quantite_produite
CHECK ( NOT EXIST (SELECT Id FROM Buveur
GROUP BY Id
HAVING SUM(qt)>100)
Dans les SGBD commerciaux
Contraintes de la norme SQL2 pas totalement implmente
Oracle
Domaine et dassertion non supports
Clause check ne peut contenir de requte
Sybase, SQL Server
Clause check ne peut contenir de requte
160
Une contrainte par attribut au maximum
IBM DB2
Contraintes de la clause create table sur les valeurs dun mme tuple
Une contrainte par attribut au maximum
MsAccess
Aucune clause check
Pas de domaine
Comment palier ces limitations ?
Palier aux limitations sur les contraintes
Domaines remplacs par des tables et des cls trangres
SQL2 introduit le concept de dclencheur (cf. partie suivante)
Si un Evnement se produit sur la base
Et quune Condition est vrifie
CREATE TABLE Ville
( nom VARCHAR(128),
CONSTRAINT nom PRIMARY KEY );
CREATE TABLE Personne
( ,
ville VARCHAR(128) REFERENCES Ville,
);
161
Et quune Condition est vrifie
Le moteur dclenche une Action (traitement)
Les utiliser pour spcifier les contraintes complexes
TRIGGER degr_croissant
BEFORE UPDATE OF degr ON vin
REFERENCING OLD ROW AS vin_avant NEW ROW AS vin_aprs FOR EACH ROW
WHEN (vin_aprs.date > vin_avant.date AND vin_aprs.degr < vin_avant.degr )
BEGIN
lancerException
END
Contraintes structurelles Oracle (1)
Contrainte dentit (cl de relation, non nullit, unicit)
Spcifies lors de la cration de la table
En tant que contrainte de colonne
CREATE TABLE Ville
( id NUMBER CONSTRAINT pk PRIMARY KEY,
);
162
En tant que contrainte de table
Ajoute aprs la cration de la table (contrainte de table)
Retires (si nomme):
CREATE TABLE Ville
( id NUMBER,
,
CONSTRAINT pk PRIMARY KEY (id) );
ALTER TABLE Ville ADD ( CONSTRAINT pk PRIMARY KEY(id) );
ALTER TABLE Ville DROP CONSTRAINT pk;
Contraintes structurelles Oracle (2)
Contraintes rfrentielles (cl trangre)
Spcifies lors de la cration de la table
En tant que contrainte de colonne
En tant que contrainte de table
CREATE TABLE Ville
( ,
dept_id NUMBER CONSTRAINT fk REFERENCES Dept(Id),
);
163
En tant que contrainte de table
Ajoute aprs la cration de la table (contrainte de table)
NB: on delete cascade OK, on update cascade non support
Retires de la mme manire que les contraintes dentit
ALTER TABLE Ville ADD ( CONSTRAINT fk FOREIGN KEY (dept_id) REFERENCES Dept(Id) );
CREATE TABLE Ville
( ,
dept_id NUMBER,
,
CONSTRAINT fk FOREIGN KEY (dept_id) REFERENCES Dept(Id) );
Contraintes structurelles Oracle (3)
Contrainte de domaine
Typage de lattribut lors de la cration de la table
Domaine de variation
Exprime avec la clause CHECK (sans requte)
En tant que contrainte de colonne
CREATE TABLE Dept
164
En tant que contrainte de table
CREATE TABLE Dept
( ,
code CHAR(2) CONSTRAINT code_dept
CHECK (code BETWEEN 1 AND 99)
);
CREATE TABLE Dept
( ,
code CHAR(2)
,
CONSTRAINT code_dept CHECK (code BETWEEN 1 AND 99) );
Contraintes comportementales Oracle
Contraintes temporelles
Contraintes quationnelles
165
Contraintes quationnelles
Dpendances gnralises
Exprimes avec des triggers ?
Vrification des contraintes
Ncessite un travail (non trivial) de la part du SGBD
Souvent pour cela que tout SQL2 nest pas support dans les produits
Lors de la cration de la contrainte
Le SGBD vrifie la cohrence des contraintes
La non-redondance des contraintes
166
La non-redondance des contraintes
Par des mcanismes de preuve
Lors de mise jour dans la base
On rsout les transgressions de contraintes suivant 2 mthodes
Par prvention dincohrence
Des rgles empchent les mises jours transgressant les contraintes
Par dtection dincohrence et abandon de mise jour
Associe un traitement de vrification sur insert, delete, update
Il sagit autant que possible dun test diffrentiel (ne pas tout re-tester!)
Par prvention dincohrences
Une mise jour m n'est excute
que si l'tat rsultant de la base Dm
est garanti tre cohrent
Notion de pr-test
Prvention / dtection de transgression
Par dtection dincohrence
Toute mise jour m est excute
Ltat D de la base devient Dm
Si Dm est dtect incohrent, on
restitue D
2 mthodes pour assurer la cohrence vis vis des contraintes
167
Notion de pr-test
A et A' sont des assertions
A' est un pr-test pour A et m SSI
(D / A Dm / A) D / A'
problmes
Ncessit de dfinir toutes les mises
jour permises
Non gnralit
restitue D
Notion de post-test
A et A' sont des assertions
A' est un post-test pour A et m ssi
(D / A Dm / A) Dm / A
Difficults
Trouver un A' plus simple vrifier
que A
Dfaire la transaction en cas
d'incohrence
Exemple de vrification prventive
Pr-test : A = A Q
Lalgorithme ajoute conjonctivement lassertion A la sous
formule conditionnant l'excution de la mise jour
168
devient
formule conditionnant l'excution de la mise jour
Exemple : A = salaire > SMIC
UPDATE employ
SET salaire = salaire * 0.9
WHERE nom = 'Raleur';
UPDATE employ
SET salaire = salaire * 0.9
WHERE nom = 'Raleur'
AND salaire * 0.9 > SMIC;
Simplification des vrifications de contraintes lors de
modification de la base
Ex : la relation Abus rfrence la relation Vins
Notion de pr-tests diffrentiels
Tuples
insrer
dans R
Tuples
R+
Mises
jour de R
Pr-test
commit
169
Pr-tests simplifis
Insertion (Abus) : Abus+.id_vin = Vins.id
Suppression (Abus) : rien faire
Insertion (Vins) : rien faire
Suppr. (Vins) : Count (Abus.id_vin) where (Abus.id_vin = Vins-.idm) = 0
Trs efficace mais complexe implanter
MEM. CACHE
Tuples
supprimer
de R
R-
DISQUE
Exemples de pr-tests diffrentiels
Tests diffrentiels de contraintes classiques
Opration
Type de contrainte
insertion suppression modification
K cl primaire de R
Cls de R
+
uniques et ne sont
pas dans R
Rien faire
Cls de R
+
uniques et ne
sont pas dans R-R
-
170
A cl trangre de R
rfrence RefK de S
Tuples de R+ rfrencent un
tuple de S
S: cls K de S- ne
figurent pas dans A de R
Tuples de R+ rfrencent
un tuple de S
A domaine de R Domaine A sur R+ Rien faire Domaine A sur R+
Non nullit Non-nullit sur R+ Rien faire Non-nullit sur R+
Dpendance fonctionnelle
AB
t tuple de R+, u tuple de R
tel que t.A = u.A t.B = u.B
Rien faire Pas de forme simplifie
Contrainte temporelle sur
attribut
Rien faire Rien faire
Vrifier les tuples de R+
par rapport ceux de R-
Conclusion contraintes dintgrit
Assurent la cohrence de la BD
Dfinies dans la Norme SQL2
Du papier
Sont vrifies par le moteur du SGBD (sur le serveur)
Lors de la validation du traitement ou au cours du traitement
La centralisation permet
171
La centralisation permet
De vrifier la validit globale
Un gain en bande passante
Implantation dans les systmes rels
Contraintes simples
Dfinition avec SQL associe celle des objets de la base
Contraintes complexes ?
Par dclenchement (ventuellement conditionnels) de traitements crits dans
un langage procdural (triggers SQL2)
Les triggers
Leur utilisation dans
Oracle
172
Oracle
SQL2 : dclencheurs (Triggers)
Dfinition
Action ou ensemble d'actions dclenche(s) automatiquement
lorsqu'une condition se trouve satisfaite aprs l'apparition d'un
vnement
Un dclencheur est une rgle ECA
vnement = mise jour d'une relation (INSERT, DELETE, UPDATE)
Condition = optionnelle, quivaut une clause WHERE
Action = excution de code spcifique (ordre SQL ou PL/SQL)
173
Action = excution de code spcifique (ordre SQL ou PL/SQL)
Requte SQL de mise jour, excution d'une procdure stocke, abandon
d'une transaction, ...
De multiples usages sont possibles
tendre les mcanismes de contrle dintgrit
Validation des donnes entres, maintien de rgles dintgrit complexes
Contrle dynamique et volutif des manipulations de la BD
Maintien de statistiques, audit de la base
Duplication
Mise jour de copies multiples, Drivation des donnes additionnelles
Mise jour au travers de vues
SQL2 : dfinition des triggers
CREATE TRIGGER <nom-trigger> <vnement> [<condition>] <action>*
<vnement> ::=
BEFORE | AFTER | INSTEAD OF
{INSERT | DELETE | UPDATE [OF <liste_colonnes>]}
ON <nom_de_table>
<condition> ::=
[REFERENCING OLD AS <nom_tuple> NEW AS <nom_tuple>
FOR EACH ROW]
WHEN <condition_SQL>
174
<action> ::=
{requte_SQL [FOR EACH ROW] | exec_procdure |
COMMIT | ROLLBACK}
CREATE TRIGGER rfrence_vins
BEFORE DELETE ON Vins
FOR EACH ROW
DELETE FROM Abus
WHERE Abus.id_vin = Vins.id
CREATE TRIGGER degr_croissant
BEFORE UPDATE OF degre ON Vins
REFERENCING
OLD AS old_vin
NEW AS new_vin
FOR EACH ROW
WHEN (new_vin.degre < old_vin.degre)
ROLLBACK
Exemples
SQL2 : Gestion des Triggers
CREATE [OR REPLACE ] TRIGGER <nom-trigger>
<vnement> [<condition>] <action>*
DROP TRIGGER <nom-trigger>
ALTER TRIGGER <nom-trigger> ENABLE
ALTER TRIGGER <nom-trigger> DISABLE
175
La cration dun trigger dclenche son activation
On peut remplacer la version prcdente dun trigger
On peut manuellement activer/dsactiver un trigger
Mises en garde : interactions
Laction dun trigger peut dclencher dautres triggers
Laction dun trigger peut causer la vrification des
contraintes dintgrit
Les actions de raction aux contraintes dintgrit
peuvent dclencher des triggers
176
on delete cascade trigger delete
on update cascade / set default / set null
on delete set default / set null trigger update
Triggers des SGBD commerciaux
Diffrences avec le standard
Oracle
1 seul trigger dclench par un mme vnement
Condition : ne peut contenir de requte SQL
Action :
177
Action :
1 bloc PL/SQL anonyme sans COMMIT/ROLLBACK
Pas de mise jour de la table ayant lev le trigger
Pas de lecture de la table ayant lev le trigger ligne
Informix9
Condition : ne peut contenir de requte SQL
Action
1 seul ordre PL/SQL
ou 1 seul appel de procdure/fonction
Dfinition globale des triggers Oracle
Lors dune requte de MAJ sur une table
Insert, delete, update
[si la clause when est vrifie]
Condition sur le tuple mis jour
excution du bloc PL/SQL
CREATE TRIGGER <nom-trigger>
<BEFORE | AFTER>
<INSERT | DELETE | UPDATE>
ON <nom_de_table>
[WHEN (<condition_sur_la_ligne>)]
[FOR EACH <ROW|STATEMENT>]
-- BLOC PL/SQL
178
excution du bloc PL/SQL
Une fois trigger ordre
Avant ou aprs lordre
Une fois par tuple mis jour trigger ligne
Avant ou aprs chaque mise jour
Pour la syntaxe dtaille du PL/SQL, voir la suite
NB : des clauses PL/SQL sont propres aux triggers
INSERTING, DELETING, UPDATING utilisables dans les IF
-- BLOC PL/SQL
DECLARE
BEGIN
END;
Les types de triggers Oracle
Triggers ordre
FOR EACH STATEMENT
Triggers ligne
FOR EACH ROW
Before After
Before After Instead of
179
Insert
Delete
Update
Insert
Delete
Update
Insert
Delete
Update
Insert
Delete
Update
Insert
Delete
Update
Triggers ordre Oracle (1)
CREATE TRIGGER <nom-trigger>
<qd_executer> <ordre_sql> ON <nom_table>
[FOR EACH STATEMENT]
<bloc_plsql>
<qd_executer> ::= BEFORE | AFTER
<ordre_sql> ::= < INSERT | DELETE | UPDATE [OF<liste_colonnes>] >
[OR <ordre_sql>]
Exemple
180
CREATE TRIGGER vrif_qt
AFTER INSERT OR UPDATE OF qt ON Abus
DECLARE
qt_produite NUMBER;
qt_bue NUMBER;
BEGIN
SELECT SUM(qt) into qt_produite FROM Vins;
SELECT SUM(qt) into qt_bue FROM Abus;
IF qt_produite > qt_bue THEN
raise_application_error(-20001, mise jour incohrente);
END IF;
END;
Exemple
Triggers ordre Oracle (2)
Excution du trigger avant ou aprs la requte (ordre)
Avant : mises jour de lordre toutes invisibles
Aprs : mises jour de lordre toutes visibles
Dans le trigger : mise jour impossible de la table modifie
Ex. du trigger vrif_qt
181
C
h
r
o
n
o
l
o
g
i
e
SCN = 8
SCN = 9
SCN = 10
SCN = 7
SCN = 11
Transaction
Insert into Abus as select
R
e
q
u

t
e
SCN = 9
SCN = 8
Trigger vrif_qt
Abus
Dclenche
(aprs insertions)
SCN =11
Exercice 1
Crer un trigger ordre qui sassure que les
modifications sur la table Emp ont bien lieu pendant
les jours ouvrables (du lundi au vendredi)
Vous pourrez utiliser la fonction TO_CHAR(SYSDATE, DY)
qui retourne le jour courant MON, TUE, WED, THU,
FRI, SAT, SUN
182
FRI, SAT, SUN
Exercice 1
Crer un trigger ordre qui sassure que les
modifications sur la table Emp ont bien lieu pendant
les jours ouvrables (du lundi au vendredi)
Vous pourrez utiliser la fonction TO_CHAR(SYSDATE, DY)
qui retourne le jour courant MON, TUE, WED, THU,
FRI, SAT, SUN
183
FRI, SAT, SUN
CREATE TRIGGER emp_changements_permis
BEFORE DELETE OR INSERT OR UPDATE ON Emp
BEGIN
IF TO_CHAR(SYSDATE,DY)=SAT OR TO_CHAR(SYSDATE,DY)=SUN THEN
raise_application_error(-20001, pas de changement le week end);
END IF;
END;
Triggers ligne Oracle (1)
CREATE TRIGGER <nom-trigger> [INSTEAD OF]
<qd_executer> <ordre_sql> ON <nom_table>
[REFERENCING OLD AS <nom_old> NEW AS <nom_new>]
FOR EACH ROW
WHEN(<condition>)
<bloc_plsql>
<qd_executer> ::= BEFORE | AFTER
<ordre_sql> ::= < INSERT | DELETE | UPDATE [OF<liste_colonnes>] >
[OR <ordre_sql>]
184
Variables de transition old et new
nommes implicitement old et new, ou explicitement dans le referencing
utilisables dans le bloc PL/SQL par :new.nom_col et :old.nom_col
NB: pas de new lors dun delete, pas de old lors dun insert
Clause when
Attribut = valeur du tuple avant ou aprs (old.nom_col ou new.nom_col)
Valeur = attribut ou xxx, mais ne peut tre rsultat dune requte
[OR <ordre_sql>]
<condition> ::= <attribut> <|>|!=|=|[NOT]<IN|BETWEEN|LIKE> <valeur>
Triggers ligne Oracle (2)
Excution avant ou aprs chaque mise jour de tuple
Difficile de grer les requtes sur la table en mutation
Les excution du trigger devraient pouvoir lire la table
Mais lecture de la table mise jour erreur mutating table
Raison technique : mise jour des index en fin de requte, update et
185
delete posent des verrous sur les tuples modifier ou supprimer,
C
h
r
o
n
o
l
o
g
i
e
SCN = 8
SCN = 9
SCN = 10
SCN = 7
SCN = 11
Transaction
Update from Vin where
R
e
q
u

t
e
R
e
q
u

t
e
SCN = 9
SCN = 8
SCN = 11
Trigger degrs_croissant
Vin
Dclenche
SCN =9
Dclenche
SCN =9
Trigger degrs_croissant
Triggers ligne Oracle (3)
Problme de table en cours de mutation
Slection de la table en cours de mise jour impossible
(sauf before insert avec mise jour unitaire)
Triggers ligne
Triggers ordre
186
Before After
Insert
Delete
Update
Insert
Delete
Update
Instead of
Insert
Delete
Update
Before After
Insert
Delete
Update
Insert
Delete
Update
Exercice 2
Crer un trigger ligne qui sassure que lorsquun employ est
embauch pour un type demploi, son salaire soit dans les
bornes admises pour ce type demploi. Les tables ont la
structure suivante :
Employs (Id, Nom, Prnom, Age, Salaire, Embauche, Emploi, Dept)
Table TypeEmploi (Type, Sal_inf, Sal_sup)
187
Trigger instead of Oracle
Implicitement activ for each row (peut tre dfini for
each statement)
La mise jour sur la vue (ne peut porter sur une table
dans Oracle) est remplace par laction PL/SQL
188
dans Oracle) est remplace par laction PL/SQL
old et new peuvent tre utilises comme si la
modification avait lieu
Utilisation principale : report dans la base des mises
jour sur une vue
Commandes Oracle relatives aux triggers
DROP TRIGGER : efface le trigger
Slash (/) : permet de compiler le trigger dans SQLPlus
SHOW ERRORS
189
SHOW ERRORS
affiche les erreurs dans le cas o le trigger aurait t cre
avec des erreurs de compilation dans SQLPlus
CREATE OR REPLACE TRIGGER : permet de
remplacer le trigger sil existe dj
Rsum des limites des triggers Oracle
Un trigger
Ne peut contenir de COMMIT ou de ROLLBACK
Ne peut mettre jour la table qui le dclenche
Un trigger ordre
ne peut utiliser OLD et NEW
190
Un trigger ligne
Ne peut selectionner (lire) la table qui le dclenche, sauf dans le cas
dun BEFORE INSERT dclench par un ordre SQL unitaire du type
INSERT INTO <table> VALUES();
Un trigger INSTEAD OF
Ne peut etre dclench lors dun ordre sur autre chose quune vue (ex:
une table)
Exercice 3
Dire ce quil se passe quand on excute les triggers suivants
CREATE TRIGGER auto_count
AFTER INSERT OR DELETE ON employes
DECLARE
i NUMBER;
CREATE TRIGGER audit_temp
AFTER DELETE ON temp
BEGIN
INSERT INTO temp VALUES (suppression de ligne:||SYSDATE);
END;
191
i NUMBER;
BEGIN
SELECT COUNT(*) INTO i FROM employes ;
INSERT INTO stat VALUES (nombre demployes = || i);
END;
CREATE TRIGGER dates_commandes_croissante
AFTER INSERT ON commande
FOR EACH ROW
DECLARE
max_date NUMBER;
BEGIN
SELECT MAX(date_com) INTO max_date FROM commande;
IF :NEW.date_com < max_date THEN
RAISE_APPLICATION_ERROR(20001, date invalide);
END IF;
END;
Les squences Oracle
Syntaxe des squences Oracle
Utilises
pour donner une valeur aux cls primaires
CREATE SEQUENCE <nom_sequence>
[START WITH <integer>]
[INCREMENT BY <integer>]
[MAXVALUE <integer>]
[CYCLE | NOCYCLE]
[ORDER |NOORDER]
192
pour donner une valeur aux cls primaires
pour gnrer des timestamp
On utilise ORDER : nombres gnrs dans lordre des demandes
Attributs :
CURVAL : retourne la valeur courante
NEXTVAL : incrmente et retourne la nouvelle valeur
Exemple
CREATE SEQUENCE cl_client INCREMENT BY 1;
INSERT INTO client VALUES (cl_client.NEXTVAL,
Oracle et les contraintes dintgrit
Les contraintes dintgrit dans Oracle sont exprimes
Lors de la cration de la table sur un attribut ou la table entire, comme
cela est prvu par la norme SQL2
Grce des triggers dfinis sur les tables
Cependant, des limitations par rapport la norme SQL2
Create domain et create assertion non supports
193
Create domain et create assertion non supports
Le contenu des clauses check dexpression de contrainte est rduit
A une expression sur le tuple concern par la mise jour de la table
Les requtes sur les objets de la base y sont proscrites
Les triggers permettent dexprimer les autres contraintes dintgrit mais
Pas de requte dans la clause when
Pas dordre commit ou rollback dans le traitement dclench
Pas de mise jour de la table qui dclenche le trigger au sein du traitement
Mise jour sur une table temporaire qui dclenche un deuxime trigger
Pas de consultation de la table en cours de modification pour un trigger ligne
Gestion de la
concurrence et
194
concurrence et
optimisation
CFA - AFTI Nicolas Anciaux
Plan de la journe
Introduction au problme de concurrence
Dfinition et justification du protocole de concurrence
Les techniques
Introduction au problme doptimisation
Dfinition du problme
Porte du problme: touche tous les acteurs
195
Porte du problme: touche tous les acteurs
(administrateurs BD, dveloppeurs, utilisateurs)
Sur Oracle :
Expriences sur la concurrence daccs
Expriences sur loptimisation
Problme de la concurrence daccs
Un problme transactionnel
Les protocoles de concurrence sont ncessaires
Sinon conduit le SGBD des erreurs
La difficult : des protocoles performants
196
La difficult : des protocoles performants
Les techniques
Degrs disolation
Multi-versions
Modification des programmes
Leur utilisation sur des exemples
2. Gestion de transactions
Etat cohrent
Etat cohrent
Incohrence possible...
Begin Commit
Transaction
197
Squence d'instructions dun programme de base de donnes
encadre par un ordre de dbut et de fin de transaction faisant
passer la base dun tat cohrent un tat cohrent.
Begin
CEpargne = CEpargne - 3000
CCourant = CCourant + 3000
Commit T1
Les proprits ACID
Problmes lis aux transactions :
Concurrence daccs
Violation de la cohrence
Pannes
de transaction : ex. annulation
du systme : ex. crash serveur
de media : ex. perte du disque
BD
198
de media : ex. perte du disque
de communication : ex. dfaillance rseau
Un SGBD garantit l'excution ACID de toute transaction :
Atomicit : la transaction s'excute en tout ou rien
Cohrence : la transaction respecte les contraintes d'intgrit
Isolation : la transaction ne "voit pas" l'effet des autres transactions
Durabilit : les effets d'une transaction valide persistent
Atomicit / Durabilit
ATOMICITE
Begin
CEpargne = CEpargne - 3000
CCourant = CCourant + 3000
Commit T1
Panne
DURABILITE
Begin
CEpargne = CEpargne - 3000
CCourant = CCourant + 3000
Commit T1
Sassurer que le virement
Crash disque
199
Gestion dun journal avant
images physiques avant
modification
permet de dfaire une
transaction nayant pas commise
Annuler le dbit !!
Sassurer que le virement
a t report dans la BD !
Gestion dun journal aprs
images physiques aprs
modification
permet de refaire une
transaction qui a commise.
Isolation : dfinition du problme
Scnario 1 :
Joe consulte son compte (lectures) au moment o sa banque le crdite de 500 euros (critures)
Blocker le crdit ? Le montrer Joe ?
Scnario 2 :
Joe retire 200 euros (critures) au mme moment o sa banque le crdite de 500 euros (critures)
Blocker le crdit ? Ne pas le perdre !
Scnario 3 :
Une analyse des ventes (lectures) est faite dans un supermarch alors que les caisses sont ouvertes
(critures)
200
(critures)
La lecture ne doit pas bloquer les caisses !
Scnario 4 :
Les places de la finale de la coupe du monde sont mises en vente sur Internet le lundi 8h (conflits
massifs)
conflits massifs !
Scnario 5 :
Rservation SNCF (lectures (choix) puis critures (achat))
Comment viter de bloquer tout le monde ?
Objectif :
Chacun doit travailler en isolation i.e. comme si il tait seul utilisateur de la base de donnes
Excution sans contrle
Absence de contrle
Perte doprations
Observation dincohrence
Introduction dincohrence
Lectures non reproductibles
T1 (Joe) T2 (banque)
Begin
Lire CCx
Begin
Lire CCx
Sc"nario B c 'erte ,op"rations
201
Protocole de concurrence
But: viter les problmes
et rester performant
A base de verrouillage:
Verrou en lecture : partag
Verrou en criture : exclusif
Lire CCx
x = x + 500
Ecrire X CC
Commit T2
x = x 200
Ecrire X CC
Commit T1
temps
Protocole de Verrouillage 2 Phases
Rgle 1 : verrouillage
v
e
r
r
o
u
s
temps
T
Lectur
e
Ecritur
e
Lecture
Ecritur
e
202
Rgle 1 : verrouillage
Avant d'accder une donne D, une transaction doit acqurir un
verrou sur D. Si D est dj verrouille dans un mode non
compatible, la transaction attend.
Rgle 2 : deux phases
Ds qu'une transaction relche un verrou, elle ne peut plus acqurir
de nouveau verrou
Verrouillage 2 phases stricts
Les verrous sont gards jusquau commit
Optimisation des transactions
L'objectif, en termes de performances, est de rduire :
les blocages : une transaction est bloque en attente dun verrou
les inter-blocages : un ensemble de transactions sattendent
mutuellement
T1 T2
203
Solutions existantes
Degrs disolation
Protocoles multiversions
Modification des donnes / programmes
T3 T4
Degrs d'isolation SQL normaliss SQL2
Objectif: accrotre le paralllisme en autorisant certaines
transactions violer la rgle d'isolation
Degrs standardiss SQL2
(Set Transaction Isolation Level)
Degr 0 (Read Uncommitted)
Lecture de donnes sales Interdiction dcrire.
204
Lecture de donnes sales Interdiction dcrire.
Ex. lecture sans verrouillage
Degr 1 (Read Committed)
Lecture de donnes propres Ecritures autorises
Ex. Verrous court en lecture, long en criture
Degr 2 (Repeatable Read)
Pas de lecture non reproductible
Ex. Verrous longs en lecture et en criture
Degr 3 (Serializable)
Pas de requte non reproductible (fantme)
Degrs d'isolation SQL : exemples
T1( 1, Read commited) T2( 3,serializable)
Begin Begin
Lit CC (100)
Lit CC (100)
Ecrire CC, CC+10
Lit CC (bloque)
Ecrire CC, CC+20
Commit
(130)
T1( 0, Read uncommited)
T2( 3,serializable)
Begin Begin
Lit CC (100)
Lit CC (100)
Ecrire CC, CC+10
Lit CC (110)
Ecrire CC, CC+20
Lit CC (130)
Commit
205
T1( 2, Repeatable read) T2( 3,serializable)
Begin
Select count(*) from Voit
where couleur="rouge"
Begin
Insert into Voit
values (R4, "rouge")
Commit
Select count(*) from Voit
where couleur="rouge"
Commit
T1( 2, Repeatable read) T2( 3,serializable)
Begin Begin
Lit CC (100)
Lit CC (100)
Ecrire CC, CC+10
Lit CC (100)
Lit CC (100)
Commit
Ecrire CC, CC+20
Commit
bloque
Protocoles multiversions (Oracle)
Objectif : faire cohabiter sans blocage des transactions conflictuelles
en les faisant travailler sur diffrentes versions des donnes
T1( 1, Read commited) T2( 3,serializable)
Begin Begin
Lit CC (100)(V1)
Lit CC (100)(v1)
Ecrire CC, CC+10 (V2)
T1 ( 3, serializable) T2( 3,serializable)
Begin Begin
Lit CC (100)(V1)
Lit CC (100)(v1)
Ecrire CC, CC+10 (V2)
206
Ecrire CC, CC+10 (V2)
Lit CC (100)(V1)
Ecrire CC, CC+20 (V2)
Commit
Lit CC (130)(V2)
Ecrire CC, CC+10 (V2)
Lit CC (100)(V1)
Ecrire CC, CC+20 (V2)
Commit
Lit CC (100)(V1)
T1 ( 3, serializable) T2( 3,serializable)
Begin Begin
Lit CC (100)(V1)
Lit CC (100)(v1)
Ecrire CC, CC+10 (V2)
Ecrire CC, CC-50 (V?)
Ecrire CC, CC+20 (V2)
Commit
Erreur !
bloque
T1 ( 1 Read commited) T2( 3,serializable)
Begin Begin
Lit CC (100)(V1)
Lit CC (100) (v1)
Ecrire CC, CC+10 (V2)
Ecrire CC, CC-50 (V?)
Ecrire CC, CC+20 (V2)
Commit
Eciture faite (CC = 80)
bloque
Modifications des donnes / Programmes
Scnario 4 : Les places de la finale de la coupe du monde sont
mises en vente sur Internet le lundi 8h
Une seule donne Trop de conflits
Exemple de solution :
Ide : partitionner le stade :
Chaque utilisateur se connectant est
alatoirement dirig vers 1 des partitions.
207
alatoirement dirig vers 1 des partitions.
Le degr de paralllisme est multipli par le
nombre de partitions.
Scnario 5 : Rservation SNCF (choix puis achat)
Si verrouillage ds le dbut, beaucoup de conflits
Sinon, risque de perdre la place convoite
Cest le deuxime choix qui est implant
208
Conclusion sur le verrouillage
Scnario 1 : Compte Joe : lecture / criture
Multiversion + Joe en degr Repeatable Read ou Read Commited
Scnario 2 : Compte Joe : criture / criture
Conflit invitable quelque soit la mthode (mais rare)
Scnario 3 : lectures massives / critures (supermarch)
Multiversion + degr Read Commited (peu de versions)
208
Multiversion + degr Read Commited (peu de versions)
Scnario 4 : critures massives (coupe du monde)
Partitionnement du stade
Scnario 5 : rservations SNCF (lectures puis critures)
Transaction 1 = Phase de choix en Multiversion et Read Commited
Transaction 2 = Phase dachat en Multiversion et Repeatable Read
Il est donc particulirement important de matriser les degrs disolations et
les notions transactionnelles
Problme de loptimisation
Un problme global
Touche lensemble des acteurs (pas seulement lditeur)
Select
From
209
From
Where
Requte SQL Arbre logique Arbre Physique
Optimisation
210
Un problme dquivalence smantique
Une question
Plusieurs expressions
quivalentes en SQL
Plusieurs expressions
quivalentes en algbre
Plusieurs algorithmes
210
Plusieurs algorithmes
algbriques quivalents
C
o

t
Plans smantiquement quivalents
Ex. 9 jointures
17 Milliards de plans
211
Objectifs de loptimisation
Objectif de loptimiseur : trouver le meilleur plan
Donnant les rsultats le + vite .
Optimisation pour le temps de rponse (response time)
Minimisant la consommation de ressources
Optimisation du travail total (Total work)
Minimisant le temps de dlivrance des premiers tuples
Optimisation de la latence (Latency / First tuples )
211
Optimisation de la latence (Latency / First tuples )
Qui optimise ?
Idalement 2 requtes quivalentes mme plan, le meilleur !
Seuls les concepteurs de SGBD doivent matriser loptimisation
Pratiquement, ce qui conduit des plans diffrents
2 modles conceptuel/physiques diffrents (dun mme problme)
2 oprations smantiques quivalentes (srie de requtes SQL diffrentes)
2 requtes SQL quivalentes
Le concepteur et le programmeur BD jouent un rle majeur
212
Indexation (principe et B+Tree)
Objectif : accs rapide partir dune cl
Moyen : ajout de structures de donnes
(gnralement hirarchiques)
Exemple : B+Tree
Cean
212
Attention :
Surcot lors des mises jour !
Des fois un accs par index est plus coteux !
Adam
Alain
=en
'laire
1elix
il
Dilda
Cean
<arine
&artin
3icole
2a!l
Sophie
Th#o
Tom
Eoe
213
Importance du Schma Physique
L'utilisation d'index
acclre l'excution des slections et des jointures
ralentit l'excution des mises jour et des insertions
offre des informations statistiques l'optimiseur
permet le contrle efficace de contraintes d'intgrit
L'organisation des donnes
213
L'organisation des donnes
galiser les I/O entre disques (log et bases, index et tables,
partitions de tables sur disques) Ex: tablespaces en Oracle
Le choix des "bons" index et l'organisation des
donnes sont dterminants pour les performances
214
Plan dexcution optimis



Select Patients.Nom, Patients.Prnom
From Patients, Visites
Where Patients.Id-P = Visites.Id-P
and Patients.Ville = Paris
and Visites.Date = 15 juin
214

Patients
Visites


Visites


Patients
215
Optimisation Physique
Jointure
Nested Loop Join ?
Index Join ?
Hash Join ?


215
Slection
FTS (Full Table Scan) ?
Index Scan (B+tree) ?
Index Scan (Bitmap) ?
Hash Join ?
Sort Merge Join ?


Visites


Patients
216
Algorithmes de jointure
Nested loop Join : Jointures par boucle imbriques
Pour chaque visite, parcourir les patients
Index Join : Utilisation dindex sur une des relations
Pour chaque visite, retrouver le patient grce lindex
Sort Merge Join
Trier les visites sur le Nde patient
216
Trier les visites sur le Nde patient
Trier les patients sur le Nde patient
Fusionner les deux tables tries (jointure deux doigts)
Hash Join
Hacher les patients sur le Nde patient
Pour chaque visite, calculer la valeur de hachage et chercher
dans la table de hachage le patient correspondant
217
Optimiseur heuristique
Loptimisation est indpendante des donnes
Dpend uniquement de la requte SQL
Exemple dheuristiques classiques
Effectuer les slections en premier
Ajouter un maximum de projections
Utiliser tous les indexes disponibles
217
Utiliser les meilleurs algorithmes de jointure, dans lordre
1. Hash join
2. Sort merge join
3. Nested Loop join avec index
4. Nested loop join
Conclusion
Lordre des oprations dpends de lexpression SQL
Ex = ordre des jointures dtermin par leur ordre dapparition
Prsent dans Oracle = Rule Based Optimizer (RBO)
Optimisation base cot
Graphe d'oprations Schma interne
Dpend des caractristiques des donnes
Prsent dans Oracle (Cost Based Optimizer ou CBO)
Plus efficace que le RBO !
218
Gnrateur de
Plans
Heuristiques
de choix
Plan d'excution
Optimal
Plans d'excution
(espace de recherche)
Statgie de
Recherche
Bibliothque de
transformations
Modle de cot
Difficults de loptimisation base cot
Espace de recherche (plans candidats)
Plusieurs algorithmes pour chaque oprateur
Cots et comportement diffrents
Plusieurs ordonnancement pour les oprations binaires
Sans considrer les algorithmes, il y a 1620 ordres possibles pour
joindre 5 relations, et 17 milliards pour 10 relations !
Utilisation dheuristiques et de programmation dynamique
219
Utilisation dheuristiques et de programmation dynamique
Modle de cot (choix du plan)
Difficult pour estimer le cot de chaque oprateur
Difficult encore plus importantes pour estimer la taille des rsultats
intermdiaires (permettant de calculer loprateur suivant)
Propagation exponentielle des erreurs (dans larbre dexcution) !
Utilisation de statistiques re-calculs frquemment.
220
Les statistiques
Possibilit dhistogrammes
RunStat(<Table>, <attribut>) construction et stockage dun
histogramme de variation de lattribut dans la table.
Utilisation par le modle de cot
Sinon, hypothse d uniformit
Exemple :
Personnes ayant un salaire entre 2K et 4 K ?
220
Personnes ayant un salaire entre 2K et 4 K ?
Personnes ayant 2 vhicules ?
Personnes ayant 2 vhicules et un salaire entre 2 et K4 K?
0 0.5 1 1.5 2.0 2.5 3.0 3.5 4
20%
0 1 2 3 4
15%
20%
15%
3% ? Non !
En fait, 14%
221
Qualit de loptimisation
1. Qualit du schma physique
Indexs
Partitionnement, placement
Configuration
2. Qualit de l'optimiseur (heuristique/cot)
221
2. Qualit de l'optimiseur (heuristique/cot)
Qualit du modle de cot utilis
Qualit de la stratgie de recherche de l'optimiseur
3. Qualit de ladministration
Qualit des traces ou indicateurs gnrs par le systme
Qualit des outils d'aide l'administration
Qualit de ladministrateur !
222
Rglage du SGBD Database Tuning
Rglages du SGBD, amlioration des performances
Manuel par ladministrateur BD
par des outils externes de diagnostiques
par des outils intgrs automatiques
Oracle : Automatic SQL Tuning
SQL Server : Database Tunning Advisor
222
SQL Server : Database Tunning Advisor
Oracle : Automatic SQL Tuning
223
Automatic Tuning Optimizer
Analyse des
Statistiques
SQL Profiling Analyse des
chemins daccs
Analyse des
structures SQL
224
Conclusion sur loptimisation
Mcanismes puissant mais complexes matriser
Fort impact sur les performances du systme
Les performances dpendent dautres facteurs
Schma physique
Configuration du serveur (mmoire, disques, etc.)
Administration adquate
224
De plus en plus de tches automatiques ou automatisables
Gestion de la mmoire automatique dans Oracle 9
Automatic SQL Tuning dans Oracle 10
Database Tunning Advisor dans SQL Server 2005
Etc.
Mais aussi : une bonne application BD
des concepteurs qui connaissent le SGBD
Scurit des bases de
donnes
225
donnes
CFA - AFTI Nicolas Anciaux
Plan du cours
Introduction au problme
Les menaces et le besoin accru de protection
Exemples dattaques :
Injection SQL, SGBD statistique, Bases Oracle
Qui attaque, types dattaques
Objectif : le SGBD idal
Scurit (confidentialit) des bases de donnes
Serveur BD scuris
226
Serveur BD scuris
T1 : Authentification
T2 : Scurisation des communications
T3 : Mcanismes de contrle daccs
Vue densemble
DAC, RBAC, MAC
T4 : Chiffrement de la BD
Approche serveur, client, donnes prives, partages
Pistes exploratoires
Exercices sur Oracle
Introduction lAPI JDBC, injection SQL, contre mesures, droits daccs
Exercices de chiffrement
Aujourdhui
Aujourdhui
Principales dimensions du problme
Atteinte la confidentialit
Accs non autoris des informations
confidentielles
Atteinte la disponibilit
227
Atteinte la disponibilit
Empcher les utilisateurs autoriss dutiliser
correctement un systme/service
Atteinte lintgrit des donnes
Crer, modifier ou supprimer des informations de
faon illgale
Besoins de protection (1)
Omniprsence des bases de donnes
Grands systmes dinformation (publics ou privs)
BD PME
BD personnelles (agenda, carnet dadresses, bookmarks )
BD "ambiantes" (capteurs, aware home )
228
Lorganisation des donnes est un facteur de risque
Lanalyse dune collection dinformations insignifiantes peut
gnrer des rsultats sensibles
Linter-connexion croissante en est un autre
Connexions permanentes, accs ubiquitaires, objets
communicants
Besoins de protection (2)
Sous traitance de lhbergement de donnes (DSP)
Hbergement de site Web, dlgation de la gestion du systme
dinformation dune PME, dossiers personnels
caspio.com, quickbase.com, primadoctor.com
Nombreuses violations de chartes dintimit [voir AKS02]
Vulnrabilit des serveurs dentreprise
Source CSI/FBI : cot des attaques BD $100 milliards/an, 50% des
attaques sont internes
229
attaques sont internes
Mme les plus srs sont attaqus (FBI, NASA, Pentagone)
Sources DatalossDB, ZATAZ (muse des sites franais pirats)
Plus de 3 millions de donnes sensibles voles au Canada (donnes clients
avec infos bancaires, cartes de crdit, ...)
Diffusion d'une BD contenant les informations (identits, adresses, email, ...)
de 13.500 adhrents au parti d'extrme droite anglais
Source CluSSIF
(Club de la Scurit des Systmes d'Information Franais)
Modification du carnet de commande, par un concurrent, dun quipementier
automobile => ruptures de stock gravissimes
Pntration du systme de facturation de British Telecom => divulgation de
listes de Nde tl (services secrets, famille royale)
Besoins de protection (3)
Indexation des bases de donnes
"Google entre vie prive et secret dfense" (source : confidentiel.net)
Ngligence
Mise en ligne des recherches AOL (US), perte de support CD (UK)
Craquage d'un systme bancaire US
(mots de passe trop courts par rapport au nb de comptes grs)
Consultation de la facture dtaille dautrui (tlcom brsil)
230
Consultation de la facture dtaille dautrui (tlcom brsil)
Croisement de bases de donnes
CAPPS-II (Computer Assisted Passenger Pre-Screening System)
croise des BD pour lutter contre le terrorisme
Ron Rivest : La rvolution digitale inverse les dfauts : ce qui tait
autrefois difficile copier devient facile dupliquer, ce qui tait
oubli devient mmoris jamais et ce qui tait priv devient
public
Quelques exemples marquants:
croisement de donnes publiques
231
Quelques exemples marquants:
croisement de donnes publiques
232
Quelques exemples marquants :
espionnage entre bons citoyens
233
Que voulez-vous savoir sur vos amis, voisins, nourrice, employs ?
Quelques exemples marquants :
espionnage entre bons citoyens
234
The data within the report is compiled from thousands of different sources that
include government, property, and other public record repositories.
Besoins de protection : la loi
Concernant la protection des donnes caractre personnel
USA dots dune lgislation sectorielle
Right to Financial Privacy Act, 1978
Health Insurance Portability and Accountability Act, 1996
Childrens Online Privacy Protection Act, 1998
Union Europenne dote dune lgislation globale
Data Protection Directive 95/46/EC, 1995
235
Data Protection Directive 95/46/EC, 1995
Agences nationales (ex: CNIL) imposant lenregistrement des bases de
donnes et la dclaration pralable des traitements
Politiques de prservation
Privacy Act, 2001
Directive 2006/24/CE sur la conservation de donnes gnres ()
communications lectroniques accessibles au public ou de rseaux publics
de communications rtention 6 mois 1 an
Principe de Safe Harbor permettant lchange dinformation avec des
entits hors UE tout en offrant des garanties fondamentales de
prservation de la confidentialit
Exemples dattaques connues de SGBD
Injection de code SQL (voir TD)
Attaque des listes de login/pwd
Attaque de donnes non autorises
236
Attaques contre des bases statistiques
Attaques de bases Oracles
Oracle Unbreakable
Origines des failles connues
Attaque contre des BD statistiques (1)
Base de donnes statistique
Permet d'valuer des requtes d'agrgation
totaux, moyennes, etc.
Ex. La requte quelle est la moyenne du taux de leucocytes des patients
ayant plus de 30 ans ? est permise
Mais pas les requtes qui drivent des infos particulires
Ex. La requte quel est le taux de leucocytes de Dupont ? est interdite
237
Ex. de base de donnes statistique
Relation Analyse(Patient,H/F,Age,Mutuelle,Leucocyte)
Patient H/F Age Mutuelle Leucocyte
...
Durand F 25 LMDE 3000
Dulac F 35 MMA 7000
Duval H 45 IPECA 5500
Dubois H 55 MGEN 3500
...
Attaque contre des BD statistiques (2)
Exemple dattaque simple :
U veut dcouvrir le taux de Leucocyte de Dubois
U sait que Dubois est un adhrent masculin de la MGEN
Requte 1
SELECT COUNT ( Patient )
Requte 2
SELECT SUM ( Leucocyte )
238
SELECT COUNT ( Patient )
FROM Analyse
WHERE H/F =H'
AND Mutuelle =MGEN' ;
Rsultat : 1
Le systme doit refuser de rpondre une requte pour
laquelle la cardinalit du rsultat est infrieure une
certaine borne b
SELECT SUM ( Leucocyte )
FROM Analyse
WHERE H/F =H'
AND Mutuelle =MGEN' ;
Rsultat : 3500
Attaque contre des BD statistiques (3)
Requte 3
SELECT COUNT ( Patient )
FROM Analyse
Rsultat : 10
Requte 4
Requte 5
SELECT SUM ( Leucocyte )
FROM Analyse
Rsultat : 54300
Requte 6
239
SELECT COUNT ( Patient )
FROM Analyse
WHERE NOT ( H/F =H'
AND Mutuelle =MGEN ) ;
Rsultat: 9 ; 10 - 9 = 1
Consquence :
Le systme doit aussi refuser de rpondre une requte pour laquelle la
cardinalit du rsultat est infrieure N - b
N est la cardinalit de la relation initiale
SELECT SUM ( Leucocyte )
FROM Analyse
WHERE NOT ( H/F =H'
AND Mutuelle =MGEN) ;
Rsultat : 50800 ; 54300
50800 = 3500
Attaque contre des BD statistiques (4)
Problme :
On peut montrer que limiter les requtes celles pour lesquelles le rsultat a
une cardinalit c telle que b c N - b n'est pas suffisant pour viter la
compromission
Exemple : si b = 2, les requtes auront une rponse si c est telle que 2 c 8
Requte 7
Requte 8
SELECT COUNT ( Patient )
240
Requte 7
SELECT COUNT ( Patient )
FROM Analyse
WHERE H/F =H' ;
Rsultat : 6
Consquence
U peut dduire qu'il existe exactement un patient masculin qui a la MGEN
comme mutuelle,
Il sagit de Dubois, puisque U sait que cette description correspond Dubois
SELECT COUNT ( Patient )
FROM Analyse
WHERE H/F =H'
AND NOT (Mutuelle =MGEN) ;
Rsultat : 5
Attaque contre des BD statistiques (5)
Consquence (suite)
Le taux de Leucocyte de Dubois est facilement dcouvert de la faon
suivante :
Requte 9
SELECT SUM ( Leucocyte )
FROM Analyse
Requte 10
SELECT SUM ( Leucocyte )
FROM Analyse
241
FROM Analyse
WHERE H/F =H' ;
Rsultat : 30300
FROM Analyse
WHERE H/F =H'
AND NOT (Mutuelle =MGEN) ;
Rsultat : 26800 ; 30300 - 26800 = 3500
Les attaques de bases Oracle
peu nombreuses jusqu rcemment
plus de serveurs Web que de bases Oracle
connaissance dOracle limite
difficile dobtenir une version dOracle
bases souvent protges par un firewall
242
de nos jours, intrt croissant des pirates
De plus en plus de topics Oracle sur les forums de hackers
Tlchargement et installation dOracle faciles
Engouement du dfi Oracle Unbreakable
Oracle's 'Unbreakable' Boast Attracts Hackers
Hack attempts on the company's website have increased to
30,000 per week.
Protection : Solution Oracle ?
243
Some days after .
'When they say their software is unbreakable, they're
lying.'
-- Bruce Schneier
U.K. security researcher David Litchfield revealed that a
common programming error -- a buffer overflow -- was
present in Oracle's application server
Attaques : origines des failles...
Bug constructeur (corrigs par des patchs)
Ex. Oracle Listener (OL)
Ecoute les commandes des clients et les transmet au serveur Oracle
Contacte Oracle via le protocole TNS (Transparent NetWork Substrate)
Attaque du OL par overflow
Si un paquet contient plus d1 Ko de donnes, le OL plante
Dans certains cas, a gnre un core dump
.T.......6.,...............:................4.............(CONNECT_DATA=XXXXXXXX/0x5/0x34/0x12/0x54/
0x5/0x34/0x12/0x54/0x5/0x34/0x12/0x54/0x5/0x34/0x12/0x54/0x5/0x34/0x12/0x54/0x5/0x34)
244
Bug configuration (pd de paramtres)
Ex. Attaque OL par script de commandes TNS
Certaines commandes ne demandent aucune autorisation
Ex. demande de version (tnscmd version -h adresse_du_serveur -p 1521); de statut (tnscmd
status -h adresse_du_serveur -p 1521)
Le pirate obtient les infos suivantes: version dOracle, systme d'exploitation, chemins vers les
logs, options du Listener (Ex. option security), environnement complet (variables systme) dans
lequel Listener a t lanc
Pour se protger : Activer l'option security dans OL, utilisation dune authentification forte,
etc.
Bug architectural (pb de conception de lappli)
Etc.
Elments classiques de scurit du SGBD
I- Indpendance
Physique
II- Indpendance
Logique
X - Standards
245
BD
VIII - Concurrence
daccs
VII - Gestion des
pannes
IX - Gestion de la
confidentialit
VI - Gestion de la
cohrence
V - Optimisation des
questions
III Langage de
manipulation
IV - Gestion des
vues
IV Gestion des vues
Vue = Question SQL stocke = objets virtuels
Exemple : Create View Parisiens as (
Select Nom, Prnom
From Patients
Where Patients.Ville =Paris )
Le SGBD stocke la dfinition et non le rsultat
Le SGBD transforme la question sur les vues en question sur
246
BD
Le SGBD transforme la question sur les vues en question sur
les relations de base
Question Q
sur des vues
Dfinition des
vues
Gestionnaire
de Vues
Question Q
sur les relations
de base
IX Confidentialit
Objectif
Protger les donnes de la BD contre des accs non autoriss
Deux niveaux
Connexion restreinte aux usagers rpertoris (mot de passe)
Privilges d'accs aux objets de la base
Usagers :
Employs
Public
247
Utilisateur authentifi
Groupe dutilisateurs
Objets :
Relation
Vue
autres objets
(procdures, etc.)
Id-E Nom Prnom Poste
1 Ricks Jim 5485
2 Trock Jack 1254
3 Lerich Zoe 5489
4 Doe Joe 4049
Nombre
demploys
Masse
Salariale
4 890
Service des
ressources
humaines
Employs
(intranet)
Public
(internet)
Id-E Nom Prnom Poste Adresse Ville Salaire
1 Ricks Jim 5485 . Paris 230
2 Trock Jack 1254 . Versailles 120
3 Lerich Zoe 5489 . Chartres 380
4 Doe Joe 4049 . Paris 160
IX Confidentialit via les vues
Principe : Restreindre l'accs la BD en
distribuant des droits via des vues
Requte Q
sur des vues
OK
Rsultat
248
Vrification
des droits
Gestionnaire
de Vues
Dfinition des
Vues
+
Droits
associs
Requte Q
sur les relations
de base
Excution de
requte
OK
Rsultat
DBMS : qui attaque ?
Pirate externe
capable de sinfiltrer sur le serveur
BD et de lire ses fichiers
capable de casser une cl de
chiffrement avec un texte connu
Pirate utilisateur
est reconnu par le SGBD et a accs
Pirate
Pirate
externe
249
est reconnu par le SGBD et a accs
une partie des donnes
suivant le mode de chiffrement, il a
accs certaines cls
Pirate administrateur (DBA)
employ peu scrupuleux ou pirate
stant octroy ces droits
a accs des donnes
inaccessibles aux autres pirates
(journal)
peut espionner le SGBD pendant
lexcution
Client C2
Pirate
utilisateur
Client C3
Client C1
Pirate
administrateur
BD
P.M.E.
Serveur BD
BD
Problmatique gnrale
Interdire les accs non-conformes (contournement de la porte)
Revient interdire toute consultation aux personnes non autorises
SGBD idal :
Data + Excution + Droits enceinte scurise
Serveur auto administr, code certifi
250
Mise en uvre impossible dans un cadre gnral
Les sites les plus srs sont pirats
Data Data Data
Data Data Data
Data
Query Mgr
User
Rights
Mgr
Plan deuxime partie
Scurit (confidentialit) des bases de donnes
Mcanismes simples et puissants
(repose sur la scurit de bout en bout)
T1 : Authentification
T2 : Scurisation des communications
T3 : Mcanismes de contrle daccs
251
T3 : Mcanismes de contrle daccs
T4 : Chiffrement de la BD
Serveur
BD
BD
Utilisateur
Serveur
BD
BD
Utilisateur
Identification
Authentification
Scurisation des communications
(confidentialit, intgrit, non rpudiation)
Protection du
serveur
Protection
des fichiers
T1 : Identification/authentification
Serveur
BD
BD
Utilisateur
252
Base : login + password
Nombreux protocoles
Certains base de systmes matriels srs (carte puce)
Authentification
SGBD
BD
Authentification par lOS
Profil des
utilisateurs
Authentification : via lOS ou directement par le SGBD
253
Authentification : via lOS ou directement par le SGBD
Profile Utilisateur
Permet dassocier diffrents paramtres au protocole dauthentification et la
gestion des mots de passe
Par exemple, sous ORACLE
REMOTE_OS_AUTHENT = True : lauthentification aura lieu par lOS
Risque : un protocol non sr (comme TCP) peut tre utilis pour se logger LOS
FAILED_LOGIN_ATTEMPTS : nombre dchecs de tentative daccs avant que le compte ne
soit verrouill
PASSWORD_LIFE_TIME : dure de vie en jours dun mot de passe
Attaques du mcanisme dauthentification
Ngligence
Craquage d'un systme bancaire US
(mots de passe trop courts / nb de comptes grs + login connus du pirate)
Utilisateurs par dfaut dune base de donnes
Dans Oracle, plus de 600 utilisateurs par dfaut
Exemple : utilisateur SCOTT (mot de passe TIGER) sous ORACLE
Possibilit dattaques contre ces comptes sils nont pas t reconfigurs
Audit HSC (2005 FR) : 80% des firmes laissent les utilisateurs par dfaut...
254
Gestion des mots de passe
Injection SQL pour rcuprer la liste des login / mots de passe
Attaque de la distribution/transmission du mot de passe lors de la cration du compte
Administrateur malveillant
Conclusion sur T1 (authentification)
Ncessaire mais clairement insuffisante
Pour limiter ces risques, possibilit dutiliser SSL Secure Sockets Layer
Gestion de certificats via un tiers de confiance
Authentification mutuelle via le protocole Kerberos
T2 : Chiffrement des communications
Serveur
BD
BD
Utilisateur
255
Technologie prouve
ex: SSL, y compris par carte puce
Techniques cryptographiques
Confidentialit et intgrit des messages
Non rpudiation des transactions
Confidentialit et intgrit des messages
Risques lors de la transmission des requtes et des rsultats
entre le client et le serveur
256
SGBD
BD
Ecoute
Interception
Altration
Rejeu
Chiffrement et signature
Exemple
Sous Oracle, utilisation de Oracle Advanced Security
Chiffrement (avec OAS)
Chiffrement de bout en bout
Chiffrement symtrique
Supporte AES
257
Pas de chiffrement des donnes stockes
Signature
Pour viter des manipulations des donnes lors de la transmission
Message Digest Value
Conclusion sur T2 (chiffrement des communications)
Ncessaire mais clairement insuffisante
T3 : Mcanismes de contrle daccs
Serveur
BD
BD
Utilisateur
258
Affects des utilisateurs (ou groupes)
Portent sur des tables, vues ou procdures stockes
Trs sophistiqus
Politiques de contrle daccs
Politique de contrle daccs = ensemble de rgles
Format des rgles :
Permission
259
Sujet
Permission
Interdiction
Obligation
Action
Objet
avoir
avoir
avoir
raliser
raliser
raliser
agir
sur
Contrle daccs dans un SGBD
Sujets = Entits actives du SI
Inclut toujours les utilisateurs
Sujet Action Objet
Raliser
Agir sur
260
Inclut toujours les utilisateurs
Inclut souvent les processus travaillant pour le compte des utilisateurs
Objets = Entits passives du SI
Contiennent les informations protger
Exemple :
les relations dans une base de donnes relationnelle
Actions = permettent aux sujets de manipuler les objets
Exemple
Requte SQL dans une base de donnes relationnelle
Ex. Systme dinformation mdical
Sujets = Personnels du
groupe mdical
Objets = Dossiers des
patients
Jean
Jeanne
Mdecin
Nadine
Secrtaire
mdicale
Dossier_Admin
Partie_Admin
Partie_Secu_Sociale
261
Actions = Ex.
Dossier_Patient Dossier_Mdical
Dossier_Soins_Infirmiers
Partie_Secu_Sociale
Ausculter un patient
Crer le dossier dun nouveau patient
Consulter le dossier
Mettre jour les parties
Dossier_mdical et
Dossier_soins_Infirmiers
Renseigner Dossier_Admin
Exemple de rgles
Rgles indpendantes du contenu
Les plus simples
Rgle qui permet daccder un objet indpendamment de son contenu
Ex.
R1 : La secrtaire mdicale a la permission de grer le Dossier_Admin
dun patient du groupe mdical
Permet de consulter et de mettre jour nimporte quelle information du
262
Permet de consulter et de mettre jour nimporte quelle information du
Dossier_Admin dun patient
Rgles dpendant du contenu
La permission daccder un objet dpend du contenu de cet objet
Ex.
R2 : Le mdecin a la permission de consulter lintgralit du dossier dun de
ses patients (permet de consulter un dossier mdical condition quil
sagisse dun patient de ce mdecin)
R3 : Le mdecin a la permission de mettre jour les parties
Dossier_Medical et Dossier_Soins_Infirmiers dun de ses patients
Exemple de rgles (suite)
Rgles dpendant du contexte
La permission daccder un objet dpend dune condition
indpendante du contenu de cet objet
Ex.
R4 : En labsence de la secrtaire mdicale, le mdecin a le droit de
grer le carnet de Rendez-Vous
263
Dlgation et transfert de droit
Ex.
R5 : Un mdecin du groupe mdical a la permission dautoriser la
secrtaire mdicale de mettre jour la prescription contenue dans le
Dossier_mdical du patient
Contrepartie de la dlgation
R6 : La secrtaire mdicale ayant reu autorisation a la permission
de mettre jour la prescription du Dossier_mdical du patient
Modle discrtionnaire (DAC)
DAC = Discretionary Access Control
Contrle daccs discrtionnaire
Principe de DAC
U
Utilisateur
P
Permission
V
Vue
264
Les sujets ont des permissions de raliser des actions sur les objets
Typiquement, consultation (lecture) ou modification (criture) de lobjet
Les sujets ont lautorisation de transfrer certaines permissions
dautres sujets
Droits discrtionnaires de donner des permissions dautres sujets
A
Action
O
Objet
= N-uplet
Exemple typique de DAC
Gestion des droits dans UNIX
Rpertoire
F
User Group Other
R W E R W - R - -
Owner
Jean
265
Contenu
du fichier F
R W E R W - R - - Jean
Concept de propritaire
Dans UNIX, chaque objet a un propritaire
Cest le propritaire qui a les droits
discrtionnaires sur lobjet
Le propritaire dcide des droits des autres sujets
Politique de scurit dans DAC-SQL
Modle DAC SGBD vs OS
Grand nombre dobjets protger
Objets de granule trs htrogne (relations, tuples, attributs)
Protection dobjets logiques (tables) ou virtuels (vues),
[et non physiques (fichiers)]
La matrice daccs peut tre immense, son implmentation difficile
Base sur le concept de Vue
266
Base sur le concept de Vue
Permet de diviser la base de donnes en plusieurs parties
Ex: la vue dossier_patient_de_Jean
CREATE VIEW dossier_patient_de_Jean AS
SELECT *
FROM dossier_patient
WHERE dossier_patient.medecin_traitant = Jean ;
contient tous les dossiers des patients de Jean
Instruction GRANT/REVOKE
Permet de donner/retirer des privilges certains utilisateurs
Instructions GRANT/REVOKE
Format de linstruction GRANT
GRANT <liste privileges>
ON <table ou vue>
Format de linstruction REVOKE
REVOKE [ GRANT OPTION FOR ] <liste
privileges>
Donnent ou retirent des privilges sur
Des objets utilisateurs
SELECT, INSERT, UPDATE, UPDATE(nom_colonne), DELETE
Des fonctions systme
ALTER, EXECUTE, REFERENCE, INDEX, CREATE TABLE/USER, DROP TABLE/USER, Etc.
267
ON <table ou vue>
TO <liste utilisateurs>
[ WITH GRANT OPTION ] ;
WITH GRANT OPTION
est optionnel
signifie que lutilisateur qui obtient
le privilge peut ensuite accorder
ce privilge un autre utilisateur
privileges>
ON <table ou vue>
FROM <liste utilisateurs>
<option> ;
GRANT OPTION FOR
est optionnel
signifie que seul le droit de transfert est
rvoqu
<option> = RESTRICT ou CASCADE
Supposons que A accorde le privilge p B et
B accorde ensuite p C
CASCADE : si A rvoque p B alors C perd
aussi le privilge
RESTRICT : si A rvoque p B alors la
rvocation choue
Application du modle
Politique de scurit du groupe mdical
Quels sont les privilges respectifs ?
NB : aussi, quels utilisateurs ont des privilges systme ?
Sujets = Utilisateurs
Objets = 3 relations
268
dossier_admin
dossier_medical
dossier_soins_infirmiers
Dfinition du dossier du patient
CREATE VIEW dossier_patient AS SELECT *
FROM dossier_admin DA, dossier_medical DM, dossier_soins_infirmiers DSI
WHERE DA.id_patient = DM.id_patient AND
DA.id_patient = DSI.id_patient
Ex. dexpression de rgles (1)
R1 : La secrtaire mdicale a la permission de grer le Dossier_Admin dun
patient du groupe mdical
GRANT ALL PRIVILEGES
ON dossier_admin
TO Nadine ;
R2 : Le mdecin a la permission de consulter lintgralit du dossier dun de ses
patients
269
Dfinition dune vue
CREATE VIEW dossier_patient_du_medecin AS
SELECT *
FROM dossier_patient
WHERE dossier_patient.medecin_traitant = CURRENT_USER ;
NB: CURRENT_USER = oprateur prdfini gr par SQL
GRANT SELECT
ON dossier_patient_du_medecin
TO Jean, Jeanne ;
Ex. dexpression de rgles (2)
R4 : En labsence de la secrtaire mdicale, le mdecin a la
permission de crer le dossier_admin dun nouveau patient
Hypothse : existence de deux tables
utilisateur : cette table un attribut nom et un attribut etat
utilisateur_role(nom,role)
270
Dfinition dune vue
CREATE VIEW dossier_admin_medecin AS
SELECT * FROM dossier_admin
WHERE NOT EXISTS (SELECT *
FROM utilisateur, utilisateur_role
WHERE utilisateur.nom = utilisateur_role.nom
AND utilisateur_role.role = secretaire_medical
AND utilisateur.etat = present ) ;
GRANT INSERT ON dossier_admin_medecin TO Jean, Jeanne ;
Rgle de dlgation
R5 : Un mdecin a la permission dautoriser la secrtaire
mdicale de mettre jour la prescription contenue dans le
Dossier_mdical du patient
Cration dune vue
CREATE VIEW prescription_du_medecin AS
SELECT dossier_medical.nom_patient, dossier_medical.prescription
271
SELECT dossier_medical.nom_patient, dossier_medical.prescription
FROM dossier_medical,
WHERE dossier_medical.medecin_traitant = CURRENT_USER ;
GRANT SELECT, UPDATE(prescription)
ON prescription_du_medecin
TO Jean, Jeanne
WITH GRANT OPTION TO Nadine ;
En fait, avec SQL, on ne
peut pas prciser que
GRANT OPTION ne
concerne que la secrtaire
mdicale
Rgle de dlgation (suite)
R6 : La secrtaire mdicale ayant reu autorisation a la
permission de mettre jour la prescription du
Dossier_mdical du patient
Pour donner effectivement lautorisation de mettre jour la prescription
dun patient particulier (par exemple Paul), le mdecin doit :
272
1 : Crer une vue :
CREATE VIEW prescription_de_Paul AS
SELECT *
FROM prescription_du_medecin
WHERE prescription_du_medecin.nom_patient = Paul ;
2 : Donner les privilges sur la vue la secrtaire mdicale :
GRANT SELECT, UPDATE(prescription)
ON prescription_de_Paul
TO Nadine ;
Possible car le mdecin a le privilge
WITH GRANT OPTION sur la
table prescription_du_medecin
Conclusion sur DAC-SQL
Intrt du concept de vue
Permet dexprimer des rgles dpendant du contenu
Permet dexprimer certaines rgles dpendant du contexte
Rgle de dlgation
Incomplet et complexe grer
WITH GRANT OPTION nest pas suffisant
273
WITH GRANT OPTION nest pas suffisant
Structuration des objets
Grce au concept de vue
Contrle daccs bas sur lidentit des sujets
Pas de structuration des sujets
Intrt de RBAC
R P V
RBAC : Role-Based Access Control
Rle = ensemble de privilges
Les accs des utilisateurs sont grs en fonction de
leur rle organisationnel
Principe de la gestion des rles dans SQL3 :
274
R
Rle
P
Permission
V
Vue
A
Action
O
Objet
=
N-uplet
U
Utilisateur
RBAC introduit dans SQL3
Instructions RBAC de SQL3
CREATE ROLE <nom_role> ;
Cration dun nouveau rle nom_role
275
DROP ROLE <nom_role> ;
Suppression du rle nom_role
SET ROLE <liste_roles> ;
Permet un utilisateur dactiver un ensemble de rle pendant la
dure dune session SQL
Adaptation de GRANT/REVOKE
Affectation rles utilisateurs
GRANT <liste roles>
TO <liste utilisateurs>
Affectation privilges rles
Rvocation utilisateurs rles
REVOKE <liste roles>
FROM <liste utilisateurs>
Revocation privilges rles
276
GRANT <liste privileges>
ON <table ou vue>
TO <liste roles>
[ WITH GRANT OPTION ] ;
Rle junior et rle senior
GRANT <role1> TO <role2>
REVOKE [ GRANT OPTION FOR ]
<liste privileges>
ON <table ou vue>
FROM <liste roles>
<CASCADE ou RESTRICT> ;
Mise jour de la hirarchie de rle
REVOKE role1 FROM role2 ;
(Le rle role2 reoit/perd les privilges du rle role1)
Ex. dapplication du modle
Cration des rles
CREATE ROLE secretaire_medical ;
R1 : La secrtaire mdicale a la permission de grer le
Dossier_Admin dun patient du groupe mdical
277
Dossier_Admin dun patient du groupe mdical
GRANT ALL PRIVILEGES
ON dossier_admin
TO secretaire_medicale ;
Puis affectation de Nadine au rle secretaire_medicale
GRANT secretaire_medicale to Nadine ;
Conclusion sur la gestion des rles dans SQL
Conservation des avantages de DAC-SQL
Possibilit dexprimer des rgles dpendant du contenu et
du contexte
Intrt des concepts de vue et de rle
278
Les vues permettent de structurer la gestion des objets
Les rles permettent de structurer la gestion des sujets
Limites des modles DAC et RBAC (dtail aprs...)
DAC et RBAC : lapplication utilisateur a des droits levs
Risque de programmes malveillants
Besoin du modle MAC Skip
Gestion MAC dans un SGBD
Limites des modles DAC et RBAC
Hypothse de DAC
Lapplication utilisateur hrite des droits de lutilisateur
Hypothse de RBAC
Lapplication utilisateur hrite des droits de la session
Droit de la session = ensemble des rles activs par lutilisateur
279
Droit de la session = ensemble des rles activs par lutilisateur
Risque de programmes malveillants
Cheval de Troie : programme qui a une fonctionnalit
apparente mais qui contient des fonctions caches
Lutte contre les chevaux de Troie la connexion,
lutilisateur rduit ses droits la partie strictement utile
pour la session
MAC : Mandatory Access Control
Bas sur le modle de Bell-LaPadula
Politique de scurit multi-niveaux
Niveaux de scurit hirarchiques
Cloisonnement vertical :
Unclassified < Confidentiel < Secret < Tres secret
Catgories
280
Catgories
Cloisonnement horizontal :
cardiologie, pdiatrie, rhumatologie, ...
1 niveau de scurit + 1 catgorie = 1 classe daccs
Le niveau de scurit dune classe daccs associe un utilisateur
est appel niveau de clearance
Le niveau de scurit dune classe daccs associe un objet est
appel niveau de classification
Lutte contre les chevaux de Troie
Mdecin
Martin ; pneumonia
David ; ulcer
Dossier mdical
Secret
Mdecin
Martin ; pneumonia
David ; ulcer
Dossier mdical
Secret
read
A la connexion, un utilisateur reduit ses droits la partie strictement utile pour la session
281
Le mdecin se connecte comme un sujet Unclassified
Fichier D
Unclassified
Pirate
Unclassified
Secret
Unclassified
Secret
Secret
Fichier D
Unclassified
Pirate
Secret
Le mdecin se connecte comme un sujet Secret
Gestion MAC dans un SGBD
Exemple : Trusted ORACLE 7
Niveau de classification associ aux n-uplets
Niveau dhabilitation associ aux utilisateurs
Mise en uvre du modle de Bell et LaPadula
Echec commercial par manque de souplesse
282
Echec commercial par manque de souplesse
Aujourdhui : ORACLE Label Security
Depuis ORACLE8i
Solution VPD pour grer les niveaux de scurit
Modle plus souple...
Bases de donnes prives virtuelles (VPD)
Principe :
Rajouter des conditions aux requtes utilisateur
Requte Q
Rsultat
283
Procdure de
rajout de
condition
Excution de
requte
Rsultat
Requte Q
Complte en
fonction du
contexte
Excution
de procdure
Contexte
BD
Base de donnes prive virtuelle (VPD)
Principe
Associer une rgle de scurit une table ou une vue
Si la VPD est active, toute requte qui accde cette relation ou cette vue est
automatiquement modifie en incluant une clause WHERE
Ex. Jean formule la requte suivante :
SELECT *
FROM dossier_medical
284
FROM dossier_medical
WHERE id_patient =Paul'
Lapplication de la rgle R2 (i.e., dossier de ses patients) donne :
SELECT *
FROM dossier_medical
WHERE id_patient =Paul'
AND id_patient in (SELECT id_patient
FROM dossier_medical
WHERE medecin_traitant =Jean' ) ;
Jean ne pourra ainsi accder quaux dossiers mdicaux de ses patients
Synthse sur les modles de contrle daccs
Via des vues
les vues portent en gnral sur des donnes non autorises
Les vues peuvent inclure des variables (ex.CURRENT_USER)
DAC : Permet de structurer les Objets
RBAC : Permet de structurer les Sujets
MAC : Intgre lhypothse de programmes malveillants
285
MAC : Intgre lhypothse de programmes malveillants
Lutte contre les chevaux de Troie
Base de donne prive virtuelle
Illusion d'une base de donne prive
Complexe mettre en uvre.
Conclusion
Suppose que l'utilisateur passe par la porte d'entre
Ne rsiste pas aux attaques sur les fichiers du serveur ou du DBA !
Ncessaire mais insuffisant !!
Suite scurit demain
API JDBC
286
API JDBC
Dictionnnaire de donnes
Et TD/TP
API de communication SGBD
Exemple de JDBC
287
(Java DataBase Connectivity)
API de communication un SGBD
SQL-CLI (Call Level Interface)
API standardise par X/Open depuis 1994, intgre dans
SQL3
Permet de se connecter et denvoyer des requtes SQL
tout serveur SQL, quel que soit son type, sa localisation, le
mode de connexion ...
Popularis par des mdiateurs tels que
288
Popularis par des mdiateurs tels que
ODBC (Open DataBase Connectivity)
API assez complexe
interface C (ncessite lutilisation de code natif)
JDBC (Java DataBase Connectivity)
vue objet des mmes concepts que ODBC
un pont JDBC-ODBC existe
LAPI JDBC
(Java DataBase Connectivity)
Permet de simplifier laccs une BD depuis Java
(vite lutilisation de code natif)
JDBC fournit un ensemble de classes et
dinterfaces pour lutilisation dun ou plusieurs
SGBD partir dun programme Java
289
SGBD partir dun programme Java
Intrts de JDBC
interface uniforme pour accder un SGBD
indpendant du SGBD cible
simplicit de mise en oeuvre
supportant les fonctionnalits de base de SQL
Architecture logicielle de JDBC
Chaque source de donnes utilise un pilote (driver)
qui lui est propre et qui convertit les requtes JDBC
dans le langage natif du SGBD
Java Appli/Applet
API
JDBC
290
driver
ODBC
Driver(pont)
JDBC-ODBC
driver
JDBC
pour
Oracle
driver
SGF local
Driver
JDBC
pour
Sybase
JDBC DriverManager
Oracle
API du
Driver
JDBC
protocole Propritaire
protocole Propritaire
Sybase
Oracle Sybase
Fichier
Diffrentes
implmentations
de JDBC
Exemples dutilisations de JDBC
Dans un client lger classique
Serveur
BD
Driver
JDBC
JDBC
Applet
Clients
API
JDBC
API
Driver
JDBC
291
Dans une architecture J2EE
Serveur
API
JDBC
Serveur Web
BD
Servlet Applet
Clients
API Web
(TCP/IP)
JDBC
Driver
JDBC
Serveur BD
JDBC
API
Driver
JDBC
LAPI JDBC
API fournie par le package java.sql (le noyau)
Interfaces (principales) du package
Connection // gestion des connexions
Statement // excution de requtes classiques
PreparedStatement // prparation de requtes
dynamiques
292
dynamiques
CallableStatement // appel de procdures stockes
ResultSet // manipulation du rsultat
ResultSetMetaData // description du rsultat
DatabaseMetaData // description de la base
Driver // gestion des pilotes
Les extensions dans javax.sql
Utilisation de JDBC
Etapes suivre
(Importer le package java.sql)
Charger le driver JDBC
tablir une connexion la base de donnes
Crer une instruction
293
Crer une instruction
(requte/batch/procdure)
Excuter linstruction
Traiter le rsultat
Fermer les diffrents lments
Les fonctions de JDBC
Fonctions de bases
Charger le/les pilotes
Se connecter la base de
donnes
Crer une instruction
SQL statique,
appel procdure stocke,
Fonctions avances
Exceptions JDBC
Accs aux mta-donnes
Du rsultat
De la base de donnes
Excution de
requtes prcompiles
294
appel procdure stocke,
prcompile et paramtre
Excuter linstruction
LMD de consultation,
LDD et LMD de mise jour,
procdures stockes
Traiter le rsultat
Gestion de lobjet ResultSet
Fermer les diffrents lments
requtes prcompiles
requtes paramtres
procdures stockes
Excution par lots (batch)
Utilisation de curseurs
Transactions
Extension standard (javax.sql)
Chargement du pilote JDBC
Par invocation de la mthode Class.forName
Paramtre = chemin de la classe du driver
(fournit dans la doc. du driver)
Exemple utilisant le pont (driver) JDBC-ODBC
295
Exemple utilisant le pont (driver) JDBC-ODBC
import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
try {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }
catch (Exception E) {System.err.println( Chemin du driver incorrect!");}
// ... Etapes suivantes ...
}
}
Connecter la base de donnes
DriverManager permet dtablir la connexion avec le SGBD
Grce la mthode getConnection de cette classe
le driver adquat est retrouv parmi les drivers chargs
un objet Connection est retourn
Paramtres de la mthode
Url fournit les informations ncessaires la connexion
dbute par jdbc:, suivi du sous-protocole (par ex. odbc), suivi par des
296
dbute par jdbc:, suivi du sous-protocole (par ex. odbc), suivi par des
informations propres au driver (par ex: le nom de la source de donnes dans
le cas du pont JDBC-ODBC)
Nom et mot de passe de lutilisateur sur le SGBD
Exemple
import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
// ... Etapes prcedentes...
Connection con = DriverManager.getConnection(jdbc:odbc:Oracle, "scott", "tiger");
}
}
Crer une instruction
Une instruction est reprsente par une instance de la classe
Statement, (instruction SQL statique)
CallableStatement, (appeler une procdure stocke)
ou PreparedStatement (instruction SQL prcompile et paramtre)
La cration se fait partir de lobjet Connexion en utilisant
(lobjet Connexion est obtenu la connexion)
createStatement (SQL statique)
297
createStatement (SQL statique)
prepareCall (procdure stocke)
prepareStatement (SQL prcompil/paramtr)
Exemple
import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
// ... Etapes prcedentes...
Statement req1 = con.createStatement();
CallableStatement req2 = con.prepareCall(str);
PreparedStatement req3 = con.prepareStatement(str);
}
}
Excuter linstruction
Mthodes (principales) pour excuter une instruction
executeQuery pour les requtes de type SELECT ...
(LMD de consultation)
executeUpdate pour les CREATE ou INSERT/DELETE/UDATE...
(LDD et LMD de mise jour)
execute pour les procdures stockes (entre autre)
Les mthodes de linterface Statement (excution de requtes
SQL statiques) prennent en paramtre une chane de
298
SQL statiques) prennent en paramtre une chane de
caractres reprsentant la requte excuter
Exemple
import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
// ... Etapes prcedentes...
req1.executeUpdate("CREATE TABLE contact (nom VARCHAR(50), tel CHAR(10))");
req1.executeUpdate("INSERT INTO contact VALUES (dupond, 0102030405)");
}
}
Traiter le rsultat
La mthode executeQuery retourne un objet de type
ResultSet
reprsente un curseur sur le rsultat de la requte
Exemple
La mthode executeUpdate retourne le nombre
// ... Etapes prcedentes...
ResultSet rs = req1.executeQuery("SELECT * FROM contact");
299
La mthode executeUpdate retourne le nombre
de tuples affects dans le cas dun LMD
(INSERT/DELETE/IPDATE)
0 dans le cas dun LDD (CREATE)
Exemple
// ... Etapes prcedentes...
int nbTuples = req1.executeUpdate("UPDATE contact " +
"SET nom = dupont " +
"WHERE nom = dupond");
Accs aux rsultats
(curseur)
Un curseur permet de parcourir les tuples rsultats dune
requte
Reprsent dans JDBC par linterface ResultSet
Fonctionnement
Le curseur dun objet ResultSet est positionn avant le premier tuple
La mthode next permet de faire avancer ce curseur sur le tuple suivant
300
La mthode next permet de faire avancer ce curseur sur le tuple suivant
retour = false il ny a plus de tuples traiter
Les valeurs des attributs sont obtenues grce aux mthodes
getXXX( )
Paramtre = numro/nom de colonne dans le rsultat
Exemple
// ...
ResultSet rs = req1.executeQuery("SELECT * FROM contact");
while(rs.next()) {
String nom = rs.getString("nom"); // ou String nom = rs.getString(1);
String tel = rs.getString("tel"); // ou String nom = rs.getString(2);
// ...
}
Accs aux rsultats
(conversion et valeur nulles)
Conversion de type
Les mthodes getXXX convertissent de SQL vers JAVA
SQL Java
CHAR String
VARCHAR String
LONG VARCHAR
String NUMERIC
Boolean TINYINT
301
Valeurs nulles (NULL de SQL)
Test grce la mthode wasNull de ResultSet
wasNull est appele aprs la lecture de la valeur
(aprs lutilisation dune mthode getXXX)
Les mthodes getXXX convertissent les valeurs NULL de
SQL en une valeur acceptable pour le type Java cible
Boolean TINYINT
Byte SMALLINT
Short INTEGER
Etc
Fermer les diffrents lments
(prfrable pour librer la mmoire)
Les lments concerns
Curseurs
Instructions
302
Connexions
Etc.
Exemple
// ... Etapes prcedentes...
rs.close();
req1.close();
c.close();
// ...
Les fonctions de JDBC
Fonctions de bases
Charger le/les pilotes
Se connecter la base de
donnes
Crer une instruction
SQL statique,
appel procdure stocke,
Fonctions avances
Exceptions JDBC
Accs aux mta-donnes
Du rsultat
De la base de donnes
Excution de
requtes prcompiles
SKIP
303
appel procdure stocke,
prcompile et paramtre
Excuter linstruction
LMD de consultation,
LDD et LMD de mise jour,
procdures stockes
Traiter le rsultat
Gestion de lobjet ResultSet
Fermer les diffrents lments
requtes prcompiles
requtes paramtres
procdures stockes
Excution par lots (batch)
Utilisation de curseurs
Transactions
Extension standard (javax.sql)
Exceptions
Lexception SQLException peut tre lance par les mthodes
de JDBC
Elle permet dobtenir des informations sur lerreur qui sest
produite
304
une chane dcrivant lerreur (mthode getMessage)
un code derreur spcifique au SGBD (mthode getErrorCode)
une chane dtat SQL (mthode getSQLState)
Les avertissements du SGBD peuvent aussi tre capturs par
la classe dexception SQLWarning
Un avertissement ne stoppe pas lexcution du programme
On utilise la mthode getWarnings de Statement pour les rcuprer
Accs aux mta-donnes
Procurent des informations (mta-donnes) sur
le SGBD et le driver JDBC (DatabaseMetaData),
ou sur le rsultat dune requte (ResultSetMetaData)
Exemples de mthodes de linterface DatabaseMetaData
getSchemas pour la liste des schmas disponibles
getTables pour la liste des tables
305
getTables pour la liste des tables
Exemples dutilisation de ResultSetMetaData
// ...
ResultSet rs = req1.executeQuery("SELECT * FROM contact");
ResultSetMetaData rsmd = rs.getMetaData();
int nbColonnes = rsmd.getColumnCount();
// ...
Requte prcompile
(cration)
Une requte qui doit tre excute peut tre prcompile en
utilisant PreparedStatement
Dans un objectif de performance (temps dexcution)
La requte est transmise au SGBD (qui la prcompile)
Le plan dexcution est prpar
Des variables peuvent tre utilises pour paramtrer la requte
Cration dune requte prcompile
306
Cration dune requte prcompile
A partir de lobjet Connection
Grce mthode prepareStatement
La requte est passe en paramtre sous forme de chane de caractres
Les paramtres sont reprsents par des ? dans la chane
Le retour est un objet PreparedStatement prt tre excut
Exemple
// ...
String req = "UPDATE contact SET tel = ? WHERE nom = ?";
PreparedStatement UpdateTel = con.prepareStatement(req);
// ...
Requte prcompile
(paramtrage)
Avant dexcuter la requte fixer les
paramtres
(remplacent les ? par une valeur dans la chane)
Grce aux mthodes setXXX
(o XXX reprsente un type de donnes Java)
307
NB: setNull fixe le paramtre la valeur NULL de SQL
Premier argument = numro dordre du ? remplacer
Deuxime argument = valeur de remplacement
Exemple
// ...
String req = "UPDATE contact SET tel = ? WHERE nom = ?";
PreparedStatement UpdateTel = con.prepareStatement(req);
UpdateTel.setString(1, "0908070605");
UpdateTel.setString(2, "durand");
// ...
Requte prcompile
(excution)
Grce aux mmes mthodes que pour des
requtes fixes, mais sans argument
ExcuteQuery/executeUpdate
NB: linstruction contient dj la requte excuter
Exemple
308
Exemple
// ...
String req = "UPDATE repertoire SET tel = ? WHERE nom = ?";
PreparedStatement updateTel = con.prepareStatement(req);
updateTel.setString(1, "0908070605");
updateTel.setString(2, "durand");
updateTel.executeUpdate();
updateTel.setString(1, "0900000000");
updateTel.executeUpdate();
// ...
Procdures stockes
Linterface CallableStatement permet dinvoquer une procdure
stocke
NB: la procdure est stocke au niveau du SGBD
la cration se faisant avec la mthode prepareCall de Connection
// ...
CallableStatement cs = c.prepareCall("{call nom_procedure_stockee}");
// ...
309
La syntaxe de lappel de procdure (call ...) est traduit par le
driver JDBC dans la syntaxe native du SGBD
Lexcution de linstruction se fait de faon classique en
fonction de ce que retourne la procdure
Linterface CallableStatement est sous-interface de
PreparedStatement et accepte donc des paramtres
Transactions
(porte)
Rappel = une transaction permet dexcuter un ensemble de
requtes sur une BD, la faisant passer dun tat cohrent un
autre tat cohrant, respectant les proprits transactionnelles
(ACID)
Par dfaut, la connexion JDBC est en mode chan
chaque requte est suivie dun ordre SQL commit implicite
On peut dsactiver ce mode
310
On peut dsactiver ce mode
soit lors de la cration de la connexion
soit grce la mthode setAutoCommit
La validation doit alors se faire
explicitement par la mthode commit
et lannulation se fait grce
la mthode rollback
// ...
c.setAutoCommit(false);
// ...
// ...
c.commit();
// ...
c.rollback();
// ...
Transactions
(concurrence)
Le niveau disolation permet de dterminer les incohrences
que peut subir une transaction (lecture sales, fantmes, . . .)
Les diffrents niveaux disolation (normaliss) sont
Connection.TRANSACTION_READ_UNCOMMITTED
lectures sales, non reproductibles et fantmes peuvent se produire
Connection.TRANSACTION_READ_COMMITTED
311
les lectures sales sont vites
Connection.TRANSACTION_REPEATABLE_READ
les lectures sales et non reproductibles sont vites
Connection.TRANSACTION_SERIALIZABLE
la transaction est compltement srialisable
Connection.TRANSACTION_NONE
indique que les transactions ne sont pas supportes
Les mthodes getTransactionIsolation et
setTransactionIsolation de Connection permettent de connatre
et fixer le niveau disolation
Apports de JDBC 2.0 et 3.0 (1/2)
Amlioration des curseurs
Parcours dans les 2 sens, positionnement sur un tuple donn,
Mthodes nouvelles:
previous, first, beforeFirst, last, afterLast, absolute, relative,
Mise jour de la BD au travers des mthodes de Java
Notamment, au travers de curseurs
UPDATE
Mthode updateString de ResultSet,
312
Mthode updateString de ResultSet,
puis updateRow pour reporter les changements dans la BD
(avant de dplacer le curseur sur un autre tuple)
INSERT
Mthode moveToInsertRow pour dplacer le curseur vers une zone particulire
dinsertion,
puis mthodes updateXXX pour fixer les valeurs des attributs du tuple,
puis mthode insertRow pour insrer le tuple dans le ResultSet et dans la BD
NB: la mthode moveToCurrentRow permet de revenir sur le tuple courant (sur lequel
le curseur se trouvait avant lappel de moveToInsertRow)
DELETE
Positionner le curseur sur le tuple supprimer,
puis appel la mthode deleteRow pour effectuer la suppression
Apports de JDBC 2.0 et 3.0 (2/2)
Envoyer plusieurs instructions la BD en une fois
Excution par batch
Avec la mthode addBatch de Statement ajouter une
requte dans la liste excuter
NB: La liste peut tre effaces avec la mthode clearBatch
Lexcution des requtes est ensuite ralise par la
313
Lexcution des requtes est ensuite ralise par la
mthode executeBatch
Cette mthode retourne un tableau dentiers reprsentant le nombre
de tuples modifis par chaque instruction
Lexception BatchUpdateException peut tre lance si une erreur se
produit lors des mises jour
Support des types SQL3
Blob, Clob, Array, etc. et ajout des mthodes getXXX et
setXXX correspondantes
Le dictionnaire de donnes
(Oracle)
314
(Oracle)
Contenu du Dictionnaire Oracle
Dictionnaire Oracle = tables systmes en lecture seule
Evolution du dictionnaire
Gnr au moment de la cration de la DB
Mis jour automatiquement
Contient des informations sur la structure de la BD
Utilisateurs (privilges, rles)
Noms et caractristiques des objets
315
Noms et caractristiques des objets
(tables, vues, index, clusters, triggers, packages, ...)
Contraintes d'intgrit
Ressources physiques alloues la base
Valeurs par dfaut pour des colonnes
Les autres informations gnrales sur la base des donnes
Structure
Tables de base = tables fondamentales contenant les informations sur la BD
Conserves dans le tablespace SYSTEM
Vues de ces tables = prsentation dpendant du rle de celui qui consulte
Utilisation du dictionnaire
Accs avec SQL
Utilis par le DBA et les utilisateurs
Consultation dinformations sur la structure de la BD
Seulement des droits en lecture sur des vues du dictionnaire
NB: seulement par des requtes SELECT (lecture seule)
316
NB: seulement par des requtes SELECT (lecture seule)
Utilis par Oracle
A la connexion et pendant lexcution des requtes
Consultation dinformations sur les utilisateurs et leurs privilges
Consultation dinformations sur les objets de la BD
Lors des requtes SQL DDL (Data Definition Language)
Modification du dictionnaire
Diffrentes vues
317
La vue DICTIONARY permet daccder aux noms/desc. des vues DBA, ALL, USER, V$...
SQL> SELECT table_name,
comments
> FROM dictionary
> WHERE table_name LIKE
'%CONSTRAINTS%';
TABLE_NAME COMMENTS
------------------------------
------------------------------
Les vues USER
Description des objets logiques crs par lutilisateur
connect
Objets logiques = tables, index, vues, triggers, procdures
Exemples de vues USER_
USER_TABLES
SQL> SELECT
table_name
> FROM
318
USER_TABLES
Tables cres par lutilisateur
USER_INDEXES
Index crs par lutilisateur
USER_CONSTRAINTS
Contraintes cres par lutilisateur
USER_VIEWS
Informations sur les vues cres par lutilisateur
USER_USERS
Information sur lutilisateur
> FROM
dictionary
> WHERE
table_name LIKE
'%USER_%';
TABLE_NAME
------------------
------------

USER_VIEWS
USER_HISTOGRAMS
Les vues ALL
Ces vues dcrivent
les objets crs par lutilisateur connect (comme dans user_tables)
Et aussi tous les objets accessibles cet utilisateur
SQL> desc
all_tables;
SQL> desc
user_tables;
Dans user_tables
Dans all_tables
319
Exemples de vues ALL_
all_tables;
Nom
--------------
--------------
--
OWNER

TABLE_NAME

user_tables;
Nom
--------------
--------------
--
TABLE_NAME

SQL> SELECT table_name FROM


all_tables;

SQL> SELECT owner FROM


all_users;

SQL> SELECT index_name FROM


Les vues ALL : exemple
La vue ALL_CONSTRAINTS
Contraintes des tables accessibles lutilisateur
320
Les vues DBA (1)
Dcrivent tous les objets de la base
Sur certains objets, la description est plus complte
Accessibles quaux utilisateurs
Ayant le rle SELECT_CATALOG_ROLE
Ou ayant le privilge systme SELECT ANY DICTIONARY
Ex. La vue DBA_TABLES
321
SQL> SELECT table_name,
num_rows, blocks,
< empty_blocks,
avg_space
> FROM dba_tables
> WHERE
table_name=Livre;
Les vues dynamiques V$
Vues dont les informations sont dynamiques
Evoluent du dmarrage de linstance jusqu son arrt
Dcrivent lactivit de la DB et de linstance
Sont appeles dynamiques mais
en fait, elle externalise ltat de variables internes Oracle
Usage de ces donnes
Principalement pour lamlioration des performances de la BD
322
Ex. V$Session
Le DBA peut dconnecter les utilisateurs avec la commande
suivante
SQL> SELECT sid,
serial#, username,
type, status
> FROM v$session;
SID SERIAL#
USERNAME TYPE
STATUS
----- -------- -------
SQL> ALTER SYSTEM
Table DUAL
Elle permet de
rcuprer la date systme (SYSDATE)
tester le formatage de donnes de type DATE
tester le bon parenthsage d'expressions
etc.
Possde une seule colonne (DUMMY) et un seul tuple
323
Possde une seule colonne (DUMMY) et un seul tuple
SQL> SELECT
TO_CHAR(SYSDATE,'DD-MM-YYYY
HH24:MI')
> FROM DUAL;
TO_CHAR(SYSDATE,'DD-MM-YYYY
HH24:MI')
-------------------------------
324
Reprise mesures de scurit
T4 : protger (crypto) la BD
Serveur
BD
BD
Utilisateur
325
Protger les donnes de la BD
Observation / altration illicite
Protger le moteur dexcution de la BD
Vrifier la compltude/exactitude des rsultats
VERSION APPROFONDIE
Chiffrement Symtrique ( cl secrte)
Auteur et destinataire des messages partagent un secret (cl)
Le secret permet de chiffrer et le dchiffrer les messages
La scurit repose sur ce seul secret
Tous les dtails du systme sont publics, mme les fonctions de
chiffrement/dchiffrement
Secret partag: cl
K
326
ALICE BOB
m c
MARVIN
c m
c = C
K
(m) m = D
K
(c)
= D
K
(C
K
(m))
C
h
i
f
f
r
e
d

c
h
i
f
f
r
e
Algorithmes de chiffrement
symtriques par bloc
Un algorithme sr rsiste aux attaques suivantes:
Lattaquant connait le texte chiffr c il trouve m, ou mieux, la cl K
Lattaquant connait des couples clair / chiffr (m, c) il trouve K, ou peut dchiffrer dautres messages
DES : Data Encryption Standard (1976 1997)
Chiffrement par bloc de 64 bits
Chiffrement/dchiffrement = mme algorithme
La cl fait 56 bits
3DES : Remplace DES (1997 2001)
1997: 39 jours sur 10 000 Pentium
1998: une cl DES casse en 56h (pour 250 000 $)
2007: 6.4 jours sur une machine parallle ($10,000)
327
3DES : Remplace DES (1997 2001)
Ncessite 3 cls de 56 bits
3DES(k
1
k
2
k
3
, m) = DES(k
3
,DES(k
2
,DES(k
1
,m)))
RIJNDAEL (AES) : Utilis depuis 2001
(standard depuis 2002)
Chiffrement par bloc de 128 bits
La cl fait 128, 192 ou 256 bits
Rapide, ncessite peu de mmoire
La meilleure attaque connue ncessite 2
32
messages clairs connus, 2
113
tapes, 2
90
chiffrements DES, et 2
88
mmoire !!
3DES est sr (actuellement)
Seules des attaques canal latral ont t russies
sur AES
Voir www.cryptosystem.net/aes/ pour information
AES est sr (actuellement)
Puis-je chiffrer une BD avec 3DES ou AES sans problme ?
Application du chiffrement une BD
Les algorithmes de chiffrement rsistent aux attaques
mais pas toujours leur mise en uvre
Le contexte BD a des spcificits difficiles prendre en compte
Gros volume de donnes
328
Gros volume de donnes
Gros besoins de performance
Motifs rpts, distribution qui peuvent tre connues
Donnes modifiables
Mauvais choix du mode opratoire
Mode ECB => attaque par analyse de frquence
ECB : Motif en clair identiques => motif chiffr identique
3DES + Mode opratoire ECB
3DES + Mode opratoire CBC
329
Mode CTR => attaque par comparaisons successives
CTR : m XOR m = D
K
(m) XOR D
K
(m) => information sur le contenu des MAJ !
Les spcificits du contexte BD doivent tre prises en compte
Quid des concessions faites la scurit pour raisons de perf.?
Chiffrer une BD avec un algorithme sr pose problme
Chiffrer quel niveau ? (1/3)
Chiffrement niveau OS (chiffrement fichiers/stockage)
Encrypted Data
Storage layer
Encrypt/Decrypt
Server
RAM
DBMS engine
Keys
Data
RAM
Application
330
Transparent pour le SGBD et lapplication
mais chiffrement non slectif des limites
Chiffrement non li au droits daccs
(1 cl par privilge)
Chiffrement partiel proscrit (=> performances?)
Database Server
Chiffrer quel niveau ? (2/3)
Chiffrement niveau application
Chiffrement slectif possible
Rsistance aux attaques internes
Aucune transparence pour lapplication
Lapplication pilote chiffrement/dchiffrement
Et gre les cls
Storage layer
DBMS engine
Client
RAM
Keys
Data
Application
Encrypt/Decrypt
Application
331
Et prend en charge des traitements BD
Requtes, droits, contrle dintgrit
Dgradation importante des performances
Le client peut attaquer les droits daccs
Les donnes et les cls sont en clair sur le client
Difficile dimplanter plusieurs applications
Database Server
Encrypted Data
Storage layer
Server
RAM
Chiffrer quel niveau ? (3/3)
Chiffrement niveau SGBD
Chiffrement slectif (spcifique)
Chiffrer selon les privilges utilisateur
Chiffrer les donnes les plus sensibles
au niveau table, ligne, colonne
de faon conditionnelle (salaire >10K)
Transparence pour lapplication
Encrypted Data
Storage layer
Server
RAM
Database Server
DBMS engine
Keys
Data
Encrypt/Decrypt
Application
332
Transparence pour lapplication
mais mcanismes internes SGBD revisiter
Evaluation de requte + indexation sur des donnes chiffres impossible
sauf chiffrement proprits particulires
(prservant galit ou lordre => dangereux pour la scurit)
Surtout dans un contexte o le serveur nest pas de confiance (approche client)
et problme de performance en perspective
Conclusion : chiffrement dans le SGBD
Chiffrement au niveau SGBD : 3 approches
Approche serveur
Le serveur protge les donnes (chiffre/dchiffre)
Approche client
Le client protge les donnes
333
Le client protge les donnes
Approches base de matriel sr (MS)
Le MS protge les donnes
Le serveur chiffre/dchiffre les donnes
Les cls sont dtenues par le serveur
Les donnes sont dchiffres lors de lvaluation des requtes
La BD est protge sur le support de stockage persistant
Le niveau de protection des donnes nexcde pas celle celui des
cls, stockes sur le serveur
Solution Oracle: les cls sont chiffres par une master key chiffre
Lapproche serveur : principe
334
Solution Oracle: les cls sont chiffres par une master key chiffre
elle-mme avec un mot de passe administrateur (wallet)
Faiblesses : attaques internes
Pirate ou cheval de Troie
Administrateur a tous les droits
Peut accder aux cls/donnes et utiliser la base
Ceci sans laisser de traces
Encrypted Data
Storage layer
Server
RAM
Database Server
DBMS engine
Keys
Data
Encrypt/Decrypt
Application
Techniques rduisant au maximum
Lexposition des cls
Et les droits de ladministrateur
Introduction dun dispositif scuris (HSM, Hardware Security Module)
Les cls sont chiffrs avec une master key , dtenue par le HSM
Elles ne sont accessible que pendant lexcution
mais les cls restent exposes (brivement)
et les donnes sont en clair lors de lexcution
Lapproche serveur : gestion des cls
Keys
Data
Keys
K
e
y

E
n
c
/
D
e
c
Master
key
Storage layer
DBMS engine
Keys
Data
Keys
K
e
y

E
n
c
/
D
e
c
Master
key
Storage layer
DBMS engine
335
et les donnes sont en clair lors de lexcution
Introduction dun serveur de scurit (serveur distinct)
Un 2me serveur gre les cls et droits daccs
2
me
Administrateur : Grant/revoke/create user
Rsiste mieux aux attaques internes
Le DBA/troyan ne peut pas observer lempreinte BD
Mais les cls/donnes restent en clair lexcution
EncryptedData
Server
RAM
Hardware
Security
Module
E
n
c
/
D
e
c
Storage layer
EncryptedData
Server
RAM
Database Server
Hardware
Security
Module
E
n
c
/
D
e
c
Storage layer
EncryptedData
Server
RAM
Keys
Data
users, user
privileges,
encryption keys
Keys
Keys
Security engine
Storage layer
DBMS engine
SecurityModule
EncryptedData
Server
RAM
Database Server
Keys
Data
users, user
privileges,
encryption keys
Security Server
Keys
Keys
Security engine
Storage layer
DBMS engine
SecurityModule
Lexemple dOracle
DBMS Obfuscation Toolkit (8i) :
Solution de chiffrement niveau application
base de procdures stockes (chiffrement/dchiffrement/hachage)
Transparent Data Encryption (TDE) :
Solution de chiffrement niveau SGBD
SQL tendu la gestion du chiffrement
Approche serveur : solutions commerciales (1)
336
Master key : chiffre par un mot de passe (admin.) ou stocke dans un HSM
Chiffrement niveau attribut (10g)
Colonnes chiffres : dans les tablespaces (mme temporaires), SGA,
logs/backups
Indexation des prdicats dgalit (NO_SALT) attaque par analyse de
frquence !
Chiffrement niveau tablespace (11g)
Tablespaces complets chiffrs sur disque, dchiffrs en SGA
Indexation classique (indexes chiffrs fabriqus sur le clair)
SQL server 2008 TDE : similaire Oracle TDE / chiffrement niveau
tablespace
Complment de lapproche serveur: Protegrity
Secure.Data
SGBD
+
Secure
Server
BD
Utilisateur
Secure
Manager
Cls
Utilisateurs
Privilges
337
Solution base sur 2 modules :
Secure.Manager : gestion des utilisateurs, droits et cls
Secure.Server : module de chiffrement intgr au noyau SGBD
et 2 personnes physiques diffrentes
Database Administrator (DBA) / Security Administrator (SA)
Isolation DBA/SA ?
Donnes toujours en clair un moment de lexcution...
Secure
Manager
Lapproche client : principe
Chiffrement cot client
Pas de transmission du texte clair ni des cls au serveur
Le traitement seffectue sur le client (pire cas)
La BD est protge cot serveur
Le serveur rsiste aux attaque internes
Mais dgradation trs importante des performances
Problme : dporter la majeure partie du traitement
Database Server
DBMS engine
Client
RAM
Keys
Data
Client
Encrypt/Decrypt
338
Problme : dporter la majeure partie du traitement
sur le serveur (donnes chiffres), sans perte de
scurit
Limites de lapproche client
Gestionnaire de droits ct client
Donnes et cls en clair sur le client
Or le client nest pas forcment un site de confiance
Donc ne convient pas une BD partage (BD prive uniquement)
Database Server
Encrypted Data
Storage layer
Server
RAM
Rponses au problme de performance
Indexation des donnes
Indexation (index traditionnel chiffr)
Ex. Le client maintient et utilise (traverse) un B+-Tree [DDJ+03]
Etiquetage des tuples
Ex. Le client pose des tiquettes, pour slectionner/joindre [HIL+02]
Modle de chiffrement
339
Modle de chiffrement
indexer des donnes chiffres ne sert rien
traiter directement les donnes chiffres est impossible
SAUF SI: on dispose de chiffrement proprits
particulires
Ex. Prservant lgalit [Ora07, BoP02], lordre [AKS+04], ou
lhomomorphisme [GeZ07]
Compromis scurit / performance
Solution par tiquetage [HIL+02]
Granule de chiffrement = tuple
Ajout dtiquettes dattributs
Indique quun attribut de tuple appartient une plage de
valeurs
Permet des traitements (approximatifs) sur le serveur
Slection, jointure, groupement
340
Slection, jointure, groupement
id name salary age
Encrypted row
I
id
I
name
I
age
I
salary
tuple:
tuple chiffr:
tiqute
Partitionner le domaine de variation dun attribut
Attributs numriques
Connaissance du client
h(1)=17
20 54
h(2)=4 h(3)=12 h(4)=3 h(5)=6 h(6)=1 h(7)=9
24 31 35 40 48 50
341
Connaissance du serveur
32<Age<40
I
Age
= 12
OR
I
Age
= 3
Age=53
I
Age
= 9
Infrences => distribution
uniforme
(nb tuples par partition identique)
connaissance a priori vs.
updates?
combinaison dindices?
( suivre)
E(R1)
3
E(R2)
9
E(R3)
4
(Age=37)
(Age=53)
(Age=26)
I
Age
Attributs String
Signatures de string (n-grams)
string signature
'Greencar' 110
name LIKE '%green%'
Connaissance du client
N={"g", "re", "ma"}
342
'Greencar'
'Bigrecordman'
'Bigman'
110
111
101
I
Name
in (110, 111)
110
111
101
Connaissance du serveur
I
Name
E(R1)
E(R2)
E(R3)
(string=Greencar)
(string=Bigrecordman)
(string=Bigman)
Infrences => distribution
uniforme des ngrams et des
signatures
(difficile obtenir)
Architecture
Server Site
Temporary
Results
Query
Executer
Server Side
Query
Encrypted
Results
Service Provider
Client Site
Client Side
Query
343
Encrypted User
Database
Query
Translator
Metadata
Original Query
Query
Final Results
User
+vite
Dcomposition de requte (1)
Q: SELECT name, pname FROM emp, proj
WHERE emp.pid=proj.pid AND salary > 100k
name,pname
Client Query
name,pname
e.pid = p.pid
344
EMP
PROJ
salary >100k
e.pid = p.pid
Server Query
Encrypted
(EMP)
Encrypted
(PROJ)
salary >100k
D
D
e.pid = p.pid
Dcomposition de requte (2)
e.pid = p.pid
name,pname
Client Query
salary >100k
D
e.pid = p.pid
name,pname
Client Query
345
E_EMP
E_PROJ
salary >100k
D
D
e.pid = p.pid
Server Query
E_EMP
E_PROJ

D
s_id = 1 OR s_id = 2
Server Query
Dcomposition de requte (3)
salary >100k and
e.pid = p.pid
D
e.pid = p.pid
salary >100k
D
name,pname
name,pname
Client Query
Client Query
Infrences => distribution
uniforme
PK/FK => nombre de valeurs
par intervalle connu !
346
e.p_id = p.p_id
E_EMP
E_PROJ
s_id = 1 v s_id = 2
E_EMP
E_PROJ

D
s_id = 1 v s_id = 2
Server Query
Server Query
par intervalle connu !
Dcomposition de requte (4)
Q: SELECT name, pname
FROM emp, proj
WHERE emp.pid=proj.pid AND
salary > 100k
Q
S
: SELECT e_emp.etuple,
e_proj.etuple
salary >100k and
e.pid = p.pid
D
name,pname
Client Query
347
FROM e_emp, e_proj
WHERE e.p_id=p.p_id AND
s_id = 1 OR s_id = 2
Q
C
: SELECT name, pname
FROM temp
WHERE emp.pid=proj.pid AND
salary > 100k
e.p_id = p.p_id
E_EMP
E_PROJ
s_id = 1 v s_id = 2
Server Query
Lapproche base de matriel sr (MS)
MS sur le client
Rsiste aux attaques sur le client
Gestionnaire de droits, cls, donnes en clair
Des instances
Chip scuris embarqu dans une cl USB
Carte puce sur le client + serveur
348
Carte puce sur le client + serveur
Carte SIM + tlphone
Problmatique
Traitement BD embarqu chip extrmement contraint
(RAM)
Ex. C-SDA [BoP02]
Conclusion chiffrement BD
Approche serveur
Solution des grands diteurs
Problme de rsistance aux attaques internes
Les cls et les donnes en clair lexcution
Pirate, programme malveillant, administrateur
Des solution pour limiter lexposition des cls
Des solutions pour rduire les droits administrateur au minimum
Problmes de performance
Approche client
349
Approche client
Rsiste aux attaque internes
Mais les problmes de performance sont dcupls
Ne rsiste pas aux attaques du client => BD prives
Beaucoup de problmes de recherche
Indexation, tiquetage, modle de chiffrement
Evaluation de requtes complexes, mises jour
Approche par matriel sr
Rsiste aux attaques internes et celles du client => DB partage
Mais problmes de performances encore plus important
Pour linstant confine la recherche
Conclusion
La scurit et un problme actuellement crucial dans les SGBD
Les lois rendent responsable les entreprises vis--vis de toute lacune de
scurit de leur SI
La base de donne a besoin de protection
Ces protections existent
350
Ces protections existent
T1 : authentification
T2 : chiffrement des communications client/serveur
T3 : droits daccs aux donnes
T4 : chiffrement des donnes
Les lments de scurit existant ne sont pas suffisants
Perspectives intressantes (travaux actuels)
Travaux actuels
Modle P3P et SGBD hippocratiques
Le serveur sengage sur un contrat avec le client
Bases k-anonymes
Les donnes sont gnralises/supprimes avant
publication
Suppression relle
351
Suppression relle
tude de la rmanence des donnes dans un SGBD
Etc
Bases Hippocratiques
[AKS+02]
Objectif
contrler lusage des donnes gres par un SGBD
10 principes fondateurs
1-Purpose Specification, 2-Consent, 3-Limited Collection,
4-Limited Use, 5-Limited Disclosure, 6-Limited Retention,
7-Accuracy, 8-Safety, 9-Openness, 10-Compliance
352
7-Accuracy, 8-Safety, 9-Openness, 10-Compliance
Chacun de ces principes gnre un problme de
recherche
Travaux connexes
P3P (Platform for Privacy Preference, W3C)
Relais danonymat, pseudonymat, contrle parental
Et aussi gestion des droits daccs digitaux (XrML,
XACML, ODRL )
Bases K-anonymes
[Sweeney]
85 % des amricains sont identifis par
Genre, code postal (5 chiffres), date de naissance
Comment empcher de lier les donnes ?
Lide : rendre les donnes publiques k-anonymes
Toute jointure dune table avec une autre doit donner au
353
Toute jointure dune table avec une autre doit donner au
moins k rsultats, quelque soit la cl de jointure (multi-
attributs)
Voir algorithme Mondrian
Cette ide fait sa route
L-diversit, T-closeness...
Algorithme de Mondrian
354
tude de la suppression
[Miklau]
Les systmes dexploitation mettent en cache
Les bases de donnes
Stockent dans des tables, cache, journaux, indexes
Lorsquun client demande une suppression
Do les donnes sont-elles rellement supprimes ?
355
Do les donnes sont-elles rellement supprimes ?
Effacer dans les tables/cache
update xxx au lieu de delete xxx
Dans les logs gestion circulaire simple
Chiffre(data, cl) chiffre (data, H(cl))
Dans les index - unsolved

Vous aimerez peut-être aussi