15
Algèbre Relationnelle et SQL - 4 - page 1/15 - Bertrand LIAUDET EPSI Paris 70 rue Marius Aufan 92300 LEVALLOIS PERRET http://www.epsi.fr/Campus/Campus-de-Paris BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et SQL 4 : Compléments B. LIAUDET

BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

  • Upload
    others

  • View
    6

  • Download
    1

Embed Size (px)

Citation preview

Page 1: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 1/15 - Bertrand LIAUDET

EPSI Paris

70 rue Marius Aufan

92300 LEVALLOIS PERRET

http://www.epsi.fr/Campus/Campus-de-Paris

BASES DE DONNEES RELATIONNELLE

Algèbre relationnelle et SQL

4 : Compléments

B. LIAUDET

Page 2: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 2/15 - Bertrand LIAUDET

SOMMAIRE

SOMMAIRE 2

COMPLEMENTS DE SQL 3

1. Gestion des utilisateurs et de leurs droits 3

2. Gestion des transactions 5

3. Le dictionnaire des données : la BD Information schema 7

4. PL-SQL : procédure et fonction 10

5. Déclencheur (trigger) 11

6. Intégration dans une application 13

Edition : août 2011

Page 3: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 3/15 - Bertrand LIAUDET

COMPLEMENTS DE SQL

1. Gestion des utilisateurs et de leurs droits

Principes

Présentation

La BD est utilisée par de nombreux utilisateurs.

Le SGBD permet de gérer des utilisateurs (CMS) et particulièrement de définir les droits de

consultation, création, modification, suppression pour les tables, les attributs et les tuples de la

BD.

Notions de sécurité

La gestion des utilisateurs relève de la politique de sécurité.

En limitant les accès des utilisateurs, on limite les possibilités de piratage en tout genre.

CREATE USER

La commande CREATE USER permet de créer un utilisateur.

Exemple

CREATE USER toto IDENTIFIED BY monMotDePasse ;

On peut aussi utiliser le GRANT pour créer un utilisateur.

DROP USER

La commande DROP USER permet de créer un utilisateur.

Exemple

DROP USER toto CASCADE ;

GRANT

La commande GRANT sert au propriétaire d’une table à donner certains droits sur cette table à

d’autres utilisateurs.

Exemples

Donner le droit à l’utilisateur 1 de consulter la table emp : GRANT SELECT ON proprio.emp TO utilisateur1;

Consultation et insertion :

Page 4: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 4/15 - Bertrand LIAUDET

GRANT SELECT, INSERT ON proprio.emp TO utilisateur1;

Tous les droits pour deux utilisateurs : GRANT ALL ON proprio.emp TO utilisateur1, utilisateur2;

Consultation pour tous les utilisateurs : GRANT SELECT ON proprio.oeuvres TO PUBLIC;

Limiter les droits à certains attributs GRANT SELECT (ename, job, deptno) ON proprio.emp TO PUBLIC;

Utilisation des rôles prédéfinis

GRANT CONNECT, RESOURCE TO Bertrand ;

CONNECT est un rôle prédéfini qui permet la création de tables et donc leur modification,

suppression, consultation.

RESOURCE est un rôle prédéfini qui permet de faire du PL-SQL : création de triggers et de

procédures stockées.

DBA donne tous les privilèges.

REVOKE

Inversement, la commande REVOKE permet de supprimer des droits.

Exemples

Suppression du droit d’insertion de l’utilisateur 1 : REVOKE INSERT ON emp FROM utilisateur1;

Suppression de tous les droits : REVOKE ALL PRIVILEGES ON emp FROM utilisateur1;

Page 5: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 5/15 - Bertrand LIAUDET

2. Gestion des transactions

Présentation

Une transaction est un ensemble de requêtes élémentaires du DML (insert, update, delete) qui

doivent être exécutées ensemble pour maintenir la cohérence de la base.

Une transaction doit être ACID :

Atomique : tout ou rien

Cohérente : maintenir la cohérence de la BD

Isolée : être indépendantes des autres transactions

Durable : ses effets doivent être persistant

La durabilité est un principe de base des SGBD. La cohérence est une conséquence des

contraintes d’intégrité, de l’atomicité et de l’isolation. On va donc surtout s’intéresser aux

problème de l’atomicité et de l’isolation.

Atomicité : le problème des pannes

COMMIT et ROLLBACK

Pour être atomique, une transaction doit valider toutes ses requêtes élémentaires ou

aucunes.

SAVEPOINT : permet de marquer le début de la transaction.

