La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Marta Rukoz Université Paris X - Nanterre

Présentations similaires


Présentation au sujet: "Marta Rukoz Université Paris X - Nanterre"— Transcription de la présentation:

1 Marta Rukoz Université Paris X - Nanterre
Cours n°9 Confidentialité et sécurité Mise en œuvre d'un SGBD - Performances Marta Rukoz Université Paris X - Nanterre

2 Plan La notion de vues : Création - Destruction - Manipulation de vues
Le problème de la mise à jour des tables au travers des vues Le contrôle de l'accès à la base et aux données Philosophie générale Les privilèges Les instructions GRANT et REVOKE La clause WITH GRANT OPTION III. Performances Introduction Indexation de fichiers Arbre-B Hachage Index bitmap Indexation dans Oracle

3 Création d´une vue Il existe deux catégories de tables : les table dérivées et les tables permanentes. Les vues sont des tables dérivées ou virtuelles . Création d'une vue (table virtuelle) : CREATE VIEW nom_de_vue [(liste de colonnes)] AS table_expression [WITH [CASCADED | LOCAL] CHECK OPTION]; table_expression est une requête pouvant comporter des opérateurs ensemblistes. Absence de ORDER BY. La création d'une vue n'extrait aucune ligne de la base. Elle inscrit juste la définition de la vue dans les tables de la méta-base.

4 Création d´une vue (exemple)
CREATE VIEW etudiants_MIAGE (numero, nom, prenom, date_de_naissance, filiere, année) AS SELECT * FROM etudiants WHERE filiere = 'MIAGE' and année = 'licence'; Attributs de etudiants : num_etu, nom_etu, pre_etu, ddn, filiere, année ou bien CREATE VIEW etudiants_MIAGE AS SELECT * FROM etudiants WHERE filiere = 'MIAGE' and année = 'licence';

5 Création d´une vue (exemple)
CREATE VIEW ca_clients (reference, chiffres_affaire) AS SELECT num_cli, SUM(qte_lcd * pu_lcd) FROM commande, ligne_commande WHERE num_cd = cmd_lcd GROUP BY num_cli; équivalent à : CREATE VIEW ca_clients AS SELECT num_cli AS reference, SUM(qte_lcd * pu_lcd) AS chiffres_affaire FROM commande, ligne_commande WHERE num_cd = cmd_lcd GROUP BY num_cli;

6 La destruction d´une vue
DROP VIEW nom_de_vue [RESTRICT | CASCADE] RESTRICT : si la vue intervient dans la définition d'une autre vue ou dans une contrainte d'intégrité, la commande sera rejetée. CASCADE : suppression de la vue et de toutes les vues ou contraintes où la vue intervient.

7 Manipulation de vues Dès qu'une vue est définie, on peut l'utiliser comme une table de base. On peut alors définir des requêtes de recherche. SELECT * FROM etudiants_MIAGE WHERE nom LIKE 'D%'; sera traduite en : SELECT * FROM etudiants WHERE filiere = 'MIAGE4 and annee = 'licence' AND nom_etu LIKE 'D%'; Une vue est une fenêtre dynamique sur la base. Les modifications apportées sur la ou les tables sources sont automatiquement reportées au travers de la vue.

8 Raisons d'être des vues Faciliter l'accès à la base
Une vue peut être utile pour masquer la complexité du schéma de la base de données Augmenter l'indépendance logique Objectif : augmenter l'indépendance de l'utilisateur vis-à-vis de l'organisation logique globale des données. Création de vues correspondant à des tables utilisées dans des applications mais ne faisant pas partie du schéma logique de la base.

9 Préserver la confidentialité et personnalisation
Raisons d'être des vues Préserver la confidentialité et personnalisation Soit la table EMPLOYE = (numero, nom, prenom, adresse, num_service, salaire, performance) On peut vouloir effectuer un contrôle sur ce que font les utilisateurs en fonction du contexte Ex : on peut permettre à un utilisateur de ne visualiser QUE le tuple qui le concerne CREATE VIEW information_me_concernant AS SELECT * FROM EMPLOYE WHERE nom = USER; puis : GRANT SELECT ON information_me_concernant TO PUBLIC;

