Cours Yaounde
Cours Yaounde
Cours Yaounde
de Bases de Données
2
Planning prévisionnel des séances
Modèles – Fondements, approches fichiers vs approche bases de données
– Conception de bases de données: modèle conceptuel de données, modèle relationnel Exercice 1 : conception
J1 – Algèbre relationnelle Exercice 2 : algèbre
Lanages – Le langage SQL (1) : langage de définition de données et de manipulation des données
– Le langage SQL (2) : langage d’interrogation des données et méthodologie
J2 – Programmation SQL: PL/SQL, JDBC/ODBC
[ Parenthèse utile au TP : le dictionnaire de données Oracle ]
Exercice 3 (OracleXE): Création d’une BD, chargement, et manipulation en SQL
Exercice 4 (OracleXE): Interrogation des données en SQL
Sécurité – Sécurité des SGBD : les enjeux, les menaces, exemples d'attaques connues
J4 – Modèles de contrôle d’accès DAC-SQL, RBAC, MAC, sécurité multi-niveau dans les SGBD : Oracle VPD / OLS
– Place de la cryptographie dans la sécurité d'un SGBD
– Chiffrement par approche serveur, approche client, approche par matériel sûr
Exercice 8 (OracleXE): Programmation d’applications BD, injection SQL, droits d’accès RBAC-SQL
4
Modèles
Modèle entités/associations
Modèle relationnel et algèbre
Exercice n°1: modélisation BD
Exercice n°2: algèbre relationnelle
6
Systèmes
Redondance
Plusieurs dedonnées
fichiers Caractéristiques
(données)
applications
Interrogations
Partage de
Pannes ???
Confidentialité Plusieurs applications
plusieurs formats
ComptaSoft plusieurs langages
ChiruSoft
Dupont Dupond
Symptomes : y
Turlututu : sqj
Turlututusqjsk
Symptom: yyyy
Analyses xxxx
Redondance de données
Pas de facilité d’interrogation
Symptomes : y
Turlututu : sdd Turlututudhjsd
Analyses : xxx Analyses :xx
Question développement
Redondance de code
Comptabilité Chirurgie
Problèmes
Difficultés de gestion
Incohérence des données
Coûts élevés
Consultations Psychiatrie Maintenance difficile
Gestion de pannes ???
ConsultSoft
PsychiaSoft
Duhpon Duipont
Turlututu : sq Partage des données ???
Symptomes : yy Symptomyyyy
Analyses : xxxx
Symptomes : yy
Analysesxxxx
Turlututudhjsd
Confidentialité ???
7
L’approche ‘‘Bases de données’’ (1)
8
L’approche ‘‘Bases de données’’ (2)
I- Indépendance
Physique
VI - Gestion de la
cohérence
9
Conception de bases de données
(Production du modèle conceptuel de
données)
10
Modélisation du réel
Réel
• Indépendant du
modèle de
Modèle données
conceptuel • Indépendant du
Médecin effectue Visite
SGBD
• Dépendant du
modèle de
Modèle données Codasyl Relationnel Objet XML
logique • Indépendant du
SGBD
• Dépendant du
modèle de • Organisation physique des données
Modèle données • Structures de stockage des données
Physique • Dépendant du • Structures accélératrices (index)
SGBD
11
Méthode de conception ?
• Plusieurs façons d’aborder la conception d’une BD
– Intuition + création directe de la BD
– Suivre une méthode de conception (MCDMLDMPD)
• Entité/Association (E/A) ou Entity/Relationship (E/R)
• Merise
• UML
• Suivre son intuition peut conduire à des erreurs
– Redondances
– Valeurs nulles
– Difficulté de gestion
– Impossibilité de répondre à certaines questions
• Une fois la base de données crée, difficile à modifier… (cf. TP)
• Les outils de conception sont une aide précieuse
12
Exemple de mauvaise conception (1)
• Stocker des propriétaires de véhicule:
N° Nom Prénom Ville Pays Immatriculation Marque Couleur
1 Bar Joe Paris France 125 PP 75 Renault Rouge
2 Dean Pascal Vence France 234 FF 45 Peugeot Vert
3 Ben Zoe Lyon France 324 DFT 56 Renault Rouge
4 Bar Joe Paris France 245 FT 75 Renault Jaune
13
Exemple de mauvaise conception (2)
• Stocker des personnes qui ont des enfants:
• Redondance cachée :
– Nombre d’enfants vs enfants
• Difficulté de gestion
– Comment gérer les personnes ayant plus de 3 enfants !
– Comment afficher la liste des enfants ?
14
Méthodes de conception : Exemple Merise
Réel
DONNEES TRAITEMENT
MCD MCT
Modèle Quelles données ? Quels traitements ?
conceptuel Quelle organisation ?
Profs
Profs
Bouganim Profs Nom
Luc Crenn Prénom
..... Isabelle Adresse
…
....
18
Déf° (3) : Propriétés / Identifiants
19
Exemple : Profs et cours...
Prof Cours
CodeProf enseigne CodeCours
Nom NbreHeures NomCours
Prénom …
Adresse Cours
Profs 1
1 Maths
enseigne
Crenn .....
Profs Isabelle 55
3 ....
enseigne Cours
Lewis
Jerry 16 2
.... Profs Info
2 enseigne s
...
Bouganim 24
Luc
.....
20
Déf°(4) : Cardinalités
• Cardinalité : Exprime le nombre minimum et maximum
d’association(s) par entité. Il est indiqué sur chaque arc,
entre le type d’entité et le type d’association concernées
22
Comment produire le MCD ? (2)
Médecin
1,1
exerce
1,n
Salle
23
Comment produire le MCD ? (3)
• On obtient :
• par exemple:
– un prof enseigne plusieurs cours
– une matière est enseignée par plusieurs profs (info/anglais)
– les notes peuvent être données par n’importe quel prof ou
par plusieurs profs enseignant une matière... (info par
exemple)
– On peut redoubler une fois....
– etc...
26
Règles (2) : propriétés élémentaires, 27
calculées, constantes
• Toute propriété doit être élémentaire
– sinon, complexité de traitement
– Ex. de propriétés élémentaires : Age, Salaire, N° de rue
– Ex. de propriétés non élémentaires : Adresse (complète), N°SS
– la notion d’élémentaire dépend de l’application. L’adresse peut
devenir élémentaire si elle est toujours manipulée comme telle
(on ne cherchera jamais à faire, par exemple, un tri par ville)
« Il n’est pas gênant d’éclater des propriétés qui devrait être
groupés, mais on ne peut pas grouper des propriétés qui devrait
être éclatées»
28
29
29
30
de l’identifiant
• Toute propriété doit dépendre pleinement de l’identifiant
(et non d’une partie de celui-ci)
– Sinon on introduit des redondances
• Les propriétés d’une association doivent dépendre de la
totalité des entités associées
– Sinon, les déplacer, voire créer une nouvelle association…
• Exemple :
1/ la salle dépend du prof, du cours et du
enseigne
Heure
groupe OK
Prof Groupe
Salle 2/ la salle ne dépend que du prof
Salle Not OK (dans prof)
?
Salle 3/ la salle ne dépend que du prof et du cours
Cours not OK (nouvelle association entre
prof et cours)
31
32
Enseigne
Prof Groupe
Heure
?
Salle
Cours
32
33
Prof Prof
1,1 Ville
CodeProf CodeProf est dans 0,n
NomVille
Nom Nom
Pays
Prénom Prénom
Ville
Pays
33
34
34
35
Commentaires?
Le schéma est simple, il répond au problème
On a un minimum de données
On ne peut pas faire de suivi sur une promo
On ne peut pas faire de suivi par prof
Pas de statistiques sur plusieurs années
Problème de gestion: on aura 4 fois les mêmes programmes
35
Modèle entité-association (2/2)
Etudiant
a obtenu Cours
N° 0,n DS1 0,n NomCours
Nom DS2 Pôle
Participation Coefficient
Prénom
Examen
Groupe
TypeNote
Type
Coefficient
0,n
Etudiant Cours
a obtenu
N° 0,n Note
0,n NomCours
Nom Pôle
Prénom Coefficient
Groupe
36
37
Modélisation ‘complète’
37
38
Modèle entité-association
TypeNote
Type
Coefficient
1,n
Etudiant Cours
a obtenu
N° 1,n Note
1,n NomCours
Nom Pôle
Prénom Coefficient
1,n
1,n
Période 1,n
Code
1,n
Est dans 1,n Enseigne
Année
Semestre
Nb heures
1,n
1,n
Groupe 1,n Profs
Code Nom 1,n
Prénom
Adresse
38
Modèle relationnel
39
Le modèle relationnel
• En 1970, Edward Codd, Prix Turing 1981, chercheur chez IBM,
propose le Modèle Relationnel, basé sur la Logique du premier ordre
définie par les mathématiciens de la fin du 19e siècle pour formaliser
le langage des mathématiques
A Relational Model of Data for Large Shared Data Banks,
CACM 13, No. 6, June 1970
• Il définit le Calcul Relationnel et l’Algèbre Relationnelle, sur lesquels
sont basés SQL (Structured Query Language), le langage standard de
manipulation (LMD) et de définition des données (LDD) de tous les
SGBD Relationnels actuels
• ENSEMBLE DE VALEURS
• Exemples:
– ENTIER
– REEL
– CHAINES DE CARACTERES
– EUROS
– SALAIRE = {4 000..100 000}
– COULEUR= {BLEU, BLANC, ROUGE}
41
Produit cartésien
Bleu Vrai
Bleu Faux
Blanc Vrai
D1x D2 = Blanc Faux
Rouge Vrai
Rouge Faux
42
Relation, attribut
• Relation = sous-ensemble du produit cartésien d’une liste
de domaines
– Une relation est caractérisée par un nom
– Exemple: CoulVins Coul Choix
• D1 = COULEUR Bleu Faux
• D2 = BOOLEEN Blanc Vrai
Rouge Vrai
• Plus simplement …
– Une relation est une table à deux dimensions
– Une ligne est un tuple
– Un nom est associé à chaque colonne afin de la repérer
indépendamment de son numéro d'ordre
• Attribut =
– nom donné à une colonne d'une relation
– prend ses valeurs dans un domaine
43
Exemple de relation
44
Clé
• Exemples
– {CRU,MILLESIME} DANS VINS
– NSS DANS PERSONNE
• Contrainte d’entité
– Toute relation doit posséder au moins une clé documentée
45
Clé Etrangère
46
Schéma
• Schéma de relation
– Définition = Nom de la relation, liste des attributs avec
domaines, et clé de la relation
– Exemple
• VINS(NV: Int, CRU:texte, MILL:entier, DEGRE: Réel,
REGION:texte)
– Par convention, la clé primaire est soulignée
• Intention et extension de relation
– L'intention de la relation = le schéma de la relation
– Une instance de table représente une extension de la
relation
• Schéma d’une BD relationnelle = l'ensemble des
schémas des relations composantes
47
Exemple de Schéma
• BUVEURS (NB, NOM, PRENOM, TYPE)
• VINS (NV, CRU, MILL, DEGRE)
• ABUS (NB, NV, DATE, QUANTITE)
12 PERSO EMPLOYE 4
14 PERSO DEPARTEMENT 5
1 SYS RELATIONS 4
1 12
ENTIER NUM
2 TEXTE NOM 12
3 TEXTE PNOM 12
49
Passage de niveau conceptuel au
niveau logique
• Le modèle conceptuel est un compromis entre la flexibilité
de la langue courante et la rigueur nécessaire d’un
traitement informatisé.
• Le niveau logique est une étape de plus vers cette
informatisation
– Utilisation du formalisme du modèle relationnel :
• tables (ou relations)
• attributs
• domaine
• clefs
• contrainte d’intégrité référentielles (relations entre tables)
– Simplification du schéma de la base
• Des règles trop strictes entraînent des schémas trop complexes
• On ‘‘tolère’’ un peu de redondance ou quelques valeurs nulles....
50
Propriétés, Entités
51
Cas 1
Profs
• Un prof enseigne un et un seul
Cours
Nom 1,1 Enseigne
1,1 cours
NomCours
Prénom NbreHeures
Adresse
Description
• Un cours est enseigné par un et
un seul prof
Nom Prénom Adresse NomCours Description NbreHeures
Solution 1 Bouganim Luc Paris Info Informatique 44
Crenn Isabelle Paris Math Mathématiques 78
Rousseau Martine Versailles Droit Droit 26
Solution 2
Nom Prénom Adresse NomCours NbreHeures NomCours Description
Bouganim Luc Paris Info 44 Info Informatique
Crenn Isabelle Paris Math 78 Math Mathématiques
Droit Droit
53
Cas 3
Profs
• Un prof enseigne un cours ou
Cours
Nom 0,1 Enseigne
1,1 aucun
NomCours
Prénom NbreHeures
Adresse
Description
• Un cours est enseigné par un et
un seul prof
Solution 2
Nom Prénom Adresse
Nom NomCours Description NbreHeures
Bouganim Luc Paris
Crenn Isabelle Paris
Bouganim Info Informatique 44
Rousseau Martine Versailles Crenn Math Mathématiques 78
54
Cas 4
Profs
• Un prof enseigne un cours ou
Cours
Nom 0,1 Enseigne
0,1 aucun
NomCours
Prénom NbreHeures
Adresse
Description
• Un cours est enseigné par un
prof ou n’est pas enseigné
Solution 2
Nom Prénom Adresse NomCours NbreHeures NomCours Description
Bouganim Luc Paris Info 20 Info Informatique
Crenn Isabelle Paris Info 24 Droit Droit
Rousseau Martine Versailles Droit 26
56
Cas 6
Profs
• Un prof enseigne un ou
Cours
Nom 1,n Enseigne
1,1 plusieurs cours
NomCours
Prénom NbreHeures
Adresse
Description
• Un cours est enseigné par un et
un seul prof
Solution 2
Nom NomCours Description NbreHeures
Nom Prénom Adresse
Bouganim Luc Paris Bouganim Info Informatique 20
Crenn Isabelle Paris Crenn Math Mathématique 48
Crenn Droit Droit 26
57
Cas 7
Profs
Cours
• Un prof enseigne un ou
Enseigne
Nom 1,n 1,n NomCours plusieurs cours
Prénom NbreHeures
Description
Adresse • Un cours est enseigné par un
ou plusieurs profs
Nom Prénom Adresse NomCours Description NbreHeures
Solution 1 Bouganim Luc Paris Info Informatique 22
Crenn Isabelle Paris Info Informatique 26
Crenn Isabelle Paris Droit Droit 34
58
Cas 8
enseigne
1,n Heure 1,n
Prof Groupe
Salle
1,n
Cours
59
Passage au modèle relationnel - Conclusion
• Objectifs
– Ne pas créer de tables inutiles
– Ne pas dégrader le modèle conceptuel (pas de propriété
répétitive ni sans signification)
• Méthode
– Si possible, passer les propriétés de l’association dans
l’une ou l’autre des entités mais:
• Si la cardinalité minimum est 0, on ne peut le faire car, pour
certaines entités, il y aurait des valeurs nulles (ex. un prof ne
donnant pas de cours)
• Si la cardinalité maximum est n, on ne peut le faire car il y aurait
des attributs répétitif (ex. un prof donnant plusieurs cours)
– Sinon, créer une table pour l’association contenant
• les clefs des entités associées
• les propriétés de l’association 60
Algèbre relationnelle
61
Algèbre relationnelle
OPERATIONS PERMETTANT D'EXPRIMER LES
REQUETES SOUS FORME D'EXPRESSIONS
ALGEBRIQUES
• Avantages
– Concis
– Sémantique simple
– Représentation graphique
– Utile pour raisonner (cf. TD) – peu d’erreur de syntaxe !
– Utile pour l’optimisation de requêtes
62
Projection
• Elimination des attributs non désirés et suppression
des tuples en double
• Relation Relation notée: a1,a2,...Ap (R)
Cru,Région
Cru,Région (VINS) =
CHENAS BEAUJOLAIS
JULIENAS BEAUJOLAIS
63
Restriction
• Obtention des tuples de R satisfaisant un critère Q
• Relation Relation, notée Q(R)
• Q est le critère de qualification de la forme :
– Ai Valeur, = { =, <, ≥, >, ≤ , != }
– Il est possible de réaliser des "ou" (conjonction) et des "et" (disjonction)
de critères simples
MILL>1983
65
Exemple de Jointure
66
Exemple de -Jointure
EMPLOYES NOM DEPT SALAIRE RESPONSABLE DEPT SALAIRE
EMPLOYES E RESPONSABLE R =
E.salaire > R.salaire et E.dept = R.dept
NB : signification de la requête ?
Employés ayant un salaire supérieur à celui du responsable de leur département
67
Unions, intersections, différences
• Opérations binaires
– Relation Relation Relation
• Opérations pour des relations de même schéma
– UNION notée
– INTERSECTION notée
– DIFFERENCE notée —
• Extension pour des relations de schémas différents
– Ramener au même schéma avec des valeurs nulles
68
Union (
UNION ENSEMBLISTE POUR DES RELATIONS DE MEME SCHEMA
Exemple : VINS1 VINS2
70
Différence (-)
DIFFERENCE ENSEMBLISTE POUR DES RELATIONS DE MEME SCHEMA
71
Division ()
72
Division () - Exemple
Union - Différence
Projection
Division
Intersection
Restriction
Produit
critères
Jointure
cartésien
74
Récapitulatif
Produit
Sélection Projection
Union
Intersection
a x a x
b y a y
c b x
b y
c x
c y
a1 b1 b1 c1 a1 b1 c1 a x x a
a y y
a2 b1 b2 c2 a2 b1 c1 a z
b x
a3 b2 b3 c3 a3 b2 c2 c y
75
Autres opérateurs
Renomage ()
Permet de renommer des attributs
Affectation ()
Affecte une expression à une relation temporaire
Exemple : Temp r – s
76
SemiJoin, AntiJoin, OuterJoin
• SemiJoin
• AntiJoin
• Left OuterJoin
• Right OuterJoin
77
Exercice 1 : modélisation
78
Division
Division EmployéEmployé
Employé
1-n
1-n Code
1-1 Est dirigée 0-1 1-1
NumDiv
NumDiv Travaille Matricule Matricule postal
Travaille 0-1 0-1Matricule
SalaireEmp
Personne
dans
NomDiv
NomDiv NomEmp
SalaireEmp 1-1 Est1
1-n DateNaissEmp
PrénomEmp 1-1 CP 0-1
Travaille 1-1 1-11-1
DateNaissEmp IdPers 1-n
AdresseVoie 1-1
SalaireEmp Nom
AdresseCPN°DsRueEmp 0-1 Prénom Ville
Fonction Tel
1-n TelEmp N°DsRue
Fonction
a la 1-1 1-n
1-n
1-n a la DateNaissEmp 0-n Tel Ville
Fonction Est2
NumFonc
NumFonc 1-n Client Dans la
a 1-n 1-1
DescFonc
DescFonc habite rue1 Rue
NumFonc 0-n 0-n Client 1-n
Prime
Prime NumCli
Client 1-1
DescFonc Rédige
1-1 1-n Ds
Prime (taux) 1-n NumCli 1-1 IdRue
1-nNumCli Rue dans
NomRue
Rédige NomCli
Réalise Nom Dans la 1-n CP1-n
0-n PrénomCli
1-1 Passée
directement Prénom 1-1 rue2 1-n 1-n
Vente
Vente 1-1 1-1 N°DsRueCli habite
AdresseVoie Rue 1-1
TelCli
NumVente 1-1 AdresseCP 0-1 1-n Pays
NumVente Messager
DateVente
DateVente 1-1
Exercice de conception Tel Livrée à IdRue
DateLivr Quelques
1-1 modèles Entité
PrénomLiv
1-n
N°DsRue Associations
AdresseVoie
AdresseCP possibles
1-n 1-n Dans11-n
FraisPort
Concern
Concern
Quelques 1-1 modèles Entité
Livrée à Livre
TelLiv Associations
Tel Dans lapossibles
Est3
rue4 habite
Ville
1-n
IdVille
e e 1-1
1-n Ville
NomVill
Messager
Messager 1-1
Destinataire habite
e
Qté
Qté 1-n1-n Est4 IdVille 1-1
Remise
Remise NumMess
NumMess Dans la
NumDest 1-1 NomVill
NomMess rue5
0-n
0-n Nom 1-1 e
Livrée
1-n N°DsRueMess Prénom 1-1
Livrée parpar TelMess Dans
Produit
Produit AdresseVoie
1-1
AdresseCP Fournisseur Dans2
NumProd
NumProd Fournisseur
Fournisseur Tel
1-1
NomProd Produit NumFour 1-n
NomProd
1-1 Concerne Nom 1-n
PrixUnitaire
PrixUnitaire 1-1 NumFour
NumFour
0-n parpar
fourni
fourni NumProd 1-n 1-1
NomFour fourni par 1-n Prénom Pays
Pays
Qté
NomProd 1-n PrénomFour AdresseVoie
Remise
PrixUnitaire N°DsRue AdresseCP IdPays
IdPays
TelFour Tel NomPay
NomPay
s s 79
Division Employé
Code
NumDiv Matricule postal
NomDiv SalaireEmp
Directeur DateNaissEmp CP
AdresseVoie Ville
AdresseCP Ville
Tel
Division Ville
Fonction Fonction Pays
Adresse
NumFonc Client
DescFonc
Prime (taux) NumCli
Nom
Prénom
AdresseVoie
AdresseCP Pays
Correction de l’exercice de conception
Tel Messager
Adresse Pays
Vente NumMess
NumVente
--- Nom
Prénom
DateVente
DateLivr Quelques
Passage
modèles
au Modèle
Entitélogique
Associations
AdresseVoie
AdresseCP (relationnel)
possibles
FraisPort Tel
Vendeur Adresse
Acheteur
Livreur
Destinataire
Destinataire
NumDest
Nom
Prénom
AdresseVoie
AdresseCP Fournisseur
Tel
Detail Produit Adresse NumFour
Nom
NumVente NumProd Prénom
NumProd NomProd AdresseVoie
Qté PrixUnitaire AdresseCP
Remise Fournisseur Tel
Adresse 80
Exercice 2 : algèbre
81
Langages
Langage SQL
Langages de progr. SGBD
TP : création de BD et manipulation SQL
83
SQL : pour quoi faire (1) ?
• Avant SQL, rechercher des données satisfaisant une
qualification ressemblait à :
Select B.plage
From Nageurs N, Baignade B
Where N.qualité = ‘excellent’
and B.date between ‘O1-08-89’
and ’31-08-89’and N.idn = B.idn
84
SQL : pour quoi faire (2) ?
• Une interface plus simple pour les utilisateurs ?
– La majorité des manipulations utilisateurs se font via des
formulaires !
– Mais rend possible les requêtes libres (ex: analyse)
• Simplifier le développement des applications
– Code plus compact et facile à valider/maintenir
– Indépendance physique et logique des programmes par
rapport aux données
– Optimisation automatique et dynamique des requêtes par
le SGBD
• Une puissance d’expression exploitable de nb
façons
– Sélection, mises à jour, intégrité, droits d’accès, audit … 85
Le standard SQL (1)
• Trois versions normalisées de SQL :
– SQL1 (1986) : version minimale
86
Le standard SQL (2)
LANGAGE DE DEFINITION DE DONNEES
CREATE TABLE
LANGAGE DE CONTROLE
CREATE VIEW
ALTER ….
GRANT
...
REVOKE
COMMIT WORK
LANGAGE DE MANIPULATION DE DONNEES ROLLBACK WORK
SELECT
INSERT
UPDATE
DELETE
88
EXEMPLE DE BASE DE DONNEES
89
Création de table
CREATE TABLE <nom_table>
(<def_colonne> * [<def_contrainte_table>*]) ;
< def_colonne > ::= <nom_colonne> < type > [CONSTRAINT nom_contrainte <
NOT NULL |
UNIQUE |
PRIMARY KEY |
CHECK (condition) |
REFERENCES nom_table (colonne) > ]
90
Exemple de création de table
CREATE TABLE RDV(
NumRdv Integer,
DateRDV Date,
NumDoc Integer,
NumPat Integer,
Motif Varchar(200),
CONSTRAINT Clé_Primaire_RDV PRIMARY KEY (NumRdv),
CONSTRAINT Référence_DOC FOREIGN KEY (NumDoc) REFERENCES
DOC,
CONSTRAINT Référence_PAT FOREIGN KEY (NumPat) REFERENCES PAT);
L'association d'un nom à une contrainte est optionnelle. Ce nom peut être utilisé
pour référencer la contrainte (ex: messages d'erreurs).
91
Index, modification du schéma
• Création d’index
– CREATE [UNIQUE] INDEX nom_index ON nom_table (<nom_colonne> * );
• Suppression
– DROP TABLE <nom_table>
– DROP INDEX <nom_index>
• Modification
– ALTER TABLE <nom_table> ADD COLUMN <def_colonne>
– ALTER TABLE <nom_table> ADD CONSTRAINT <def_contrainte_table >
– ALTER TABLE <nom_table> MODIFY <def_colonne>
– ALTER TABLE <nom_table> DROP COLUMN <nom_colonne>
– ALTER TABLE <nom_table> DROP CONSTRAINT <nom_contrainte >
• Exemples
– CREATE INDEX Index_date_RDV ON RDV (DateRDV) ;
– ALTER TABLE RDV ADD COLUMN Commentaires varchar(300);
– ALTER TABLE RDV ADD CONSTRAINT MotifNN NOTNULL(Motif);
92
LMD : Langage de Manipulation des Données
93
Insertion de données : INSERT
INSERT INTO < nom_table >
[( attribute [,attribute] … )]
{VALUES (<value spec.> [, <value spec.>] … ) |
<query specification>} ;
• Exemples :
– INSERT INTO DOC VALUES (1, ‘Dupont’, ‘Paris’);
– INSERT INTO DOC (NumDoc, NomDoc) VALUES (2, ‘Toto’);
– INSERT INTO PAT (NumPat, NomPat, VillePat)
SELECT NumDoc, NomDoc, VilleDoc FROM DOC;
94
Mise à jour : UPDATE
SYNTAXE :
UPDATE <relation_name>
SET <attribute> = value_expression [, <attribute> =
value_expression ] …
[WHERE <search condition> ];
EXEMPLES :
Mettre “Inconnue” quand VilleDoc n’est pas renseignée
UPDATE DOC SET VilleDoc = “Inconnue” WHERE VilleDoc IS NULL
95
Suppression : DELETE
SYNTAXE :
DELETE FROM <relation_name>
[WHERE <search_condition>];
EXEMPLES :
Supprimer les docteurs quand VilleDoc n’est pas renseignée
DELETE FROM DOC WHERE VilleDoc IS NULL
96
SELECT : forme générale
avec
::= < = > <>
Remarques:
<liste_de_valeurs> et <liste_de_tuples> peuvent être déterminés par une requête
<tuple> ::= (<nom_colonne> [,<nom_colonne>]…)
98
Projections et restrictions simples
99
Restrictions complexes et jointures
Liste des patients ayant un RDV avec le docteur "Dupont" NomPat
SELECT DISTINCT PAT.NomPat FROM PAT, RDV, DOC
WHERE PAT.NumPat = RDV.NumPat and RDV.NumDoc = DOC.NumDoc
and DOC.NomDoc like “dupont”;
100
Requêtes imbriquées : IN et EXIST
Liste des patients ayant un RDV avec le docteur "Dupont" NomPat
SELECT DISTINCT P.NomPat FROM PAT P, RDV R, DOC D
WHERE P.NumPat = R.NumPat and R.NumDoc = D.NumDoc and D.NomDoc = “Dupont”;
101
Calculs d'agrégats
Les fonctions d’agrégation (Count, Sum, Avg, Min, Max) permettent de
réaliser des calculs sur des ensembles de données
103
Union/Intersection/Différence
<requêteSQL_A>
UNION | INTERSECT | EXCEPT
CORRESPONDING précise que l’intersection se fait sur
[ALL] le nom des colonnes et non sur leur position…
105
Des différences selon le SGBD…
GROUP BY Y Y Y
HAVING Y Y Y
UNION Y Y Y
INTERSECT N N Y
EXCEPT N N Y (MINUS)
CORRESPONDING BY N N N
106
Jointure Interne / Externe
Produit cartésien
<join_type> ::= (INNER JOIN avec clause toujours vrai)
FULL [OUTER]
…LEFT… UNION…RIGHT…
107
Méthodologie SQL
108
Évaluation « sémantique » d’une requête SQL
1. FROM
Réalise le produit cartésien des relations
2. WHERE
Réalise restriction et jointures
3. GROUP BY XXX
ZZZ
4. HAVING XXX
XXX
AGG1
ZZZ AGG3
5. SELECT
AGG1 XXX
Réaliser les projections/calculs finaux
AGG3 ZZZ
6. ORDER BY
Trier les tuples résultat AGG1 ZZZ
AGG3 XXX
109
Utiliser l’algèbre relationnelle
• En s’entraînant un peu, il semble plus facile d’écrire une requête en algèbre puis de
la traduire en SQL
– Cette traduction s’effectue de manière systématique et peut générer des expressions un
peu ‘lourde’. Toutefois, elle permet de bien comprendre la requête
– Certaine requêtes ne peuvent s’exprimer en algèbre
(Ex: contenant des calculs d’agrégats, groupements)
Toutefois, on peut souvent en exprimer une partie en algèbre…
– La traduction des opérateurs d’algèbre est assez simple (excepté pour la division)
110
Traduction des divisions : double négation
• On veut diviser R(A1,...,Ap,...,An) • La logique sur un exemple…
par Q (A1, ..., Ap)
• Nom des docteurs qui ont prescrit
• Et obtenir S (Ap+1, ....., An) tous les médicaments
• NomDoc,NumMed(DOC VIS ORD
Select Ap+1, ...., An from R R1 MED) % NumMed MED
where not exists ( • Equivalent à: Nom des docteurs
select * from Q tels qu’il n’existe pas de
where not exists ( médicaments tel qu’il n’existe pas
select * from R R2 de prescription de ces
where R2.A1 = Q.A1 médicaments faites par ces
and R2.A2 = Q.A2 docteurs
and ....
SELECT NomDoc,
and R2.Ap = Q.Ap FROM DOC WHERE NOT EXIST(
and R2.Ap+1 = R1.Ap+1 SELECT * FROM MED WHERE NOT EXIST(
SELECT * FROM VIS, ORD
and .... WHERE DOC.NumDoc=VIS.NumDoc AND
and R2.An = R1.An )) VIS.NumVis=ORD.NumVis AND
ORD.NumMed=MED.NumMed
)
);
111
Comprendre le schéma et les questions
• Avant de se lancer dans l’écriture d’une requête, il faut bien
comprendre le schéma des tables sur lequel on va s’appuyer
• Si le schéma est complexe, il faut le dessiner, c.a.d. dessiner
les tables et les relations entre ces tables
• En lisant la question, on repère sur le schéma dans quelle(s)
relation(s) se trouve chaque donnée. On a alors une idée des
tables mises en jeu
• Si la question est complexe, il faut la reformuler et/ou la
décomposer.
• Une fois ce travail effectué, on peut commencer a écrire du
SQL.
112
Vérifier les clauses de jointure
• Il est assez facile d’oublier une clause dans les
prédicats de sélection, surtout lorsque l’on joint
plusieurs tables.
• Pour le vérifier, une règle simple pour les requêtes
plates (nécessaire mais non suffisante) :
– Une requête impliquant n tables doit posséder au moins (n-
1) prédicats de jointure (outre les prédicats de sélection).
113
Reformuler les questions : se rapprocher de la BD
• Paraphrasage :
– En exprimant de manière plus détaillée une requête, elle devient plus
claire... (ou plus facilement exprimable)
114
Reformuler les questions négatives
• Souvent l’inverse de la requête est plus facile à exprimer. Cela est particulièrement
vrai lorsque la requête contient :
• Que
– Dans quelle ville n’y a-t-il QUE des patients de plus de 40 ans?
– Toutes les villes (où il y a au moins un patient de plus 40 ans), moins les villes où il y a un
patient de 40 ans ou moins
• Aucun
– Dans quelle ville n’y a-t-il AUCUN patient de plus de 40 ans?
– L’ensemble des villes, moins celles où il y a au moins un patient de plus de 40 ans
• Tous (conduisant à une division relationnelle…)
– Quels sont les patients qui ont RDV avec TOUS les médecins
– Les patients pour lesquels il n’existe pas de docteur avec qui ils n’ont pas de RDV
• Tous
– Quels sont les patients dont TOUS les motifs de rendez vous sont « mal de tête »
– L’ensemble des patients qui ont un RDV pour un « mal de tête », moins les patients qui ont
un RDV pour un motif différent de « mal de tête »
115
Décomposer les questions complexes
116
Vérifier les instance de tables à impliquer
• Il faut parfois utiliser plusieurs instances de la même table
Comment savoir?
• Lorsqu’une même table est utilisée pour obtenir deux informations de
‘sémantique différente’ (2 instances différentes d’entité)
il faut prendre plusieurs instances de cette table
• Exemple :
Nom des patients ayant eu des RDV avec les docteurs "Dupont" et "Durand"
PAT (P)
119
Tester les requêtes (2)
• Exemple 1 : Les couples de parents ayant au moins deux enfants?
– Dans la base de test il faut avoir :
• des couples de parents qui ont 1, 2 et 3 enfants
• et des parents seuls (ayant 2 et 3 enfants)
• Exemple 2 : Producteurs qui ne voient que les films qu’ils produisent
– Les producteurs qui voient au moins 1 film qu’ils produisent, moins ceux qui voient au
moins 1 film qu’ils ne produisent pas
Réponse :
SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom = S.Nom
MINUS
SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom != S.Nom
Est-ce correct ?
– Dans la base de test il faut avoir :
• un producteur qui ne voit aucun film
• un producteur qui ne voit que des films qu’il produit
• un producteur qui voit des films qu’il produit et d’autres
• Attention, cette base n’est pas forcément suffisante....
120
Tester les requêtes (3)
SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom = S.Nom
MINUS
SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom != S.Nom
SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom = S.Nom
SELECT DISTINCT P.Nom FROM Producteur P, Spectateur S WHERE P.Titre = S.Titre AND P.Nom != S.Nom
Producteur.Titre
Un spectateur
Producteur.Nom Spectateur.Nom Spectateur.Titre
voit le film du
Nom1 Titre1 Nom1 Titre1
Nom1 Titre1 Nom2 Titre1
producteur…
Nom2 Titre2 Nom1 Titre1 Resultat =
Nom2 Titre2 Nom2 Titre1
Le 2ème membre devrait être: SELECT Nom,Titre FROM Spectateur MINUS SELECT Nom,Titre FROM Producteur
121
Programmation SQL
122
Programmation SGBD: objectif
• Comment passer une commande dans la base telle que :
PROCEDURE COMM
Si le client n’est pas encore dans la base
Insérer les informations du client dans la table client
Si l’article est disponible dans la quantité commandée
ET le livreur disponible à la date de livraison désirée
Insérer sa commande dans la base
Sinon abandonner la commande
123
Programmation SGBD: outils
• Utiliser un langage « SGBD » propriétaire (fourni par l’éditeur)
– Ex: PL/SQL Oracle, PL/pgSQL (PostgreSQL), T-SQL (SQLServer), …
– Extension de SQL à des éléments de programmation procédurale
• Instructions conditionnelles, itérations, variables, etc.
• Utiliser un langage traditionnel
– Qui appelle des API Propriétaires fournies par l’éditeur 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 l’éditeur du SGBD
– Qui appelle des API indépendantes du SGBD
• SQL-CLI (Call Level Interface)
• Popularisé par les médiateurs ODBC, JDBC
– Embedded SQL (générateur de code + API propriétaires)
• 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
• Précompilation : le source (ex: C+SQL) …
… est transformé en code compilable (ex: C pur)
• Suivi d’une compilation classique (ex: C pur)
124
Solution 1 : exemple de PL/SQL Oracle
• Structure d’un bloc PL/SQL Oracle:
– Bloc de déclaration de variables:
DECLARE
<liste des variables utiles au programme>
BEGIN
<liste d’instructions du programme PL/SQL>
[ EXCEPTION
<instructions exceptionnelles> ]
END;
/
125
Types et variables PL/SQL
• Déclaration des variables dans le bloc declare
– Types SQL de base : CHAR, NUMBER, DATE... + type BOOLEAN
– Typage explicite ou implicite (avec table.col%TYPE)
– Type Curseurs (cf. plus loin) : pour parcourir le résultat d’une
requête SQL
DECLARE
maVar VARCHAR2 DEFAULT ‘ROUGE’;
maVar Personne.nom%TYPE; -- type de l’attribut concerné
maVar Personne%ROWTYPE; -- type RECORD
maVar MonCurseur%ROWTYPE; -- type RECORD
• Affectation de valeur
– Dans toutes les sections avec l’opérateur := maVar := 2;
126
Structures de contrôle PL/SQL
• Traitement conditionnel
IF condition THEN traitement1
[ELSIF condition THEN traitement2]
[ELSE traitement3]
END IF;
• Itérations
WHILE condition LOOP
traitement
END LOOP;
LOOP
traitement
EXIT WHEN condition END LOOP;
127
Curseurs PL/SQL : utilisation
• Résultat d’une requête SQL géré comme un fichier
– Déclaration: DECLARE
CURSOR monCurseur IS requête_SQL;
– Manipulation:
• Commandes : OPEN, FETCH, CLOSE
• Utilisation des attributs de curseur : %NOTFOUND, %ISOPEN …
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;
128
Curseurs PL/SQL : utilisation simplifiée
• Dans la pratique
– Déclaration implicite du curseur
– Déclaration implicite de l’enregistrement récepteur
– Ouverture et fermeture du curseur implicites
– Ordre de lecture pas à pas fetch implicite
– Condition de sortie implicite
BEGIN
FOR tuple IN
(SELECT Nom, Salaire FROM employes WHERE NumDept = 10)
LOOP
.........
END LOOP;
END;
129
Curseurs PL/SQL : exemple
• Augmente de 5% le salaire des employés du service
compta…
DECLARE
BEGIN
FOR Emp IN (SELECT nom, salaire FROM Employe WHERE service =
‘comptabilité’) 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;
END LOOP;
END;
130
D’autres fonctionnalités importantes
• Exceptions
– Levées par le SGBD
– Définies par le programmeur PL/SQL
• Procédure et fonctions
– Stockées sous forme compilée dans la BD (objet de la base)
– soumise aux mécanismes de sécurité ou de confidentialité
• Partagées par plusieurs applications et utilisateurs
• à condition d’avoir le privilège EXECUTE
• Packages
• Regroupement de procédures, fonctions, exceptions dans
un objet de la BD
131
Solution 2 : exemple de Java/JDBC
132
Architecture logicielle de JDBC
• Chaque BD utilise un pilote (driver) qui convertit les requêtes
JDBC dans le langage natif du SGBD
Programme Java indépendant du SGBD cible
Applications multi-bases possibles Ensemble de classes et
d’interfaces Java
Java Appli/Applet
API
JDBC
JDBC DriverManager
API du
Driver
JDBC
Driver(pont) driver Driver driver
JDBC-ODBC JDBC JDBC SGF local
pour pour
driver Oracle Sybase Implémentation
ODBC des interface
protocole Propriétaire JDBC fournies par
protocole Propriétaire Fichier les éditeurs SGBD
Oracle Sybase
Oracle Sybase
133
Exemples d’utilisations de JDBC
• Dans un client léger classique
API
JDBC
Applet
Driver
JDBC BD
API JDBC
Driver
Clients JDBC Serveur
136
Les fonctions de JDBC
• Fonctions de bases • Fonctions avancées
– Charger le/les pilotes – Exceptions JDBC
– Se connecter à la base de – Accès aux méta-données
données • Du résultat
– Créer une instruction • De la base de données
• SQL statique, – Exécution de
• appel à procédure stockée, • requêtes précompilées
• précompilée et paramétrée • requêtes paramétrées
– Exécuter l’instruction • procédures stockées
• LMD de consultation, – Exécution par lots (batch)
• LDD et LMD de mise à jour, – Utilisation de curseurs
• procédures stockées – Transactions
– Traiter le résultat – Extension standard (javax.sql)
• Gestion de l’objet ResultSet
– Fermer les différents éléments
137
Conclusion : programmation SGBD
• Les langages de type PL/SQL constituent le mode
d'utilisation le plus courant des bases de données
relationnelles
– Utilisé pour programmer des procédures stockées
– Utilisé pour programmer des triggers
– Performant (réduit le transfert réseau)
– Bien adapté aux clients légers (ex: smartphones…) car déporte
des traitements sur le serveur
• Les programmes SGBD écrits dans des langages de
programmation classiques sont utilisés
– pour programmer des traitements sur un serveur d’application
(J2E)
– Pour programmer des applications de présentation
– Peuvent être indépendantes du SGBD (JDBC/ODBC) ou dédiées
(API dédiées, exemple de ICOLIB en annexe)
138
Parenthèse utile au TP:
Le dictionnaire de données Oracle
139
Contenu du Dictionnaire Oracle
• Dictionnaire Oracle = tables systèmes en lecture seule
• Evolution du dictionnaire
– Généré au moment de la création de la DB
– Mis à jour automatiquement
• Structure
– Tables de base = tables fondamentales contenant les informations sur la BD
• Conservées dans le tablespace SYSTEM
– Vues de ces tables = présentation dépendant du rôle de celui qui consulte…
140
Utilisation du dictionnaire
• Accès avec SQL
141
Différentes vues
TABLE_NAME COMMENTS
----------------------------------------------------------------
ALL_CONSTRAINTS Constraint definitions on accessible tables
DBA_CONSTRAINTS Constraint definitions on all tables
USER_CONSTRAINTS Constraint definitions on user's own tables
3 rows selected.
• La vue ‘DICTIONARY’ permet d’accéder aux noms/desc. des vues DBA, ALL, USER, V$...
142
Les vues USER
• Description des objets logiques créés par l’utilisateur
connecté
– Objets logiques = tables, index, vues, triggers, procédures…
SQL> SELECT table_name
• Exemples de vues USER_ > FROM dictionary
> WHERE table_name LIKE '%USER_%';
– USER_TABLES
• Tables créées par l’utilisateur TABLE_NAME
------------------------------
– USER_INDEXES …
USER_VIEWS
• Index créés par l’utilisateur USER_HISTOGRAMS
– USER_CONSTRAINTS 115 row(s) selected.
• Contraintes créées par l’utilisateur
– USER_VIEWS
• Informations sur les vues créées par l’utilisateur
– USER_USERS
• Information sur l’utilisateur
143
Les vues ALL
• Ces vues décrivent
– les objets créés par l’utilisateur connecté (comme dans user_tables)
– Et aussi tous les objets accessibles à cet utilisateur
Dans user_tables Dans all_tables
SQL> desc user_tables; SQL> desc all_tables;
Nom Nom
------------------------------ ------------------------------
TABLE_NAME … OWNER …
… TABLE_NAME …
…
144
Les vues DBA
• Décrivent tous les objets de la base
– Sur certains objets, la description est plus complète
• Accessibles qu’aux utilisateurs
– Ayant le rôle SELECT_CATALOG_ROLE
– Ou ayant le privilège système SELECT ANY DICTIONARY
• Ex. La vue DBA_TABLES
1 row(s) selected.
145
Les vues dynamiques V$
• Vues dont les informations sont «dynamiques»
– Evoluent du démarrage de l’instance jusqu’à son arrêt
– Décrivent l’activité de la DB et de l’instance
– Sont appelées «dynamiques» mais
• en fait, elle externalise l’état de variables internes à Oracle
• Ex. V$Session
SQL> SELECT sid, serial#, username, type, status
> FROM v$session;
TO_CHAR(SYSDATE,'DD-MM-YYYY HH24:MI')
-------------------------------------
23-02-2004 22:05
89456/562
----------
159.174377
147
Exercice 3 et exercice 4 (OracleXE)
• Installer OracleXE
• Exercice 3
– Nous utiliserons une BD basée sur le MCD de l’ex. 1
– Créer les tables en SQL
– Charger des données (utilisation de sqlloader)
– Modifier certaines données en SQL
• Exercice 4
– Interroger la base en SQL
148
Fonctionnalités SGBD
Focus sur l’optimisation
Exécution embarquée
Exécution distribuée
(sur une étude de cas)
150
L’approche ‘‘Bases de données’’
I- Indépendance
Physique
VI - Gestion de la
cohérence
151
I - Indépendance Physique
152
Modélisation Relationnelle
Docteurs Prescriptions
Id-D Nom Prénom Id-V Ligne Id-M Posologie
1 Dupont Pierre 1 1 12 1 par jour
2 Durand Paul
Visites
1 2 5 10 gouttes
Id-D Id-P Id-V Date Prix
3 Masse Jean 2 1 8 2 par jour
1 2 1 15 juin 250
…. …….. …… 2 2 12 1 par jour
1 1 2 12 août 180
2 3 3 2 gouttes
2 2 3 13 juillet 350
…. …. …. …………
2 3 4 1 mars 250
Patients
Id-P Nom Prénom Ville Médicaments
1 Lebeau Jacques Paris Id-M Nom Description
2 Troger Zoe Evry 1 Aspegic 1000 ……………………………..
3 Doe John Paris 2 Fluisédal ……………………………..
153
II - Indépendance Logique
Les applications peuvent définir des vues logiques de la BD
2 Fluisédal …………………………….. 20
Patients
3 Mucomyst …………………………….. 230 Id-P Nom Prénom Ville Médicaments
1 Lebeau Jacques Paris Id-M Nom Description
…. …….. …………………………….. ….. 2 Troger Zoe Evry 1 Aspegic 1000 ……………………………..
3 Doe John Paris 2 Fluisédal ……………………………..
Docteurs Prescriptions
Id-D Nom Prénom Id-V Ligne Id-M Posologie
1 Dupont Pierre 1 1 12 1 par jour
2 Durand Paul
Visites
1 2 5 10 gouttes
Id-D Id-P Id-V Date Prix
3 Masse Jean 2 1 8 2 par jour
1 2 1 15 juin 250
…. …….. …… 2 2 12 1 par jour
1 1 2 12 août 180
2 3 3 2 gouttes
2 2 3 13 juillet 350
…. …. …. …………
2 3 4 1 mars 250
Patients
Id-P Nom Prénom Ville Médicaments
1 Lebeau Jacques Paris Id-M Nom Description
2 Troger Zoe Evry 1 Aspegic 1000 ……………………………..
3 Doe John Paris 2 Fluisédal ……………………………..
154
…. ……. ……. ……. …. …….. ……………………………..
Avantages de l’indépendance logique
• Syntaxe (aperçu !)
Select <Liste de champs ou de calculs à afficher>
From <Liste de relations mises en jeu>
Where <Liste de prédicats à satisfaire>
Group By <Groupement éventuel sur un ou plusieurs champs>
Order By <Tri éventuel sur un ou plusieurs champs>
156
Exemple de question SQL (1)
157
Exemple de question SQL (2)
158
Exemple de question SQL (3)
159
IV – Gestion des vues
• Les vues permettent d’implémenter l’indépendance
logique en permettant de créer des objets virtuels
• Vue = Question SQL stockée
• Le SGBD stocke la définition et non le résultat
• Exemple : la vue des patients parisiens
Create View Parisiens as (
Select Nom, Prénom
From Patients
Where Patients.Ville = ’Paris’ )
160
Les vues : des relations virtuelles !
Le SGBD transforme la question sur les vues
en question sur les relations de base
Question Q
sur des vues
Gestionnaire
de Vues
Question Q’
Définition des sur les relations
vues de base
Docteurs Prescriptions
Id-D Nom Prénom Id-V Ligne Id-M Posologie
1 Dupont Pierre 1 1 12 1 par jour
2 Durand Paul
Visites
1 2 5 10 gouttes
Id-D Id-P Id-V Date Prix
3 Masse Jean 2 1 8 2 par jour
1 2 1 15 juin 250
…. …….. …… 2 2 12 1 par jour
1 1 2 12 août 180
2 3 3 2 gouttes
2 2 3 13 juillet 350
…. …. …. …………
2 3 4 1 mars 250
Patients
Id-P Nom Prénom Ville Médicaments
1 Lebeau Jacques Paris Id-M Nom Description
2 Troger Zoe Evry 1 Aspegic 1000 ……………………………..
3 Doe John Paris 2 Fluisédal ……………………………..
161
Les vues : Mise à jour
• Non définie si la répercussion de la mise à jour vers la
base de données est ambiguë
– ajouter un tuple à la vue calculant le nombre de
médicaments ?
• Restrictions SQL (norme):
– Pas de distinct, d’agrégats, ni d’expression
– La vue contient les clés et les attributs « non nulls »
– Il y a une seule table dans le from
– Requêtes imbriquées possibles
– Certains SGBDs supportent plus de mises à jour
• Clause « With check option »
– Le SGBD vérifie que les tuples insérés ou mis à jour
correspondent à la définition de la vue 162
Les vues : Les instantanés (snapshot)
• Instantané, Snapshot, vue concrète, vue matérialisée
– matérialisée sur le disque
– accessible seulement en lecture
– peut être réactualisé
• Exemple
– create snapshot Nombre_Médicaments as
Select Id-M, Nom, Description, count(*)
From Médicaments M, Prescriptions P
Where M.Id-M = P.Id-M
refresh every day
• Objectif principal : la performance
163
V – Exécution et Optimisation
Patients Patients
Id-P Nom Prénom Ville Id-P Nom Prénom Ville
1
2
3
Lebeau
Troger
Doe
Jacques
Zoe
John
Paris
Evry
Paris
1
2
3
Lebeau
Troger
Doe
Jacques
Zoe
John
Paris
Evry
Paris
4 Perry Paule Valenton 4 Perry Paule Valenton
165
Projection
Patients Patients
Id-P Nom Prénom Ville Id-P Nom Prénom Ville
1
2
3
Lebeau
Troger
Doe
Jacques
Zoe
John
Paris
Evry
Paris
1
2
3
Lebeau
Troger
Doe
Jacques
Zoe
John
Paris
Evry
Paris
4 Perry Paule Valenton 4 Perry Paule Valenton
166
Jointure
Patients Visites
Id-P Nom Prénom Ville Id-D Id-P Id-V Date Prix
1 Lebeau Jacques Paris 1 2 1 15 juin 250
2 Troger Zoe Evry 1 1 2 12 août 180
3 Doe John Paris 2 2 3 13 juillet 350
4 Perry Paule Valenton 2 3 4 1 mars 250
Select
From
Patients.Nom, Patients.Prénom
Patients, Visites
Where Patients.Id-P = Visites.Id-P
and
and
Patients.Ville = ’Paris’
Visites.Date = ’15 juin’
Patients Visites
168
Plan d’exécution optimisé
Patients Visites Patients Visites
169
VI - Intégrité Logique
170
Contraintes d’intégrité
• Avantages :
– simplification du code des applications
– sécurité renforcée par l'automatisation
– mise en commun des contraintes, cohérence
• Nécessite :
– un langage de définition de contraintes d'intégrité
– la vérification automatique de ces contraintes
BD BD
171
Exemples de contrainte
• Contraintes d’intégrité référentielles
Docteurs Prescriptions
Id-D Nom Prénom Id-V Ligne Id-M Posologie
1 Dupont Pierre 1 1 12 1 par jour
2 Durand Paul
Visites
1 2 5 10 gouttes
Id-D Id-P Id-V Date Prix
3 Masse Jean 2 1 8 2 par jour
1 2 1 15 juin 250
…. …….. …… 2 2 12 1 par jour
1 1 2 12 août 180
2 3 3 2 gouttes
2 2 3 13 juillet 350
…. …. …. …………
2 3 4 1 mars 250
Incohérence possible...
Etat cohérent Etat cohérent
Begin Commit
Transaction
Begin
CEpargne = CEpargne - 3000
CCourant = CCourant + 3000
Commit T1
174
Atomicité et Durabilité
ATOMICITE DURABILITE
Panne
Begin Begin
CEpargne = CEpargne - 3000 CEpargne = CEpargne - 3000
CCourant = CCourant + 3000 CCourant = CCourant + 3000
Commit T1 Commit T1
Crash disque
175
VIII - Partage des données
BD
BD
177
IX – Confidentialité
• Objectif :
– protéger les données de la base contre des accès non autorisés
• Mécanismes simples et puissants
– Connexion restreinte aux usagers répertoriés (mot de passe)
– Privilèges d'accès aux objets de la base (relation, vue, etc.)
• Repose sur la sécurité de l’architecture (de bout en bout)
BD
Serveur
Utilisateur BD
178
Droits d'accès : Syntaxe de base et rôles
• Syntaxe de base
– Grant <droits> on <objet> to (<usager>*) [with grant option]
– Revoke <droits> on <objet> from (<usager>*)
– <droits> ::= all | select | insert | delete |update | alter
– <objet> ::= relation | vue | procedure
– <usager> ::= public | nom d'usager
• Rôles (SQL3):
– Create role <nom_role> : Création d’un nouveau rôle
– Drop role <nom_role> : Suppression d’un rôle
– Les instructions Grant et Revoke s’appliquent sur des rôles
– Grant <liste roles> to (<usager>*) : Affectation de rôles aux usagers
– Set role <liste_roles> : Activation de rôle(s) pendant une session
179
Droits d'accès : droits sur les vues
Employés Public
180
X - Standardisation
• L’approche bases de données est basée sur plusieurs
standards
– Langage SQL (SQL1, SQL2, SQL3)
– Communication SQL CLI (ODBC / JDBC)
– Transactions (X/Open DTP, OSI-TP)
181
Applications traditionnelles des SGBD
182
Applications des SGBD (1)
• BD et WEB
– Serveurs Web dynamiques, sites marchands ...
– Plusieurs profils (OLTP, publication d’informations en ligne,
hébergement de données…)
• Challenges majeurs
– Gestion de données XML
– Fédération de sources de données hétérogènes
– Grilles de données
– Sécurité des données en ligne
183
Applications des SGBD (2)
• BD personnelles ou PME
– Comptabilité
– Agenda, comptes bancaires, carnet d’adresses, dossiers
portables
– BD embarquées sur calculateurs ultra-légers (PDA,
téléphones cellulaires, cartes à puce…)
• Challenges majeurs
– Gérer la mobilité
– S’adapter aux contraintes matérielles du calculateur hôte
– Assurer la durabilité des données
– Assurer la confidentialité des données
184
Architecture des SGBD
• Les architectures physiques de SGBD sont très liées
au mode de répartition
– BD centralisée
– BD client/serveur
– BD client/multiserveurs
– BD répartie
– BD hétérogène
– BD mobile
185
Historiquement : architecture centralisée
• Des terminaux clients
– sans intelligence, passifs
• Un réseau
Terminaux passifs • Un ordinateur central
– grande puissance (‘mainframe’)
réseau
– Maintient la base et les applis
SGBD
Mainframe
données
réseau
serveur
SGBD
code données
SQL
SQL • Un réseau
• Des serveurs
ODBC ODBC – Et des bases différentes
SQL SQL
SGBD 1 SGBD 2
SGBD 1.2
SGBD 1.1
code données
code données
Source 2 :
Source 1 : serveur Web
SGBD
code données
code données
serveur
SGBD
code données
Interface
Analyseur sémantique
Optimiseur
Moteur d’exécution
Opérations relationnelles
Système opérationnel
192
Problème de l’optimisation
• Un problème global
– Touche l’ensemble des acteurs (pas seulement l’éditeur…)
Select
From
Where
Optimisation
193
194
Ex. 9 jointures
Coût
Objectifs de l’optimisation
• Objectif de l’optimiseur : trouver le meilleur plan …
– Donnant les résultats le + vite ….
• Optimisation pour le temps de réponse (response time)
– Minimisant la consommation de ressources
• Optimisation du travail total (Total work)
– Minimisant le temps de délivrance des premiers tuples
• Optimisation de la latence (Latency / First tuples …)
• Qui optimise ?
– Idéalement 2 requêtes équivalentes même plan, le meilleur !
Seuls les concepteurs de SGBD doivent maîtriser l’optimisation
– Pratiquement, ce qui conduit à des plans différents
• 2 modèles conceptuel/physiques différents (d’un même problème)
• 2 opérations sémantiques équivalentes (série de requêtes SQL différentes)
• 2 requêtes SQL équivalentes
Le concepteur et le programmeur BD jouent un rôle majeur
195
196
• Attention :
– Surcoût lors des mises à jour !
– Des fois un accès par index est plus coûteux !
196
197
197
198
Plan d’exécution optimisé
Select Patients.Nom, Patients.Prénom
From Patients, Visites
Where
and
Patients.Id-P = Visites.Id-P
Patients.Ville = ’Paris’
and Visites.Date = ’15 juin’
Patients Visites Patients Visites
198
199
Optimisation Physique …
Jointure
– Nested Loop Join ?
– Index Join ?
–
Hash Join ?
Sélection
– FTS (Full Table Scan) ?
– Index Scan (B+tree) ?
Patients Visites – Index Scan (Bitmap) ?
199
200
Algorithmes de jointure
• Nested loop Join : Jointures par boucle imbriquées
– Pour chaque visite, parcourir les patients
• Index Join : Utilisation d’index sur une des relations
– Pour chaque visite, retrouver le patient grâce à l’index
• Sort Merge Join
– Trier les visites sur le N° de patient
– Trier les patients sur le N° de patient
– Fusionner les deux tables triées (jointure ‘à deux doigts’)
• Hash Join
– Hacher les patients sur le N° de patient
– Pour chaque visite, calculer la valeur de hachage et chercher
dans la table de hachage le patient correspondant
200
201
Optimiseur heuristique
• L’optimisation est indépendante des données
– Dépend uniquement de la requête SQL…
• Exemple d’heuristiques classiques
– Effectuer les sélections en premier
– Ajouter un maximum de projections
– Utiliser tous les indexes disponibles
– Utiliser les ‘meilleurs’ algorithmes de jointure, dans l’ordre
1. Hash join
2. Sort merge join
3. Nested Loop join avec index
4. Nested loop join
• Conclusion
– L’ordre des opérations dépends de l’expression SQL
• Ex = ordre des jointures déterminé par leur ordre d’apparition
– Présent dans Oracle = Rule Based Optimizer (RBO)
201
Optimisation basée coût
• Dépend des caractéristiques des données
• Présent dans Oracle (Cost Based Optimizer ou CBO)
• Plus efficace que le RBO !
Graphe d'opérations Schéma interne
Plans d'exécution
(espace de recherche)
Bibliothèque de
Générateur de
transformations
Plans
Statégie de Heuristiques
Recherche
de choix
Modèle de coût
Plan d'exécution
Optimal
202
Difficultés de l’optimisation basée coût
• Espace de recherche (plans candidats)
– Plusieurs algorithmes pour chaque opérateur
– Coûts et comportement différents
– Plusieurs ordonnancement pour les opérations binaires
• Sans considérer les algorithmes, il y a 1620 ordres possibles pour
joindre 5 relations, et 17 milliards pour 10 relations !
Utilisation d’heuristiques et de programmation dynamique
203
204
Les statistiques
• Possibilité d’histogrammes
– RunStat(<Table>, <attribut>) construction et stockage d’un
histogramme de variation de l’attribut dans la table.
– Utilisation par le modèle de coût
– Sinon, hypothèse d ’uniformité
• Exemple :
– Personnes ayant un salaire entre 2K€ et 4 K€ ?
20%
– Personnes ayant 2 véhicules ?
15%
– Personnes ayant 2 véhicules et un salaire entre 2 et K4 K€?
3% ? Non !
En fait, 14%
15%
20%
Qualité de l’optimisation
1. Qualité du schéma physique
– Indexes
– Partitionnement, placement
– Configuration
2. Qualité de l'optimiseur (heuristique/coût)
– Qualité du modèle de coût utilisé
– Qualité de la stratégie de recherche de l'optimiseur
3. Qualité de l’administration
– Qualité des traces ou indicateurs générés par le système
– Qualité des outils d'aide à l'administration
– Qualité de l’administrateur !
4. Qualité des développeurs d’application ? 205
206
206
Oracle : Automatic SQL Tuning
Statistiques Index Mauvaises
SQL Profile
manquantes manquants constructions SQL
Requête SQL
207
208
208
Exécution et optimisation de
requêtes en environnement
contraint
209
Un peu d’histoire sur le dossier portable sécurisé (1)
210
Un peu d’histoire sur le dossier portable sécurisé (2)
2000 • PicoDBMS
– Moteur de SGBD embarqué supportant tous les opérateurs de l’algèbre
relationnelle
Droits d’accès = vues multi-tables définiées par des requêtes de
sélection/projection/jointure/agrégat
2002 • MODS (MasterCard Open Data Storage)
– Définition d’une API standard pour dossier portable
• VSDB project (Very Small Data Base)
2004 – Politecnico di Milano (Bolchini, Schreiber, Tanca)
– NOR FLASH, pas de jointure ni d’agrégat
• Delite (Database for Embedded Lightweight system)
2005 – IIT Bombay (Sen, Ramamritham, Rao)
211
Un peu d’histoire sur le dossier portable sécurisé (3)
2007 • GhostDB
– BD partitionnée entre un serveur public traditionnel et un serveur privée
embarqué (BD en mode READ ONLY)
Certaines colonnes privées sont stockées dans un SGBD portable
• Microsearch
2010 – Moteur de recherche embarqué dans des objets intelligents (capteurs,
composant personnels sécurisés)
• MiloDB
2013 – SGBD relationnel embarqué sur des composants embarqués à grand
capacité de stockage
– Supporte tout l’algèbre relationnel
2015 • PlugDB
– Web personnel sécurisé : serveur Web personnel addossé à un composant
sécurisé matériellement doté d’un moteur SGBD garantissant les règles de
partage édictées par le propriétaire
? • Folk-IS : vers un composant sécurisé sans infrastructure
2016
– Sans infrastructure : pas de réseau Internet, pas de serveur d’identités…
?
– Requêtes distribuées : utilisant les déplacements des personnes et leur
interactions avec des terminaux pour évaluer des requêtes distribuées 212
Resource constrained data management
• Goal: manage personal data at the extremity of the Internet
– Within sensors collecting data, in secure & personal user devices
– Potentially large data collections
• e-mails, medical records, official forms (admin., bank…), digital histories of interactions with e-
services (Amazon, Telcos…) or physical systems (transport, smart homes, …)
– Query functionalities must be embedded to compute authorized results
• Outline
– Target hardware platforms
– Problem statement
– The general framework to solve the problem
– Representative proposals: search engine & SQL queries
213
Target hardware
Sensors equipped with flash memory cards
Personal memory devices Secure devices on which
Personal in which a secure chip is implanted a GB flash chip
• Common architecture
MCU
– Microcontroller
Low cost (sensors)
BUS
Tamper resistance [SC02]
Miniaturization, protective layers (carrying signal),
NAND
Multi-Layering (hide sensitive lines), FLASH
Sensors (light/temp/power/freq.)
prevent the chip from physical attacks
– GBs of memory
• NAND FLASH (dense, robust, low cost)
214
Severe hardware constraints
… with a strong impact on data management
• Microcontrollers
– Small RAM (<128 KB)
RAM is not dense
Favor pipeline query evaluation
(many) indexes
– Security is linked with size
• NAND FLASH
– High cost of random writes Data structures and strategies…
Pages are erased before write … must avoid random writes
Erase by Block vs. write by Page
215
Existing Techniques
• Light & embedded versions of DBMS products
– e.g., SQLite, BerkeleyDB, DB2 Everyplace, …
– Target small but powerful devices (e.g., smart phones, set top boxes)
Not compliant with very small RAM & not adapted to NAND Flash
216
Existing Techniques (cont.)
• Flash aware implementations of key-value stores
– SkimpyStash [SIG11], LogBase [VLDB12], SILT [SOSP11]
• A log structure in FLASH is used to store the key-value pairs
• An index is maintained in RAM to index that log (~1B per key-value pair)
Incompatible with small RAM
• Data management techniques for MCUs
– Proposals consider small amounts of (internal) memory
• PicoDBMS [VLDBJ01], VSDB [TOIS03], HybridStore [WSN13]
Exploit byte writes accesses (EEPROM, NOR) specific to certain kinds of MCUs
– Recent proposals consider large Flash memory Details next
RDBMS: GhostDB [SIG07], PBFilter [IS12], MiloDB [DAPD14]
Search engines: MAX [TSN08], Snoogle [TPDS10], Microsearch [TECS10]
217
Problem statement
• Problem : execute queries with a very small RAM
on large volumes of data stored in NAND FLASH
Evaluate queries
Increase RAM consumption
with a small RAM
Pipeline strategy Reduce cost
218
General (implicit) framework to solve the problem
219
First illustration: embedded search engines
• Answer IR queries
– For a set of query keywords, produce the N most relevant documents
(according to a weight function like TF-IDF)
• Inverted index
– Stores triples (keyword, docid, weight)
– Used at query time to retrieve all triples containing a query keyword
• Search algorithm
– The inverted index is accessed for each query keyword
– In RAM: one container is allocated per retrieved docid… too much!
– …used to aggregate the triples for one docid, and compute its TFIDF
– The N documents with the highest scores are returned
220
Tan et al. [TECS10]
How to store the inverted index sequentially ?
hash table
Index triples
H1
H1 (keyword, weight, docid)
H2
H2
RAM H3 17 The hash table stores the address of the last
H3 26
bucket written in Flash;
Buckets are chained in Flash to speed up keyword
search.
Inverted index
…
Log structures
FLASH Documents
docid=7 docid=9 docid=21 docid=23
doc2 doc4
221
Tan et al. [TECS10]
How to evaluate search queries in pipeline?
hash table
Documents ids are generated in increasing order H1 56
H2 40
H3 43
… …
Addr 14 Addr 17 Addr 25 Addr 26 Addr 40 Addr 43
… …
t2,1,2 t2,1,20 t2,1,25 docid sorted (desc.)
t2,1,3 t1,5,7 t2,2,21 t1,3,21 t2,2,28 t1,1,25
t2,1,5 t1,1,9 t2,1,23 t1,1,23 t2,3,30 t1,5,28
(hash value H3)
Addr 14 Addr 17 Addr 25 Addr 26
Sorted on CUS.id
JI
Sorted on ORD.id
JI
Sorted on CUS.id
…
Lyon t70 …
…
t70 Jim … Lyon
…… …
Positive access 1 page of «Keys» … …
… … … …
Tom… Lyon
…
… …
…… … …
t90
…
Lyon t90
P78
search ‘Lyon’ & return tuples pointers … …
Summary Scan Table scan
(17 IOs) (640 IOs)
224
[DAPD14]
Scalability timely reorganize the index
…to transform it into a more efficient index
Keys
Reorganization process:
…
Lyon
…
t20
Sequential index Temp. Only uses log structures
B.Filters Lyon t30
P2
… Logs Background / interruptible
… …
Sum2
…
…
Lyon
Sorted run1 Ex: Sequential index B-Tree like
Sum16 P16 … t50
1) Sort the (key, pointer) pairs
… … Sorted run2
…
Temp. logs (sorted “runs”)
Sum68
… …
Sum78 P68 … …
… Lyon t70 result written seq.: «Sorted Keys»
…
… t90 2) Build a key hierarchy
Lyon
P78
…
…
B-Tree like index No need of temporary Logs
K1 result is written seq.: «Tree»
K2
… Result: efficient B-Tree like index
…
…
… how to evaluate
t90 t70 t50 t30 t20
Lyon
SQL queries in pipeline?
Log:
«Sorted keys» … Log: «Tree»
…
Kn
225
[SIG07, DAPD14]
How to evaluate SQL queries in pipeline ?
SELECT CUS.*, ORD.*, LIN.*, PARTSUP.*
FROM CUSTOMER CUS, ORDER ORD, LINETEM LIN, PARTSUP PS, SUPPLIER SUP
WHERE CUS.CUSkey = ORD.CUSkey AND ORD.ORDkey = LIN.ORDkey AND
LIN.PSkey = PS.PSkey AND PS.SUPkey = SUP.SUPkey AND
CUS.Mktsegment = 'HOUSEHOLD' AND SUP.Name = 'SUPPLIER-1'
LIN
root Tselect on
of the tuples it refers to in
the subtree
{LINid , CUSid,
ORDid, PSid}
table SUP.Name
Tjoin on LIN Tjoin
Tselect on access
ORDid
PARid
LINid
SUPid
CUSid
PSid
CUS.marketsegment
Tjoin on LIN {LINid}
K1
K2
… Intersect
ORD PS …
… merge
… Tselect Tselect
…
access access
Kn ‘HOUSEHOLD’ ‘SUPPLIER-1’
CUS PAR SUP
‘HOUSEHOLD’ ‘SUPPLIER-1’ NB: Tselect returns
sorted row ids!
Tselect on CUS.Mktsegment Tselect on SUP.Name
226
Conclusion
• Encouraging results
– Efficient search engines
– Efficient SQL queries
• Remaining challenges
– Extend the principles to other data models
• XML, time series, spatial-temporal data, noSQL & key-value
stores, etc.
– A general co-design approach is still missing
• How to calibrate the HW (RAM) to data oriented treatments ?
• How to adapt to dynamic variations of the HW parameters ?
227
Exercice 5
• On souhaite développer une application d’analyse des
ventes
• Traitements:
– L’analyste souhaite avoir une application lui permettant de
consulter la liste des clients de sa base avec pour chacun la
somme totale dépensée pour ses achats
• Base de données:
– Une base de données (relationnelle) contient la liste des
clients, de commandes, les détails des articles commandés,
des produits, des fournisseurs
• Proposition pour réaliser le traitement:
– Un programme JDBC qui interroge la BD et affiche la liste
des clients avec la somme totale dépensée
228
Proposition : code Java/JDBC
Int prix = 0
Pour chaque client
Pour chaque commande
Pour chaque article
SI : Il s’agit bien d’un article de cette commande
ET d’une commande de ce client
ALORS : prix += prix de cet article
Affiche: les informations sur ce client et le prix
prix:=0
fin du programme
Ce traitement sera-t-il performant ?
Proposer une solution alternative plus performante
Quel peut être le gain potentiel (sans toucher à la BD) ?
229
Exercice 6
• On souhaite accélérer la requête suivante:
(requete avec 3 sélections peu selectives)
• Voici des informations chiffrées sur les données
231
Présentation de l’étude de cas
• Contexte :
– Exécution distribuée de requêtes SQL incluant des fonctions
‘chères’ et manipulant des objets volumineux (BLOB’s)
• Problèmes :
– Optimisation de ces requêtes
– Exécution efficace
232
Exemple : Architecture
Client
Brasilia
server
Rio Paris
server Distributed Query server
Processing
Function
(CP)
233
Exemple : Description des sites
• Site de Rio:
– Table P contenant les pollutions mesurées :
P(regId:int, date:int, value:double, …)
• Site de Paris:
– Fonction CV permettant de calculer la couverture végétale sur une image
raster.
function CV(Blob) double
234
Example : Programme (1)
Donne moi les regions ayant un indice de pollution dépassant 1.5 et un
indice de couverture végétale de moins de 0.3
Brasilia
server
Rio Paris
server Distributed Query server
Processing
Function
(CP)
235
Example : Programme (2)
SELECT P.regId, CP(P.value), CV(V.image) FROM P, V
WHERE P.regId = V.regId and
CP(P.value) > 1.5 and
CV(V.image) < 0.3
Brasilia
server
Rio Paris
server Distributed Query server
Processing
Function
(CP)
236
Exemple : Paramètres
Name Description Value
CardP Cardinality of relation P 300 tuples
DistP Number of distinct pollution measurements in P 150 measurements
CardV Cardinality of relation V 50 tuples
DistV Number of distinct images in V 50 images
CardV P Cardinality of the result of V join P 200 tuples
DistP_V P Number of distinct pollution measurements in V join P 100 measurements
DistV_V P Number of distinct images in V join P 40 images
ImgTrans Average image transfer time (with a 1Mb/s network bandwidth) 100 s
CostCP Average per tuple cost of function CP 30 s
CostCV Average per tuple cost of function CV 200 s
pp Average selectivity for predicate p p (CP (P. value) > 1.5) 0.5
pv Average selectivity for predicate p v (CV (V. image) < 0.3) 0.8
237
Le problème
Paris
Dimensions:
pv
Traitement distribué
Transfert de d’objets volumineux (Blobs)
CV Function
Execution répétée de fonctions très
coûteuses
Images
Legend
60 N: Naïve execution
DT: Delayed Transfer only
C: Caching only
50
DTC: Delayed Transfer + Caching
ALL: Delayed Transfer + Caching +
40 BackgroundTransfer
Analyse de groupe
Computing function CP
30 Solution de l’étude de cas
Computing function CV
Network transf er time
20
10
0
D…
D…
D…
D…
D…
D…
D…
D…
D…
D…
A…
A…
A…
A…
A…
C4
C5
C1
C2
C3
N4
N3
N5
N1
N2
240
Sécurité des SGBD
Focus sur les droits d’accès
• Confidentialité
– Seules les personnes autorisées ont accès aux ressources
• Intégrité
– Les ressources du SI ne sont pas corrompues
• Disponibilité
– L’accès aux ressources du SI est garanti de facon
permanente
• BD: les ressources sont les données de la BD + traitement
activables sur les données
• Et dans certains contexte
– Auditabilité, imputabilité
242
Besoins de protection (1)
• Omniprésence des bases de données
– Grands systèmes d’information (publics ou privés)
– BD PME
– BD personnelles (agenda, carnet d’adresses, bookmarks …)
– BD "ambiantes" (capteurs, aware home …)
245
Exemples d’attaques connues de SGBD
• Attaque à l’anonymat
• Attaques de BD statistiques
• Injection de code SQL (exercice)
• Attaques de bases Oracles
– Oracle Unbreakable
– Origines des failles connues
• Etc…
246
Attaque à l’anonymat
247
Quelques exemples marquants:
croisement de données publiques
« The data within the report is compiled from thousands of different sources that
include government, property, and other public record repositories. » 250
Attaque contre des BD statistiques (1)
• Base de données statistique
– Permet d'évaluer des requêtes d'agrégation
• totaux, moyennes, etc.
• Ex. La requête « quelle est la moyenne du taux de leucocytes des patients
ayant plus de 30 ans ? » est permise
– Mais pas les requêtes qui dérivent des infos particulières
• Ex. La requête « quel est le taux de leucocytes de Dupont ? » est interdite
• Ex. de base de données 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
...
251
Attaque contre des BD statistiques (2)
• Exemple d’attaque simple :
– U veut découvrir le taux de Leucocyte de Dubois
– U sait que Dubois est un adhérent masculin de la MGEN
• Requête 1 • Requête 2
SELECT COUNT ( Patient ) SELECT SUM ( Leucocyte )
FROM Analyse FROM Analyse
WHERE H/F =’H' WHERE H/F =’H'
AND Mutuelle =’MGEN' ; AND Mutuelle =’MGEN' ;
Résultat : 1 Résultat : 3500
• Requête 4 • Requête 6
SELECT COUNT ( Patient ) SELECT SUM ( Leucocyte )
FROM Analyse FROM Analyse
WHERE NOT ( H/F =’H' WHERE NOT ( H/F =’H'
AND Mutuelle =’MGEN’ ) ; AND Mutuelle =’MGEN’) ;
Résultat: 9 ; 10 - 9 = 1 Résultat : 50800 ; 54300 –
50800 = 3500
• Conséquence :
– Le système doit aussi refuser de répondre à une requête pour laquelle la
cardinalité du résultat est inférieure à N - b
– N est la cardinalité de la relation initiale
253
Attaque contre des BD statistiques (4)
• Problème :
– On peut montrer que limiter les requêtes à celles pour lesquelles le résultat a
une cardinalité c telle que b c N - b n'est pas suffisant pour éviter la
compromission
– Exemple : si b = 2, les requêtes auront une réponse si c est telle que 2 c 8
• Requête 8
• Requête 7
SELECT COUNT ( Patient )
SELECT COUNT ( Patient )
FROM Analyse
FROM Analyse
WHERE H/F =’H'
WHERE H/F =’H' ;
AND NOT (Mutuelle =’MGEN’) ;
Résultat : 6
Résultat : 5
• Conséquence
– U peut déduire qu'il existe exactement un patient masculin qui a la MGEN
comme mutuelle,
– Il s’agit de Dubois, puisque U sait que cette description correspond à Dubois
254
Attaque contre des BD statistiques (5)
• Conséquence (suite)
– Le taux de Leucocyte de Dubois est facilement découvert de la façon
suivante :
• Requête 9 • Requête 10
SELECT SUM ( Leucocyte ) SELECT SUM ( Leucocyte )
FROM Analyse FROM Analyse
WHERE H/F =’H' ; WHERE H/F =’H'
AND NOT (Mutuelle =’MGEN’) ;
Résultat : 30300
Résultat : 26800 ; 30300 - 26800 = 3500
255
Les attaques de bases Oracle
• peu nombreuses jusqu’à récemment
– plus de serveurs Web que de bases Oracle
– connaissance d’Oracle limitée
– difficile d’obtenir une version d’Oracle
– bases souvent protégées par un firewall
256
Protection : Solution Oracle ?
257
Attaques : origines des failles...
• Bug constructeur (corrigés 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 buffer overflow
– Si un paquet contient plus d’1 Ko de données, le OL plante
– Dans certains cas, ça génère 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)
• Bug configuration (pd de paramètres)
– 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 d’Oracle, système d'exploitation, chemins vers les
logs, options du Listener (Ex. option security), environnement complet (variables système) dans
lequel Listener a été lancé
– Pour se protéger : Activer l'option security dans OL, utilisation d’une authentification forte,
etc.
• Bug architectural (pb de conception de l’appli)
• Etc.
258
DBMS : qui attaque ?
• Pirate externe Pirate
externe
– capable de s’infiltrer 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 accès
Pirate
à une partie des données utilisateur
– suivant le mode de chiffrement, il a
accès à certaines clés Pirate
administrateur
• Pirate administrateur (DBA)
– employé peu scrupuleux ou pirate Client C1
(journal)
– peut espionner le SGBD pendant Serveur BD
l’exécution 259
Principales défenses
260
Plan de la suite
9 - Législation
1 - Authentification
2 - Sécurisation des communications
3 - Autorisations
4 - Chiffrement de la BD
5 - Audit
8 – Anonymisation
0- Tolérance aux pannes
261
9 - Législation
• Protection juridiques
• Suivies par les SGBD hippocratiques
262
Data Protection Directive 95/46/EC
263
Data Protection Directive 95/46/EC
264
Face à la réalité (ex 1: consentement)
265
Face à la réalité (ex 2: anonymisation)
266
1 - Authentification
SGBD
BD
268
Des bonnes pratiques connues…
• Choix des « logins »
– Craquage d'un système bancaire US …
269
2 - Chiffrement des communications
• Technologie éprouvée
– ex: SSL, y compris par carte à puce
• Techniques cryptographiques
– Confidentialité et intégrité des messages
– Non répudiation des transactions 270
Confidentialité et intégrité des messages
SGBD
BD
Ecoute
Interception
Altération
Rejeu
271
Chiffrement et signature
• Exemple
– Sous Oracle, utilisation de Oracle Advanced Security
• Chiffrement (avec OAS)
– Chiffrement de bout en bout
• Chiffrement symétrique
• Supporte AES
– Pas de chiffrement des données stockées
• Signature
– Pour éviter des manipulations des données lors de la transmission
– Message Digest Value
272
5 - Audit
273
Objectifs de l’audit
• Sécurité
– Identifier les usages illicites
• Utilisateurs cherchant à outrepasser leurs droits (inférences),
Injection SQL ou Attaque d’un Cheval de Troie (dump), Pertes de
données suspectes (suppressions), etc.
– Identifier les données / comptes compromis
– Tracer des usages exceptionnels (ex: bris de glace)
– Vérifier la conformité d’un usage (ex: prise de décision
médicale)
• Performance
• Amélioration organisationnelle, financière, etc.
274
Comment auditer ?
• L’audit du SGBD peut concerner les objets de la base
– Tables, vues, index, procédures, etc.
– Créations, modification, destruction, mises à jour, etc.
… et toutes les actions systèmes
– Connections à la base, attribution des privilèges, etc.
• Tout peut être audité
– Problème: le volume et l’exploitation de l’audit…
• Moyens:
– Audit par des déclencheurs (triggers)
– Audit en utilisant la commande AUDIT, peuplant la table
d’audit du SGBD
275
Audit par Triggers
• Triggers crées par l’administrateur BD/sécurité
– Déclenchés sur des événements « systèmes » (LOGON,
CREATE, DROP…)
• Localité de l’événement contrôlable (dans un schéma, etc.)
– Déclenchés sur des événements « objets » (INSERT,
DELETE, UPDATE)
• Avantages: faible volume, analyse ciblée
– choix fin des actions à auditer, activation à la demande
• Limites: certaines actions son difficiles à auditer
– Ex: auditer les requêtes (SELECT)
276
Le mode AUDIT du SGBD
• Les actions auditées sont stockées:
– Dans une table du SGBD (Oracle: SYS.AUD$)
– Dans un fichier de l’OS (permet l’audit de plusieurs bases)
• Actions auditables:
– Les connexions à la base
– Les actions qui affectent un type d’objet (table, rôle, etc.)
– Les actions qui affectent un objet (table EMP)
… Aussi bien pour les actions réussies et non réussies
• Activer / désactiver l’audit:
– ALTER SYSTEM SET audit_trail=db,extended scope=spfile;
• Puis redémarrer l’instance Oracle…
– NOAUDIT ALL;
277
Utilisation de la table d’audit
• Table d’audit Oracle:
– SYS.AUD$ du tablespace SYSTEM
• L’archiver et la purger périodiquement:
– Privilège DELETE_CATALOG_ROLE
• Pour consulter l’audit:
– L’interroger en SQL la table SYS.AUD$
– Utiliser les vues de l’audit_trail
• DBA_AUDIT_OBJECT,
• DBA_AUDIT_STATEMENT,
• DBA_AUDIT_SESSION,
• etc…
278
Types d’audit
• Audit de connexion
– Audite chaque tentative de connexion:
Ex: AUDIT SESSION [WHENEVER [NOT] SUCCESSFUL];
– Résultat de l’audit: SYS.AUD$, DBA_AUDIT_SESSION
• Audit des actions
– Audite chaque tentative d’action d’un certain type
Ex: AUDIT CREATE TABLE; AUDIT ROLE;
AUDIT CONNECT; AUDIT DBA; …
• Résultat de l’audit: SYS.AUD$, DBA_AUDIT_STATEMENT
• Pour arrêter l’audit: commande NOAUDIT
Ex: NOAUDIT CREATE TABLE, NOAUDIT ROLE; …
• Audit des objets
– Audite un objet particulier (par session, ou par accès)
Ex . AUDIT INSERT ON EMP; AUDIT DELET ON COM BY SESSION
– Résultat de l’audit: SYS.AUD$, DBA_AUDIT_OBJECT
279
Conclusion sur l’audit
• Contrôler le volume et le contenu de la table d’audit
• Limiter le droit de supprimer dans la table
– Attention au DBA et à tous les utilisateurs ayant le privilège
DELETE_CATALOG_ROLE
• Toute actions ou tentative d’action sur la table d’audit
peut être auditée elle aussi
280
8 – Anonymisation de données
Skip…
281
Donnée personnelle vs anonyme
• Définitions
– Une donnée personnelle est reliée à un individu
– Une donnée est dite anonyme si elle ne peut pas, de
quelque manière que ce soit, être reliée à un individu donné
• Application à une base de données
– Des enregistrements (tuple) anonymes ?
282
Intérêt « industriel » pour l’anonymat
• Calculs statistiques sur des données personnelles
– Intérêt commercial évident…
– Marketing et publicité (profilage)
– Compagnies d’assurance et banque (évaluation du risque,
tarification des contrats)
– Santé, recherche (études épidémiologiques), etc.
• Mais des difficultés (au moins pour l’Europe)…
– 1) Obtenir le consentement de l’usager
– 2) L’informer du traitement statistique, etc.
… qui ne se posent pas si les données personnelles
sont rendues « anonymes »…
– Car ces données n’entrent pas dans le champ de la loi
(depuis 2004) 283
Anonymisation : le principe
Individus
Serveur de Serveur de
confiance statistiques
284
284
Anonymisation : les techniques
• Pseudonymat: remplace les identifiants par des pseudonymes
– Hachage (cryptographiques) des identifiants
– Conservation des colonnes sensibles utiles
• k-anonymat: cache chaque individu dans une classe de k individus
– Généralisation et suppression des quasi-identifiants
– Conservation des colonnes sensibles utiles
• l -diversité: diversifie les valeurs sensibles des classes
– Complète le k-anomymat
– Contrôle les valeurs sensibles présentes dans chaque classe
• t-fermeture: contrôle la distribution des valeurs sensibles
– Complète le k-anonymat et la l-diversité
– Contrôle la distribution des valeurs sensibles dans les classes
• Garantie différentielle de l’anonymat
– Ajoute de bruit
– Assure qu’un résultat anonyme change très peu avec ajout d’1 individu supplémentaire
• Suivi de cohorte
– M-invariance: les résultats successifs pour une population restent anonymes
285
Le pseudonymat…
• Base du pseudonymat
– Retirer les identifiants et les remplacer par un pseudo
Identifiants
(ID)
290
Le k-anonymat garantit que…
• Un individu donné est toujours associé à
au moins k individus participants au jeu anonyme
– C’est-à-dire à tous ceux appartenant à une même classe
– Par exemple: « Sue » est associée à au moins 3 tuples du
jeu 3-anonyme
291
291
… mais ne garantit pas tout
• Il n’y a pas de contrôle sur les valeurs des attributs
sensibles associées dans une même classe de taille k
– On peut donc avoir moins de k valeurs sensibles par classe
– Voire même une seule valeur sensible !
• Exemple:
– L’individu « Pat » est bien relié à une classe de taille 3…
… mais tous les individus de cette classe ont le même Diag !
Activity Age Diag
Name Activity Age Diag
"Teacher" [24, 27] Cancer
Pat "MC" 27 Cancer
"Teacher" [24, 27] Cancer
"Teacher" [24, 27] Cancer
[4] N.Li, T. Li, S. Venkatasubramanian. t-closeness: Privacy beyond k-anonymity and l-diversity. In IEEE
23rd International Conference on Data Engineering, 2007.
295
Suivi de cohorte
• Objectif: produire successivement dans le temps un jeu de
données anonymes correspondant à un groupe d’usagers
(cohorte), pour voir comment les données évoluent
• Problème: les mises à jour des données (suite à un
changement de valeurs sensibles ou à l’entrée ou la sortie d’un
individu dans le groupe) permettent de dé-anonymiser…
– Example
=> Sachant que Bob est toujours dans la cohorte, on connait son Diag…
296
Introduction de bruit
• Résolution par introduction de données factices
• La m-Invariance [5]
– Les données ne doivent pas (trop) varier d’une version à la version suivante
299
La garantie différentielle d’anonymat (3)
• Des algorithmes d’anonymisation offrent ce type de garanties
– Ex: (a, b)algorithm [14] [14] Vibhor Rastogi, Dan Suciu and Sungho Hong, The Boundary
between privacy and utility in data publishing, in VLDB 2007
• Problème:
– Le système ne peut plus fournir de résultats précis après un certain
nombre de requêtes
– L’analyste qui a consommé toutes ses requêtes est bloqué 300
Conclusion sur l’anonymat
• Très important pour l’industrie
– Permet de calculer des statistiques
– En sortant de la régulation sur les données personnelles
• De nombreuses techniques
– Pseudonymat
• Une phase incontournable mais très insuffisante
• Garanties d’anonymat très faibles voire inexistante
– k-anonymat, l-diversité, t-fermeture
• Le k-anonymat empêche la dé-anonymisation des tuples par jointure sur les
quasi-identifiants
• Le k-anonymat est préconisé aux USA
• Il ne garantie pas la dé-anonymisation des attributs sensibles
• Une famille de techniques complète les garanties d’anonymat
… mais réduisent fortement l’usage
– Difficile d’assurer l’anonymat pour des versions successives
• Ou conduit à dégrader très fortement l’usage… 301
Transactions
Concurrence d’accès
Pannes
Transactions distribuées
Exercice: concurrence dans OracleXE
Rollback
Begin Commit
Transaction
Séquence d'instructions d’un programme de base de données
encadrée par un ordre de début et de fin de transaction faisant
passer la base d’un état cohérent à un état cohérent.
Begin
CEpargne = CEpargne - 3000
CCourant = CCourant + 3000
Commit T1
Aucune opération ne peut être exécutée hors transaction
(transactions chaînées). Une transaction peut se terminer par
une validation (Commit) ou un abandon (Rollback)
303
Les propriétés ACID
• Problèmes liés aux transactions :
– Concurrence d’accès
– Violation de la cohérence
– Pannes
BD
• de transaction : ex. annulation
• du système : ex. crash serveur
• de media : ex. perte du disque
• de communication : ex. défaillance réseau
304
Problème de la concurrence d’accès
305
Isolation : définition du problème
• Scénario 1 :
– Joe consulte son compte (lectures) au moment où sa banque le crédite de 500 euros (écritures)
Blocker le crédit ? Le montrer à Joe ?
• Scénario 2 :
– Joe retire 200 euros (écritures) au même moment où sa banque le crédite de 500 euros (écritures)
Blocker le crédit ? Ne pas le perdre !
• Scénario 3 :
– Une analyse des ventes (lectures) est faite dans un supermarché alors que les caisses sont ouvertes
(écritures)
La lecture ne doit pas bloquer les caisses !
• Scénario 4 :
– Les places de la finale de la coupe du monde sont mises en vente sur Internet le lundi à 8h (conflits
massifs)
conflits massifs !
• Scénario 5 :
– Réservation 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 données
306
Exécution sans contrôle
• Absence de contrôle Scénario 2 – Perte d’opérations
– Perte d’opérations
T1 (Joe) T2 (banque)
– Observation d’incohérence
– Introduction d’incohérence Begin
– Lectures non reproductibles Lire CCx
Begin
Lire CCx
Protocole de concurrence x = x + 500
But: éviter les problèmes Ecrire X CC
et rester performant Commit T2
x = x –200
Ecrire X CC
• A base de verrouillage: Commit T1
– Verrou en lecture : partagé
– Verrou en écriture : exclusif temps
307
Protocole de Verrouillage à 2 Phases
verrous
T
Lecture Ecriture
Lecture
Ecriture
temps
• Règle 1 : verrouillage
– Avant d'accéder à une donnée D, une transaction doit acquérir un
verrou sur D. Si D est déjà verrouillée dans un mode non
compatible, la transaction attend.
• Règle 2 : deux phases
– Dès qu'une transaction relâche un verrou, elle ne peut plus acquérir
de nouveau verrou
• Verrouillage 2 phases stricts
– Les verrous sont gardés jusqu’au commit
308
Optimisation des transactions
• L'objectif, en termes de performances, est de réduire :
– les blocages : une transaction est bloquée en attente d’un verrou
– les inter-blocages : un ensemble de transactions s’attendent
mutuellement
T1 T2
• Solutions existantes T3 T4
– Degrés d’isolation
– Protocoles multiversions
– Modification des données / programmes
309
Degrés d'isolation SQL – normalisés SQL2
• Objectif: accroître le parallélisme en autorisant certaines
transactions à violer la règle d'isolation
• Degrés standardisés SQL2
(Set Transaction Isolation Level)
– Degré 0 (Read Uncommitted)
• Lecture de données sales – Interdiction d’écrire.
• Ex. lecture sans verrouillage
– Degré 1 (Read Committed)
• Lecture de données propres – Ecritures autorisées
• 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 requête non reproductible (fantôme)
310
Degrés d'isolation SQL : exemples
T1(°0, Read uncommited) T2(°3, serializable) T1(°1, Read commited) T2(°3, serializable)
T1(°2, Repeatable read) T2(°3, serializable) T1(°2, Repeatable read) T2(°3, serializable)
Begin
Begin Begin Select count(*) from Voit
Lit CC ( 100) where couleur="rouge"
Lit CC ( 100) Begin
Ecrire CC, CC+10 Insert into Voit
Lit CC ( 100) bloque values (R4, "rouge")
Commit
Lit CC ( 100) Select count(*) from Voit
Commit where couleur="rouge"
Ecrire CC, CC+20 Commit
311
Protocoles multiversions (Oracle)
• Objectif : faire cohabiter sans blocage des transactions conflictuelles
en les faisant travailler sur différentes versions des données
313
314
314
Tolérance aux pannes
315
0 –Tolérance aux pannes
316
La tolérance aux pannes
• Types de pannes qui peuvent survenir…
– Abandons de transaction (transaction failure)
– Pertes de la mémoire vive (system failure)
– Perte du disque (media failure)
317
Pannes potentielles et but de la reprise
• Abandon de transaction (trans. failure)
– Levée d’une contrainte d’intégrité
Éliminer les effets de
– Choix de l’utilisateur l’exécution partielle de
– Plantage de l’application client la transaction
– Problèmes de concurrence
• Verrous mortels (verrouillage)
• Retard de transaction (estampillage)
Transaction 1 Transaction 2
A solde1
Défaire
A A - sur disque A solde
Solde1 A AA+
Solde A
Commit
A Solde2 Chronologie
AA+
Solde2 A
Commit
Assurer l’Atomicité
319
Défaillance de site
Plantage Terminal 2
Terminal 1 serveur
Panne de Terminal 3
courant
Base de données
AA+
Solde2 A
Commit
Terminal 3
Crash disque
Base de données
AA+
Solde2 A
Commit
Assurer la Durabilité
321
Tolérer l’abandon de transaction
• Objectif
– Éliminer les effets de l’exécution partielle de la transaction
• Mise en œuvre
– Effacer la mémoire de la transaction abandonnée (son cache)
• Ne plus rien reporter sur disque de ses effets en cache
– Retirer les effets de la transaction sur disque
• Si aucune modification reportée sur disque Rien à faire…
• Sinon
– Remplacer les valeurs modifiées par leur valeur avant modification
– Retirer tous les objets ajoutés par la transaction
• Cela suppose
1 Pendant la transaction: Garder l’historique des valeurs avant
modification par la transaction
2 Au commit : Ajouter sur disque les pages modifiées*
et faire un commit atomique
*peut être effectué avant le commit de façon asynchrone 322
Abandon utilisant le journal avant
• Pour retirer du disque les effets de la transaction abandonnée
– Journal avant
• Fichier séquentiel stockant les valeurs avant mise à jour de chaque objet modifié
• Mise à jour d’un objet par la transaction écriture de sa valeur avant modification
• Le journal est ensuite utilisé pour défaire les mises à jour reportées sur disque
Écrit page
Images avant
Lit page
Lit page
modification
Mémoire
secondaire
Base de données
323
Tolérer la défaillance de site
• S’appelle aussi la reprise à chaud…
– Perte du contenu de la mémoire vive
• But
– Rétablir les effets des transactions validées avant la panne
– Annuler les effets des transactions non validées
• Mise en œuvre
– Défaire les effets présents sur disque des transactions non validées
• Aucune modification reportée sur disque rien à faire…
• Sinon défaire avec le journal d’images avant
Journal avant en mémoire secondaire (support persistent) !
Mémoire de la transaction
Mises à jour
Écrit page
Lit page
Lit page
Défaire Refaire
Mémoire
secondaire Base de données
• Utilisation : on part du début du journal, on refait les transactions validées dont les effets ne
sont pas sur disque
325
Conclusion sur l’utilisation des journaux
• Abandon de transaction
– Journal avant : défait les effets sur disque de la transaction
• Utile si on reporte le cache de la transaction sur disque avant validation
• Peut être en RAM
• Il n’est plus utile une fois la transaction validée
• Il contient donc les image avant de chaque transaction non validée
• Reprise à chaud
– Journal avant : pour défaire
• Utile si on reporte le cache de la transaction sur disque avant validation
• Doit être en mémoire persistante
– Journal après : pour refaire
• Utile si on ne reporte pas le cache de la transaction après validation
• Doit être en mémoire persistante
• Il n’est plus utile une fois tous les effets de la transaction reportés sur disque
• Il contient donc les images après de chaque transaction non reportée
La gestion du cache détermine l’existence des journaux
326
Politiques de gestion de cache
• Détermine l'instant du report sur disque des pages modifiées
– STEAL (resp. NO_STEAL)
• Des pages modifiées par des transactions non validées peuvent être reportées sur
disque
Lit page
Lit page
– Une partie des effets de la
transaction est dans la base
Gérer sur disque un mini-journal
temporaire d’images avant pour
défaire la transaction… Mini-journal
Base de données (temp.)
Mémoire de la transaction
WAL
Lit page
Lit page
Steal
Journal avant
Mémoire
secondaire Base de données
Mémoire de la transaction
Mises à jour
Force log
Lit page
Lit page
Commit
Journal après
Mémoire
Base de données secondaire
• No-force
– Mises à jour pas forcément reportées dans la base après le commit
Refaire les mises à jour commises (journal après)
Lit page
Défaire Refaire
Panne après commit Panne avant commit
Mémoire
secondaire Base de données
331
Tolérer la défaillance de mém. 2ndaire
• S’appelle aussi reprise à froid…
– Perte du contenu de la mémoire persistante
Lit page
Journal
avant Journal après
Défaire Refaire
Mémoire
Base de données
secondaire
332
Algorithme de reprise à froid
• Performances: utilisation de « backup »
(ie, points de reprise ou « checkpoints »)
– Recharger la base avec le dernier « backup »
– Refaire les transactions validées du journal redo log (image après)
• NB: le backup peut être réalisé à partir du redo log…
Réduit la taille
sur disque du
Sauvegarde du journal
journal après Journal après
Force Log at Commit
Chronologie
Disponible? Disponible!
Sauvegarde de
la BD
Pour
reconstruire
plus vite…
Base de données
333
Conclusion sur la journalisation
• Journaux : qu'y trouve t-on ?
– Identifiant de la transaction
– Identifiant de l'enregistrement de la BD
– Valeur avant
– Valeur après
• Défaire
– Lecture de la fin vers le début du journal des images avant
– On défait toutes les transactions non commises
– Garantir l‘Atomicité des transactions
• Refaire
– Lecture du début vers la fin du journal des images après
– On refait toutes les transactions validées
– Garantir la Durabilité 334
Vrai ou faux ?
• Le concept de transaction (ACID) n’est nécessaire que dans le cas où il y a
plusieurs utilisateurs Faux (même pour I!)
336
Tolérance aux pannes dans Oracle (2)
• Les Rollback Segments
« switch »
Sauvegarde du
journal après
– Cohérente
• Respecte les règles d'intégrité…
• Comment définir et implanter les contraintes ) voir la suite
– Isolée
• Seules les mises à jour validées sont visibles
• Contrôle de concurrence (verrouillage, estampillage, versionning, …)
– Durable
• Les mises à jour validées ne peuvent jamais être perdues
• Tolérance aux pannes (journal après, checkpoint, …)
339
Transactions distribuées
340
Protocoles
transactionnels distribués
341
Verrou Mortel Distribué
• La majorité des SGBD sérialisent les transactions grâce à un protocole
de verrouillage deux phases
• Chaque site est capable de détecter un verrou mortel local
• Un contrôle externe est indispensable pour détecter un verrou mortel
intersites
T1 T2
SITE 1 SITE 2
T3
SITE 3
342
Résolution du Verrou Mortel Distribué
1) PREVENTION
- Garantir que le problème ne survient jamais
- Combinaison de verrouillage et d'estampillage des transaction (marque
des tuples avec un numéro croissant lors des mises à jour)
2) DETECTION
- Construction d'un graphe d'attente global par union des graphes
d'attente locaux
- En cas de cycle, abandon d'une des transactions du cycle
3) PRESOMPTION
- Annulation des transactions n'ayant pas terminé leur exécution après un
certain délai (timeout)
- Solution normalisée
343
Atomicité globale
• Garantir qu'un ensemble de mises à jour sur plusieurs sites est
totalement exécuté ou pas du tout
• Nécessite un protocole de validation atomique (ACP)
• Exemple: transfert d'argent entre deux comptes gérés par deux
agences bancaires distinctes
Commit (Ti) DB
site A
Serveur
débit(C1,M) site B
Application crédit(C2,M)
DB
Serveur
Commit (Ti)
344
Validation à 2 Phases (2PC)
Coordinateur :
Le composant système du site qui centralise et pilote le protocole
Participant :
Le composant système d'un site qui participe à l'exécution de la
transaction
345
Cas Favorable
COORDINATEUR
PARTICIPANT PARTICIPANT
PREPARE PREPARE
346
Cas Défavorable (1)
COORDINATEUR
PARTICIPANT
PARTICIPANT
PREPARE PREPARE
READY KO
ABORT ABORT
ACK
ACK
347
Cas Défavorable (2)
COORDINATEUR
PARTICIPANT PARTICIPANT
PREPARE PREPARE
READY READY
COMMIT COMMIT
ACK
??
COMMIT
ACK
348
Cas très défavorable (3)
COORDINATEUR
PARTICIPANT PARTICIPANT
PREPARE PREPARE
READY READY
?? ??
349
Normalisation (nécessaire)
Protocoles OSI-TP et X/Open DTP
Interopérabilité :
OSI-TP définit un protocole de validation TM TM
à 2 phases standard permettant à différents
gestionnaires de transactions de coopérer
pendant la validation d'une transaction protocole OSI-TP
Portabilité : AP
350
Protocole OSI-TP
• Standard Open Systems Interconnect de l'ISO [ISO92]
• Objectifs :
351
X/OPEN DTP
• Modèle de référence pour Distributed Transaction Processing [1993]
• Objectif: étendre une sphère transactionnelle à tout type de serveur (SGBD
ou non) et assurer la portabilité de tous les composants d'un
environnement transactionnel
Serveur RPC L
o
Application g
BeginTrans Ok
SGBDR
Begin Commit L
update Trans o
Ok g
update
TID
Commit
Commit
Ok
Transaction
Manager
352
Modèles de réplication
• Règles de correction :
– Sérialisabilité à une copie (one-copy serializability)
• objets physiques = copies d'un même objet logique
• Une exécution de transactions sur des objets physiques est
sérialisable à une copie si elle est équivalente à une exécution
sérialisable de ces mêmes transactions sur les objets logiques
correspondants
– Convergence des copies (eventual consistency)
• En l'absence de nouvelles mises à jour, toutes les copies d'un même
objet finissent par atteindre le même état
• La convergence est une propriété plus faible que la sérialisabilité à
une copie
• On peut converger vers une valeur qui n’a pas de sens pour
l’utilisateur
353
Sérialisabilité à une copie
• Les objets logiques A et B sont répliqués sur les sites S1 et S2
• A1, A2 (resp. B1, B2) sont les objets physiques résultant de la réplication
T1
write(A1) write(B1) write(A2) write(B2)
T2
read(A1) read(B2)
T1
write(A) write(B)
T2
read(A) read(B)
354
Sérialisabilité et convergence
dépendent du modèle de réplication
Transaction T
site S1 site S2 site S3
write A1
write A2
write A3
write B1
write B2
write B3
commit
commit
commit
356
Propagation asynchrone (Lazy)
• Les mises à jour sur un objet sont reportées sur ses réplicas
en mode différé, par le biais de transactions indépendantes
T1 sur S1
write A1
write B1
commit
T2 sur S2
write A2
write B2
commit
T3 sur S3
write A3
write B3
commit
357
Contrôle symétrique vs. asymétrique
• Symétrique: tout site est autorisé à mettre à jour sa copie
locale d'un objet
Update A Update A
A1 A2
Update A A3
• Asymétrique: seule la copie maître peut être mise à jour, les autres
copies sont en lecture seule
Update A
Update A
Update A A1 A2
A3
358
Conclusion
359
Conclusion (suite)
360
Théorème CAP
[Brewer’00,Lynch&Gilbert’02]
361
Procédures de réconciliation
• Timestamp
– chaque objet détient le timestamp de sa
dernière opération de mise à jour
– Si TS(objet) > TS(update) => lost update
• Opérations commutatives
– ordre d'exécution indifférent
• Règles spécifiques à une application
– priorité à certains sites, à certaines valeurs, à
certaines opérations
• Construction d'un arbre de versions
362
Réconciliation préservant l’intention
• Transformées opérationnelles
– Principe issu du domaine des éditeurs
synchrones
– Objets répliqués sur chaque site
– Les opérations exécutées sur 1 site sont
diffusées sur les autres
• Opérations sur objets typés
– String: InsertCar, DeleteCar
– Calendar: InsertEvent, DeleteEvent
– XML: AddNode, DeleteNode, ChangeAttr
• Assurer les propriétés
– Causalité
– Convergence 363
Réplication dans Oracle
• Mécanisme de base permettant de capturer les mises à jour sur un
site et de les rejouer sur un autre (Oracle Streams)
• Mutliples paramétrages permettant d’utiliser des combinaisons par
défaut ou ‘programmer’ tout modèle de réplication et écrire ses
propres procédures de réconciliation
364
Réplication dans Cassandra
• Paramètres
– R: nb de replicas lus
– W: nb de replicas écrits
– N: nb de réplicas
– Quorum Q = N/2 + 1
• Différents choix possibles
– Pour R (resp. W) = 1, on récupère la 1ère réponse
• W + R > N consistency
– R=1, W=N (ROWA)
– R=N, W=1
– R=Q, W=Q
365
Réconciliation dans Cassandra (1)
366
Réconciliation dans Cassandra (2)
• Weak consistency
– Read réparés après l’envoi de la réponse
• Strong consistency
– Read réparés avant l’envoi de la réponse
367
Conclusion sur les transactions
368
Folk-IS: Opportunistic Data Services
in Least Developed Countries
(vision paper)
Nicolas Anciaux1, 2, Luc Bouganim1, 2, Thierry Delot3,1,
Sergio Ilarri4, Leila Kloul2, Nathalie Mitton1, Philippe Pucheral1, 2
(1) INRIA, France
(2) PRISM, UVSQ, France
Folk-node
FLASH
FLASH
SMCU
Smart tokens
Microcontroller
SMCU
Fingerprint
Shared devices
? FLASH
Community 1
M
Internet access
N
C
point
M D
C A B
Merchant
E D
D E
A
First Aid <
Community 2
Folk-node
T
SMCU FLASH A
E A
School
Healthcare scenario
Heatlhcare (current)
Provided by local nurses working in first-aid rooms or intervening in communities
Nurses only possess basic medicines and equipment
No Electronic Health Records system, neither paper-based medical records
Many people have no identity document to link them to their records
People move according to seasons and drought periods
Heatlhcare (Folk-IS)
The patient’s folk-node owns his complete and up-to-date medical folder
The patients authenticate by fingerprint => the link to his record is established
The nurse can also authenticate by fingerprint
Nurses can append diagnosis and treatment information locally
Nurses may request medical advice from a distant doctor and transmit documents
The patient can be notified a few days later, if a serious problem is detected
Global queries can be broadcasted to conduct epidemiological studies
Challenges
Technological focus
Low-cost of ownership, deployment and maintenance
Absence of a networked infrastructure
Database challenges
(1) Privacy preserving data management without any central infrastructure
(2) Routing without any central infrastructure
Privacy preserving data management
Co-design the data engine with a triple goal: Adapt the design to low cost HW
Reducing the overall cost of the device, E.g., SD cards behavior
its energy consumption,
offering flexibility
Opportunistic communications
Enable communication (encrypted messages) directly between active Folk-nodes,
or indirectly through shared devices (when passive Folk-nodes connect to it)
(2) Personal benefit: Passport for several applications (healthcare, education, etc.)
A new channel to pull/push information from/towards communities previously unreachable
(4) Very low deployment cost: No initial investment, global costs ~ scale of targeted
population, no central administration
Initial study: in cooperation with FUN & LIRIMA – H2020 ICT-39 project proposal
Opportunistic data services in least developed countries:
benefits, challenges and feasibility issues. SIGMOD Record, 43(1), 2014.
Annexe1
JDBC et OCI
381
Chargement du pilote JDBC
• Par invocation de la méthode Class.forName
• Paramètre = chemin de la classe du driver
– (fournit dans la doc. du driver)
382
Connecter la base de données
• DriverManager permet d’établir la connexion avec le SGBD
• Grâce à la méthode getConnection de cette classe
– le driver adéquat est retrouvé parmi les drivers chargés
– un objet Connection est retourné
• Paramètres de la méthode
– Url fournit les informations nécessaires à la connexion
• débute par jdbc:, suivi du sous-protocole (par ex. odbc), suivi par des
informations propres au driver (par ex: le nom de la source de données dans
le cas du pont JDBC-ODBC)
– Nom et mot de passe de l’utilisateur sur le SGBD
• Exemple
import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
// ... Etapes précedentes...
Connection con = DriverManager.getConnection(jdbc:odbc:Oracle, "scott", "tiger");
}
}
383
Créer une instruction
• Une instruction est représentée par une instance de la classe
– Statement, (instruction SQL statique)
– CallableStatement, (appeler une procédure stockée)
– ou PreparedStatement (instruction SQL précompilée et paramétrée)
• La création se fait à partir de l’objet Connexion en utilisant
(l’objet Connexion est obtenu à la connexion)
– createStatement (SQL statique)
– prepareCall (procédure stockée)
– prepareStatement (SQL précompilé/paramétré)
• Exemple import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
// ... Etapes précedentes...
Statement req1 = con.createStatement();
CallableStatement req2 = con.prepareCall(str);
PreparedStatement req3 = con.prepareStatement(str);
}
}
384
Exécuter l’instruction
• Méthodes (principales) pour exécuter une instruction
– executeQuery pour les requêtes de type SELECT ...
(LMD de consultation)
– executeUpdate pour les CREATE ou INSERT/DELETE/UDATE...
(LDD et LMD de mise à jour)
– execute pour les procédures stockées (entre autre)
• Les méthodes de l’interface Statement (exécution de requêtes
SQL statiques) prennent en paramètre une chaîne de
caractères représentant la requête à exécuter
• Exemple
import java.sql.*;
public class ObjetUtilisantJDBC
{
public static void main(String[] Args)
{
// ... Etapes précedentes...
req1.executeUpdate("CREATE TABLE contact (nom VARCHAR(50), tel CHAR(10))");
req1.executeUpdate("INSERT INTO contact VALUES (’dupond’, ’0102030405’)");
}
}
385
Traiter le résultat
• La méthode executeQuery retourne un objet de type
ResultSet
– représente un curseur sur le résultat de la requête
– Exemple
// ... Etapes précedentes...
ResultSet rs = req1.executeQuery("SELECT * FROM contact");
386
Accès aux résultats
(curseur)
• Un curseur permet de parcourir les tuples résultats d’une
requête
– Représenté dans JDBC par l’interface ResultSet
• Fonctionnement
– Le curseur d’un objet ResultSet est positionné avant le premier tuple
– La méthode next permet de faire avancer ce curseur sur le tuple suivant
• retour = false il n’y a plus de tuples à traiter
• Les valeurs des attributs sont obtenues grâce aux méthodes
getXXX( )
– Paramètre = numéro/nom de colonne dans le résultat
• 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);
// ...
}
387
Accès aux résultats
(conversion et valeur nulles)
• Conversion de type
– Les méthodes getXXX convertissent de SQL vers JAVA
SQL Java
CHAR String
VARCHAR String
LONG VARCHAR
String NUMERIC
Boolean TINYINT
Byte SMALLINT
Short INTEGER
Etc…
• Valeurs nulles (NULL de SQL)
– Testé grâce à la méthode wasNull de ResultSet
• wasNull est appelée après la lecture de la valeur
(après l’utilisation d’une méthode getXXX)
– Les méthodes getXXX convertissent les valeurs NULL de
SQL en une valeur acceptable pour le type Java cible
388
Fermer les différents éléments
389
Les fonctions de JDBC
• Fonctions de bases • Fonctions avancées
– Charger le/les pilotes – Exceptions JDBC
– Se connecter à la base de – Accès aux méta-données
données • Du résultat
– Créer une instruction • De la base de données
• SQL statique, – Exécution de
• appel à procédure stockée, • requêtes précompilées
• précompilée et paramétrée • requêtes paramétrées
– Exécuter l’instruction • procédures stockées
• LMD de consultation, – Exécution par lots (batch)
• LDD et LMD de mise à jour, – Utilisation de curseurs
• procédures stockées – Transactions
– Traiter le résultat – Extension standard (javax.sql)
• Gestion de l’objet ResultSet
– Fermer les différents éléments SKIP
390
Exceptions
• L’exception SQLException peut être lancée par les méthodes
de JDBC
// ...
ResultSet rs = req1.executeQuery("SELECT * FROM contact");
ResultSetMetaData rsmd = rs.getMetaData();
int nbColonnes = rsmd.getColumnCount();
// ...
392
Requête précompilée
(création)
• Une requête qui doit être exécutée peut être précompilée en
utilisant PreparedStatement
– Dans un objectif de performance (temps d’exécution)
– La requête est transmise au SGBD (qui la précompile)
• Le plan d’exécution est préparé
– Des variables peuvent être utilisées pour paramétrer la requête
• Création d’une requête précompilée
– A partir de l’objet Connection
– Grâce à méthode prepareStatement
• La requête est passée en paramètre sous forme de chaîne de caractères
• Les paramètres sont représentés par des ‘?’ dans la chaîne
– Le retour est un objet PreparedStatement prêt à être exécuté
• Exemple
// ...
String req = "UPDATE contact SET tel = ? WHERE nom = ?";
PreparedStatement UpdateTel = con.prepareStatement(req);
// ...
393
Requête précompilée
(paramétrage)
• Avant d’exécuter la requête fixer les
paramètres
(remplacent les ‘?’ par une valeur dans la chaîne)
– Grâce aux méthodes setXXX
(où XXX représente un type de données Java)
– NB: setNull fixe le paramètre à la valeur NULL de SQL
– Premier argument = numéro d’ordre du ‘?’ à remplacer
– Deuxième 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");
// ...
394
Requête précompilée
(exécution)
// ...
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();
// ...
395
Procédures stockées
• L’interface CallableStatement permet d’invoquer une procédure
stockée
– NB: la procédure est stockée au niveau du SGBD…
– … la création se faisant avec la méthode prepareCall de Connection
// ...
CallableStatement cs = c.prepareCall("{call nom_procedure_stockee}");
// ...
396
Transactions
(portée)
• Rappel = une transaction permet d’exécuter un ensemble de
requêtes sur une BD, la faisant passer d’un état cohérent à un
autre état cohérant, respectant les propriétés transactionnelles
(ACID)
• Par défaut, la connexion JDBC est en mode chaîné
– chaque requête est suivie d’un ordre SQL « commit » implicite
• On peut désactiver ce mode
– soit lors de la création de la connexion // ...
c.setAutoCommit(false);
– soit grâce à la méthode setAutoCommit // ...
397
Transactions
(concurrence)
• Le niveau d’isolation permet de déterminer les incohérences
que peut subir une transaction (lecture sales, fantômes, . . .)
• Les différents niveaux d’isolation (normalisés) sont
– Connection.TRANSACTION_READ_UNCOMMITTED
• lectures sales, non reproductibles et fantômes peuvent se produire
– Connection.TRANSACTION_READ_COMMITTED
• les lectures sales sont évitées
– Connection.TRANSACTION_REPEATABLE_READ
• les lectures sales et non reproductibles sont évitées
– Connection.TRANSACTION_SERIALIZABLE
• la transaction est complètement sérialisable
– Connection.TRANSACTION_NONE
• indique que les transactions ne sont pas supportées
• Les méthodes getTransactionIsolation et
setTransactionIsolation de Connection permettent de connaître
398
Apports de JDBC 2.0 et 3.0 (1/2)
• Amélioration des curseurs
– Parcours dans les 2 sens, positionnement sur un tuple donné,…
– Méthodes nouvelles:
• previous, first, beforeFirst, last, afterLast, absolute, relative, …
• Mise à jour de la BD au travers des méthodes de Java
– Notamment, au travers de curseurs
– UPDATE
• Méthode updateString de ResultSet,
• puis updateRow pour reporter les changements dans la BD
(avant de déplacer le curseur sur un autre tuple)
– INSERT
• Méthode moveToInsertRow pour déplacer le curseur vers une zone particulière
d’insertion,
• puis méthodes updateXXX pour fixer les valeurs des attributs du tuple,
• puis méthode insertRow pour insérer le tuple dans le ResultSet et dans la BD
• NB: la méthode moveToCurrentRow permet de revenir sur le tuple courant (sur lequel
le curseur se trouvait avant l’appel de moveToInsertRow)
– DELETE
– Positionner le curseur sur le tuple à supprimer,
– puis appel à la méthode deleteRow pour effectuer la suppression
399
Apports de JDBC 2.0 et 3.0 (2/2)
• Envoyer plusieurs instructions à la BD en une fois
– Exécution par batch
– Avec la méthode addBatch de Statement ajouter une
requête dans la liste à exécuter
• NB: La liste peut être effacées avec la méthode clearBatch
– L’exécution des requêtes est ensuite réalisée par la
méthode executeBatch
• Cette méthode retourne un tableau d’entiers représentant le nombre
de tuples modifiés par chaque instruction
• L’exception BatchUpdateException peut être lancée si une erreur se
produit lors des mises à jour
• Support des types SQL3
– Blob, Clob, Array, etc. et ajout des méthodes getXXX et
setXXX correspondantes
400
API propriétaires : exemples de
l’interface OCI (Oracle)
401
Exemple de la librairie OCILIB
• Documentation en ligne :
http://orclib.sourceforge.net/doc/html/modules.html
402
1) Intitialiser la librairie
#include "ocilib.h"
Importer la librairie int main(void)
{
OCI_Cleanup();
Libérer la librairie return EXIT_SUCCESS;
}
403
2) Ouvrir une connexion à la base
#include "ocilib.h"
int main(void)
{
Déclarer une connexion OCI_Connection *cn;
OCI_Cleanup();
return EXIT_SUCCESS;
}
404
3) Exécuter une requête SQL
#include "ocilib.h"
int main(void)
{
OCI_Connection *cn;
Déclarer une requête SQL OCI_Statement* st;
au travers de la connexion
La requête à exécuter
OCI_Cleanup();
return EXIT_SUCCESS;
}
405
4) Parcourir le résultat de la requête
#include "ocilib.h"
int main(void)
{
OCI_Connection *cn;
OCI_Statement* st;
Déclaration du résultat OCI_Resultset* rs;
int nb_col; int i=0; OCI_Column *col;
Déclaration d’une colonne if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
return EXIT_FAILURE;
cn = OCI_ConnectionCreate("XE", "login", "pwd", OCI_SESSION_DEFAULT);
printf(OCI_GetVersionServer(cn));
printf("Server major version : %i\n", OCI_GetServerMajorVersion(cn));
printf("Server minor version : %i\n", OCI_GetServerMinorVersion(cn));
printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));
printf("Connection version : %i\n", OCI_GetVersionConnection(cn));
st = OCI_StatementCreate(cn);
Stockage du résultat OCI_ExecuteStmt(st, "SELECT * FROM CLI");
de la requête rs = OCI_GetResultset(st);
Récupérer la i+1eme colonne
Récupération du nb_col = OCI_GetColumnCount (rs);
nb de colonnes du résultat for(i=0; i<nb_col; i++) {
col = OCI_GetColumn (rs, i+1);
Récupérer le nom de la ième colonne
fficher les noms des colonnes
printf("%s | ", OCI_ColumnGetName (col));
} printf("\n");
while (OCI_FetchNext(rs)) { Récupérer la valeur de la ième
for(i=0; i<nb_col; i++) colonne
ffichage des lignes du résultat sous forme de chaîne de
printf("%s | ", OCI_GetString(rs,i+1));
printf("\n"); caractère
}
OCI_Cleanup();
return EXIT_SUCCESS;
}
406
Annexe3 : modes de
chiffrement
407
Mode opératoire Electronic Code Book
EK (P1) EK (P2)
408
Mode opératoire Cipher Block Chaining
• les blocs chiffrés intégrent la valeur des
précédents
by tes
0 8 16
409
Mode opératoire CTR
• Résultat du XOR entre le clair et un mot aléatoire
by tes
0 8 16
Plain-text 1 (P1) Plain-text 2 (P2) …
+1 +2 +3
EK (IV+1) P1 EK (IV+2) P2
410