COMMIT : permet de valider la transaction : toutes les requêtes élémentaires sont

désormais validées durablement.

ROLLBACK : tant que le COMMIT n’est pas exécuté, un ROLLBACK permet de revenir

au précédent SAVEPOINT. C’est ce que fera automatiquement le système en cas de panne

au milieu de la transaction.

SAVEPOINT automatique

Toute connexion au serveur génère un SAVEPOINT automatique.

Tout COMMIT génère un SAVEPOINT automatique.

COMMIT manuel

L’instruction COMMIT peut être passée manuellement à tout moment.

COMMIT automatique

Si la variable AUTOCOMMIT est à vrai, chaque instruction du DML est suivie

automatiquement par un COMMIT.

Toute instruction du DDL génère automatiquement un COMIIT.

Toute déconnexion « propre » d’un utilisateur (disconnect ou exit) génère automatiquement un

COMMIT.

Page 6: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 6/15 - Bertrand LIAUDET

Isolation : le problème de la concurrence

Présentation

Pour éviter que deux utilisateurs ne modifient en même temps une donnée, les instructions

de modifications de données (insert, update et delete) verrouillent les lignes sur lesquelles

elles travaillent.

En contexte transactionnel cette gestion se complique du fait que la transaction traite

plusieurs requêtes élémentaires.

Le « niveau d’isolation » va définir la visibilité des modifications en cours dans une

transaction.

Si une transaction n’est pas isolée, un autre utilisateur voit les états intermédiaires avant le

commit.

Si une transaction est isolée, un autre utilisateur ne voit pas les états intermédiaires mais ne

voit que l’état qui précède la transaction et le résultat du commit de la transaction.

Le problème de l’isolation peut être en partie contourné comme celui de l’atomicité.

Page 7: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 7/15 - Bertrand LIAUDET

3. Le dictionnaire des données : la BD Information schema

Présentation

Le dictionnaire des données contient des méta-données : des données sur les données.

Le dictionnaire des données contient toutes les informations sur tous les objets gérés par le

serveur : les tables, les attributs, les contraintes, les index, les utilisateurs, les droits, etc.

Normalement, c’est une vue construite à partir des données existants effectivement. Elle

n’est pas modifiable.

Usages

Le dictionnaire des données permet de :

Consulter l’état de la base

Ecrire des programmes qui auront des listes d’utilisateurs, de tables ou d’attributs, par

exemple, en paramètre.

Dictionnaire MySQL

Présentation

http://dev.mysql.com/doc/refman/5.0/fr/information-schema.html

MySQL contient deux bases de données par défaut pour gérer les données du SGBD :

la BD MySQL : première version du dictionnaire des données, principalement pour gérer

les droits. Les tuples de cette BD sont modifiables directement.

la BD information_shéma : dictionnaire des données plus standard apparu en version 5.

Exemples d’usage

Liste des tables du serveur

select table_schema , table_name

from information_schema.tables ;

Ré-écriture de DESC avec le dictionnaire des attributs

drop procedure if exists desc2;

delimiter //

Create procedure desc2(v_nomTable varchar(64), v_nomSchema

varchar(64))

BEGIN

SELECT

c.column_name as Nom,

c.column_type as Type,

c.is_nullable as ‘NULL’,

CASE WHEN k.column_name=c.column_name THEN ‘Oui’

ELSE ‘Non’

END as ‘Key’,

c.column_default as Extra

FROM information_schema.columns c

Page 8: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 8/15 - Bertrand LIAUDET

LEFT OUTER JOIN information_schema.key_column_usage k

ON (k.column_name=c.column_name

AND k.table_name= c.table_name

AND k.table_schema= c.table_schema

AND k.constraint_name= ‘PRIMARY’)

WHERE c.table_name=v_nomTable

AND c.table_schema=v_nomSchema;

END;

//

delimiter ;

Page 9: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 9/15 - Bertrand LIAUDET

Dictionnaire ORACLE

Les vues du dictionnaire des données

Le dictionnaire des données contient les vues préfixées par « DBA_ », « ALL_ » ou

« USER_ ».

Ces vues contiennent des informations sur les objets de la base.

Les vues « DBA_ » contiennent des informations sur tous les objets de tous les schémas.

Ces vues sont en général accessibles par les utilisateurs ayant des droits d’administration.

Les vues « ALL_ » contiennent des informations sur les objets accessibles par le groupe

PUBLIC et par l’utilisateur courrant. Les vues « ALL » sont les vues accessibles à tous.