10 Préserver la confidentialité et personnalisation
Raisons d'être des vues Préserver la confidentialité et personnalisation On peut vouloir effectuer un contrôle sur les types de données auxquelles les utilisateurs ont accès Ex : on peut permettre à Mme Michu de lire les colonnes numero, nom, prenom, adresse, num_service et modifier le contenu des adresses ou numero de service CREATE VIEW liste_des_employes AS SELECT numero, nom, prenom, adresse, num_service FROM EMPLOYE; puis : GRANT SELECT, UPDATE (adresse, num_service) ON liste_des_employés TO Michu; Partie de ce document a été pris du cours SBD- Chantal Reynaud Université Paris Nanterre

11 Préserver la confidentialité et personnalisation
Raisons d'être des vues Préserver la confidentialité et personnalisation On peut vouloir effectuer un contrôle sur les types de données auxquelles les utilisateurs ont accès et également un contrôle fonction des valeurs prises par certains attributs Ex : on ne permet pas à Mme Michu de lire les colonnes nom, prenom, adresse, des employés dont le salaire est supérieur à euros; CREATE VIEW employes_riches AS SELECT numero, salaire, performance FROM EMPLOYE WHERE salaire > 11500; puis : GRANT SELECT ON employés_riches TO Michu;

12 Permettre d'introduire des contraintes d'intégrité
Raisons d'être des vues Permettre d'introduire des contraintes d'intégrité A défaut de contraintes centralisées dans le dictionnaire, le concept de vue peut pallier cette lacune. Ex : CREATE VIEW lignes_commandes_validées AS SELECT * FROM lig_cmd WHERE lcd_qte >= 0 AND lcd_liv >= 0 AND lcd_liv <= lcd_qte AND lcd_pu >= 0.8 * (SELECT art_pv FROM articles WHERE art_num = lcd_art) AND lcd_cmd IN (SELECT cmd_num FROM commandes) WITH CHECK OPTION. Grâce à CHECK OPTION, le système vérifie la validité des données introduites ou modifiées par rapport aux critères spécifiées dans la vue.

13 Le problème de la mise à jour des tables au travers des vues
Quelques cas posant problème La vue est une projection sans la colonne de la clé primaire : IMPOSSIBLE La vue est une projection incluant la colonne de la clé primaire : POSSIBLE, SAUF SI des colonnes non présentes dans la vue ne peuvent être à NULL et n'ont pas de valeurs par défaut. L'expression définissant la vue fait intervenir une fonction de calcul ou une fonction de groupe : IMPOSSIBLE La vue est définie à partir de plusieurs tables : PAS TOUJOURS POSSIBLE

14 Le problème de la mise à jour des tables au travers des vues
Règles à respecter pour qu'une vue soit modifiable La définition d'une vue ne peut pas contenir les mots réservés JOIN, UNION, INTERSECT, EXCEPT. La vue doit être définie à partir d'une seule table source. La clause SELECT ne doit pas contenir de DISTINCT La clause SELECT ne doit pas contenir de références aux colonnes de la table source (pas de SUM, COUNT) La clause FROM contient exactement une table ou une vue modifiable La clause WHERE ne peut pas contenir une sous-question telle que la clause FROM de la requête imbriquée possède une référence à la même table que celle de la clause FROM du niveau englobant. La définition d'une vue ne doit pas contenir de GROUP BY ou de HAVING Une vue qui ne satisfait pas ces conditions est en lecture seule.

15 Le problème de la mise à jour des tables au travers des vues
Possibilités d'Oracle CREATE [FORCE | NO FORCE] VIEW nom_vue [(liste_colonnes)] AS expression_de_selection [WITH READ ONLY] [WITH CHECK OPTION CONSTRAINT nom_contrainte]; FORCE : pour créer la vue même si les tables de base n'existent pas encore ou que l'on n'a pas les privilèges nécessaires. WITH READ ONLY : interdit les mises à jour sur les vues. Pour Oracle, les modifications dans une vue sont possibles si elles ne comportent pas de : DISTINCT, fonctions de calcul (AVG, COUNT, UNION, ALL, INTERSECT, MINUS), GROUP BY, HAVING, CONNECT BY.

16 Le contrôle de l'accès à la base et aux données : Philosophie générale
Oracle permet à plusieurs utilisateurs de travailler en toute sécurité sur la même base. Chaque donnée peut être confidentielle et accessible à un seul utilisateur, ou partageable entre plusieurs utilisateurs. Un utilisateur ne peut effectuer une opération quelconque que s'il détient le privilège approprié pour réaliser cette opération. Le créateur d'une table en est le propriétaire. Pour qu'un utilisateur puisse accéder à une table, il doit recevoir, du propriétaire de la table, les droits nécessaires pour l'exécution des manipulations envisagées. GRANT et REVOKE permettent de distribuer et retirer ces privilèges. L'opérateur USER désigne l'utilisateur courant et peut être utilisé dans toute requête.

17 Les privilèges SELECT : privilège donnant accès à toutes les colonnes d'une table. INSERT, INSERT(colonnes) : permet l'insertion dans toutes les colonnes d'une table. UPDATE, UPDATE(colonnes) : permet la modification de toutes les colonnes d'une table. DELETE : permet la suppression des lignes d'une table. REFERENCES, REFERENCES(colonnes) : permet d'utiliser toutes les colonnes d'une table dans une contrainte d'intégrité. USAGE : privilège nécessaire à l'utilisation d'un domaine. etc. Dans Oracle, existe la notion de rôle qui réunit un ensemble de privilèges sous un nom logique

18 Les instructions GRANT et REVOKE
L'instruction GRANT permet à un utilisateur de distribuer des privilèges à d'autres : GRANT liste_privilèges ON nom_objet TO {nom_utilisateur, nom_rôle, PUBLIC}; Exemples : GRANT UPDATE, SELECT ON magasins TO Yvan; GRANT UPDATE(att1, att2) ON nom_table TO pierre, paul; GRANT INSERT(col1, col2, col3) ON nom_table TO edouard; GRANT SELECT ON fournisseurs TO PUBLIC; L'instruction REVOKE permet de retirer des privilèges. REVOKE liste_privilèges ON nom_objet FROM {nom_utilisateur, nom_rôle, PUBLIC}; Exemple : REVOKE UPDATE ON magasins FROM Yvan;

19 La clause WITH GRANT OPTION
Par défaut, ceux qui reçoivent un privilège ne peuvent le céder à d'autres sauf si l'option WITH GRANT OPTION est spécifiée Cette facilité se retire de la façon suivante : REVOKE GRANT OPTION FOR SELECT ON clients FROM ferdinand;

20 Performances : Introduction
La norme SQL ne spécifie rien quant à la manière d'assurer des performances suffisantes dans les applications. Le contrôle des performances est du ressort de l'administrateur des structures de données , il échappe totalement à l'utilisateur. Tous les SGBD proposent de construire et maintenir des index sur les données. Un index sur une table est semblable à l'index à la fin d'un livre. Il permet de répondre aux requêtes beaucoup plus rapidement en créant des chemins d'accès aux enregistrements beaucoup plus directs. Un index est formé de clés qui permettent ensuite de lire directement les données correspondantes. La présence d'index n'est pas du tout nécessaire pour manipuler les informations d'une base de données en SQL. Les requêtes SQL sont transparentes au fait qu'il existe ou non un index.

21 Indexation de fichiers
Table à indexer

22 Indexation de fichiers Index non dense
L'index ne comprend qu'un enregistrement par bloc. Il est trié. On peut donc y accéder par dichotomie. - Très efficace pour les recherches - Problèmes : maintien de l'ordre suite à des insertions, destructions, maintien de la correspondance avec l'index.

23 Indexation de fichiers Index dense

24 Indexation de fichiers Index multi-niveaux

25 Arbre-B I N D E X D O N E S

26 Hachage : Principes de base
Le SGBD applique une fonction mathématique, appelée fonction de hachage, sur une clé. Le résultat est un numéro de bloc ou adresse. Le tuple correspondant à la clé est stocké dans ce bloc. En théorie, cette technique permet d'accéder à un tuple en une entrée-sortie. Problèmes : l'application de la fonction de hachage à deux clés différentes donnant le même résultat. Solutions : chaînage des collisions ou application d'une fonction secondaire. La répartition des tuples dans les blocs est d'autant meilleure que le nombre de clés différentes est élevé. Le hachage à partir d'une colonne contenant beaucoup de valeurs NULL est déconseillé.