Les vues « USER_ » contiennent les informations sur les objets accessibles par l’utilisateur

courant.

Les 3 catalogues

Le catalogue est la vue contenant tous les objets accessibles.

Il y a 3 catalogues : « DBA_Catalog », « ALL_Catalog » et « USER_Catalog »

« CAT » est un synonyme de la vue « USER_catalog ».

Exemples

Lister toutes les tables et d’autres objets

SQL> select * from cat;

Lister les tables

SQL> select table_name from user_tables ;

Principales vues du dictionnaire des données

all_catalog -- tables, sequence, synonyme, vue,

environ 4000

all_objects -- 19 types d’objets, environ 5000

all_views -- les vues, environ 1000

user_indexes -- les index

etc.

La vue des vues : all_views

La vue qui contient toutes les vues du dictionnaire s’appelle : « all_views » Desc all_views

select count(*) from all_views ;

usage de all_views

La vue ALL_VIEWS va nous permettre de trouver les vues qui nous intéressent. -- pour chercher les vues qui concernent les sequences :

Select view_name from all_views where view_name like « %SEQ% » ;

Page 10: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 10/15 - Bertrand LIAUDET

4. PL-SQL : procédure et fonction

Le PL-SQL

Dans la plupart des SGBD-R, il existe un langage de programmation impératif classique qui

permet d’écrire des successions d’opérations relationnelles en utilisant les possibilités

habituelles de la programmation impérative type Pascal, C ou C++ (variable, affectation, tests,

boucle, exception, procédure et fonction…).

PL-SQL est le nom générique de ce langage pour tous les SGBD. La syntaxe du PL-SQL est en

partie standardisée.

Sous Oracle, ce langage s’appelle : le PL-SQL, (Procedural Language extensions to SQL).

Sous SQL Server, ce langage s’appelle : Transact-SQL. SQL-Server permet aussi d’écrire

des procédures en « CLR », c’est-à-dire avec un langage .NET pris en charge par le serveur