27 Hachage (Exemple) Blocs Entrées Répertoire

28 Hachage : Recherche - Mise à jour
Si le répertoire tient en mémoire principale, on peut effectuer une recherche en ne lisant qu'un bloc. Avantages : cette structure n'occupe aucun espace disque, il permet des recherches par clé par accès direct (calculé) au bloc susceptible de contenir l'enregistrement. Impossible d'optimiser les recherches par intervalle car l'organisation des enregistrements ne s'appuie pas sur l'ordre des clés. Mise à jour : Mal adapté. L'espace alloué risque d'être insuffisant s'il y a des insertions. On chaîne alors les blocs.

29 Index bitmap Un index bitmap considère toutes les valeurs possibles pour un attribut. Pour chaque valeur, on stocke un tableau de bits (dit bitmap) avec autant de bits qu'il y a de lignes dans la table. Très utile pour les colonnes qui ne possèdent que quelques valeurs distinctes.

30 Comparaison Les arbres-B sont très souples et offrent des recherches rapides en fonction d'une valeur de la clé ou d'une plage de valeurs. En général, on crée un tel index pour les colonnes ayant un très grand nombre de valeurs différentes ou qui interviennent dans des critères de recherche ou de jointure. C'est ainsi qu'en pratique, on en définit toujours pour les clés primaires et étrangères. Les index hachés permettent en une seule E/S de retrouver un tuple dont on donne la valeur de la clé. Les index à matrices binaires (bitmap) peuvent être utiles pour les requêtes de comptage en fonction de critères portant sur plusieurs colonnes comportant que peu de valeurs différentes. En pratique, ces index sont utilisés pour de grandes tables. La maintenance d'un index représente toujours une surcharge de travail pour le SGBD. Dès lors, on évite de créer des index sur les colonnes fortement modifiées.

31 Indexation dans Oracle
Oracle propose plusieurs techniques d'indexation : arbres-B, arbres-B+ (par défaut), tables de hachage. Oracle maintient automatiquement les index, de manière transparente pour l'utilisateur. Par défaut, un arbre-B+ est créé sur la clé primaire de chaque table. Si l'utilisateur effectue des recherches sur des critères qui ne font pas partie de la clé, les recherches peuvent être optimisées en créant un nouvel index. CREATE [UNIQUE] INDEX nom_index ON nom_table (nom_colonne [ASC | DESC] [, nom_colonne …]; UNIQUE : une seule valeur de champ de clé Exemples : CREATE INDEX nomcli_ind ON client(nomcli); CREATE INDEX com_ind ON commandes (datecom DESC, numcli ASC);

32 Indexation dans Oracle
Pour créer une table en arbre-B, il faut l'indiquer à la création : CREATE TABLE nom_table (Att1 typeAtt1, PRIMARY KEY (Att1), ORGANIZATION INDEX); Tables de hachage : CREATE CLUSTER HashFilms (id INTEGER) SIZE 500 HASHKEYS 500; CREATE TABLE Film (idFilm INTEGER, …) CLUSTER HashFilms (idFilm);

33 Règles à respecter Ne pas créer d'index pour des tables de moins de lignes, l'accès séquentiel est plus rapide. Ne pas créer d'index sur une colonne qui ne possède que quelques valeurs différentes. Indexer les colonnes qui interviennent souvent dans les clauses WHERE et ORDER BY Indexer les colonnes de jointure.

34

35 B+ Tree Estructura jerárquica, donde cada nodo:
Apunt. 1 Clave1 Apunt. 2 Clave Apunt. n-1 Claven-1 Apunt n Registros con claves menores a Clave1 Registros con clave mayores o igual a Clave1 y menores o iguales a Clave2 Registros con clave mayores a Claven-1 El grado de un B+ tree (n) es el numero máximo de nodos hijos que posee cada nodo

36 B Tree En B+ trees algunas claves son repetidas en muchos nodos
B tree es similar a B+ tree pero sin repetición de clave Ap11 Ap12 Clave1 Ap21 Ap22 Clave Claven Apn Al registro con clave1 Registros con claves menores que Clave1 Registros con clave mayores a Clave1 y menores a Clave2 Registros con clave Clave n


Télécharger ppt "Marta Rukoz Université Paris X - Nanterre"

Présentations similaires


Annonces Google