(C#.NET, Visual Basic.NET)

Fonctions PL-SQL

Les fonctions PL-SQL pourront être utilisées dans les requêtes SQL ou dans les procédures et

les fonctions PL-SQL.

Procédures PL-SQL

Les procédures PL-SQL pourront être utilisées dans les procédures et les fonctions PL-SQL.

Elles peuvent aussi être utilisées directement par des programmes utilisant la BD. Ainsi, des

tâches complexes peuvent être réalisées avec un seul accès au serveur.

Les procédures ont deux usages principaux :

Gérer l’environnement : c’est un usage administratif (administration de la base ou

administration d’une application)

Fournir une interface de programmation pour les applications qui soient efficaces et facile à

maintenir.

Page 11: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 11/15 - Bertrand LIAUDET

5. Déclencheur (trigger)

Présentation

Définition

Un trigger est un programme déclenchée automatiquement quand il se passe quelque chose

dans le SGBD.

Classification

On peut définir trois grandes catégories de trigger :

Les triggers DDL

Les triggers DML

Les triggers de remplacement

Les triggers DDL

Les triggers DDL peuvent être déclenchés :

sur une action du DDL : CREATE, DROP ou ALTER

quand un utilisateur se connecte ou se déconnecte de la BD

Ces triggers ne sont pas standards. On les trouve particulièrement dans SQL Server.

Les triggers DML

Un trigger est un programme associée à une table et qui est déclenchée automatiquement avant

(BEFORE) ou après (AFTER) une action du DML : INSERT, UPDATE ou DELETE d’un

tuple de la table.

Les triggers de remplacement

Un trigger DML peut aussi permettre de remplacer l’instruction déclenchante par une autre

action.

Utilité des triggers DML : trigger BEFORE et trigger AFTER

Trigger BEFORE

Un trigger BEFORE est un trigger qui se déclenche avant l’action du DML (INSERT,

UPDATE, DELETE). Il permet de :

Interdire l’action du DML en cas d’incohérence des données saisies : on peut gérer les

valeurs limites avec un trigger. La vérification se fait avant d’avoir enregistré les nouvelles

données. Le trigger peut alors soit interdire la modification, soit la modifier, soit la laisser

s’exécuter mais envoyer un message d’avertissement.

Reformater les données saisies : on peut passer du texte en majuscules.

Page 12: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 12/15 - Bertrand LIAUDET

Gérer les attributs calculés du tuple en cours de modification. Cette possibilité

correspond à un trigger AFTER mais ce dernier ne peux pas s’appliquer au tuple en cours

de modification.

Trigger AFTER

Un trigger AFTER est un trigger qui se déclenche après une action du DML : INSERT,

UPDATE ou DELETE. Il permet de :

1. Mettre à jour la BD du fait de la modification qu’on vient d’y apporter. La mise à jour

se fait après avoir enregistré les nouvelles données. Cette mise à jour concerne des attributs

calculés.

A noter que : un trigger AFTER ne peut pas modifier de données du tuple en cours de

modification. Les attributs calculés du tuple en cours de modification sont gérés par un

trigger BEFORE.

Page 13: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 13/15 - Bertrand LIAUDET

6. Intégration dans une application

Présentation

Le problème

Les applications développées en C++, java, PHP, etc. peuvent communiquer avec le serveur de

la BDD pour consulter ou modifier les données.

Standard de communication

Deux grands standards de communication :

ODBC : Open DataBase Connectivity, API en langage C.

JDBC : Java DataBase Connectivity, API en langage Java.

Ces standards sont des interfaces de programmation d'assez bas niveau permettant de

transmettre des requêtes SQL à un SGBD et de récupérer les résultats.

Outils plus ou moins intégrés aux SGBD

ORACLE propose le PRO*C ou PRO*C++. Ce sont des outils permettant d'inclure des

commandes SQL dans un source C. Il s'agit en fait d'un précompilateur : le source Pro*C

est traduit en source C avec des appels aux librairies ORACLE.

Ce type d’outils est un peu dépassé du fait des standards ODBC et JDBC et du

développement du Web et du graphisme.

On peut intégrer une base de données SQL Server dans n’importe quel environnement de

développement de Visual Studio (Basic, C++, C#, Web Developer, ASP .Net Ajax)

Certains SGBD offrent des environnements de développement graphique qui permette un

développement rapide. Par exemple : ORACLE-APEX (Application Express), ou

l’environnement de développement 4D.

Etapes de fonctionnement

1. Le client établit une connexion au serveur et à la base de son choix.

2. Le client demande l’exécution d’une requête

3. Le serveur exécute la requête

4. Le client récupère le résultat

Exemple Java

Six méthodes importantes en Java

Connection DriverManager . getConnection (String url, String user, String password)

Etablir la connexion au serveur

Statement Connection . createStatement ( )

Page 14: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 14/15 - Bertrand LIAUDET

Créer un état associé à la base

ResultSet Connection . executeQuery (String query)

Exécuter la requête « query ». La méthode renvoie un ResultSet qu’on va ensuite exploiter.

xxx ResultSet . getxxx (int no) , xxx ResultSet . getxxx (String name)

Renvoie la valeur du champ n° « no » ou de nom « name » d’un ResultSet.

bool ResultSet . next ( )

Passe au tuple suivant s’il en reste encore un, sinon renvoie faux.

* . close ( )

Fermetures diverses dont celle de la connexion à la BD et au serveur.

Programmme type

import java.io.*;

import java.sql.*;

public class jdbctest

{

public static void main(String args[]) throws

ClassNotFoundException, FileNotFoundException, IOException,

SQLException

{

String url = args[0];

String usr = args[1];

String pwd = args[2];

// Charger le pilote PostgreSQL

Class.forName("org.postgresql.Driver");

try

{

// Se connecter a la base

System.out.println("Connexion a la base " + url);

Connection db = DriverManager.getConnection(url, usr,

pwd);

System.out.println("Connecte.");

Statement st = db.createStatement();

ResultSet rs = st.executeQuery("select * from emp");

if (rs != null)

{

// On souhaite consulter les 3 premieres lignes au

plus

st.setMaxRows(3);

while (rs.next())

{

int id = rs.getInt("id"); // Recuperer la valeur

d'un attribut selon son nom

String nom = rs.getString(1); // ou selon son

numero

String comment = rs.getString("comment");

System.out.println("id="+id+" nom="+nom+"

comment="+comment);

}

rs.close();

Page 15: BASES DE DONNEES RELATIONNELLE Algèbre relationnelle et ...bliaudet.free.fr/IMG/pdf/Cours_SGBD-SQL_-_04-Complements.pdf · COMPLEMENTS DE SQL 3 1. Gestion des utilisateurs et de

Algèbre Relationnelle et SQL - 4 - page 15/15 - Bertrand LIAUDET

}

// Fermer la connexion

System.out.println("Fermeture de la connexion");

st.close();

db.close();

}

catch (Exception ex)

{

System.out.println("Exception levée - et non traitée");

}

}

}