La gestion des utilisateurs et de leurs droits fera l'objet d'un prochain chapitre. Sachez simplement que pour chaque utilisateur, il
est possible de définir des droits particuliers pour chaque table et chaque vue (entre autres choses).
On peut par exemple autoriser l'utilisateur A à faire des requêtes d'insertion, modification, suppression et sélection (le fameux
CRUD) sur la table T1, mais n'autoriser l'utilisateur B qu'à faire des sélections sur la table T1.
Et imaginons qu'il existe aussi un utilisateur C, auquel on veut donner l'autorisation de faire des requêtes de sélection sur la table
T1, mais auquel il faudrait cacher certaines colonnes qui contiennent des données sensibles, ou certaines lignes auxquelles il ne
devrait pas accéder. Il suffit de créer la vue V_T1, n'ayant accès qu'aux colonnes/lignes "publiques" de la table T1, et de donner
à C les droits sur la vue V_T1, mais pas sur la table T1.
Exemple
Le stagiaire travaillant dans notre élevage s'occupe exclusivement des chats, et ne doit pas avoir accès aux commentaires. On ne
lui donne donc pas accès à la table Animal, mais à une vue V_Animal_stagiaire créée de la manière suivante :
Code : SQL
CREATE VIEW V_Animal_stagiaire
AS SELECT id, nom, sexe, date_naissance, espece_id, race_id,
mere_id, pere_id, disponible
FROM Animal
WHERE espece_id = 2;
Algorithmes
Lors de la création d'une vue, on peut définir quel algorithme sera utilisé par MySQL lors d'une sélection sur celle-ci.
Code : SQL
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW nom_vue
AS requete_select
Il s'agit d'une clause non standard, donc valable uniquement pour MySQL. Deux algorithmes différents peuvent être utilisés :
MERGE et TEMPTABLE.
Les algorithmes interviennent au moment où l'on sélectionne des données de la vue, et pas directement à la création de celle-ci.
MERGE
Si l'algorithme MERGE (fusion en anglais) a été choisi, lorsque l'on sélectionne des données de la vue, MySQL va fusionner la
requête SELECT qui définit la vue avec les clauses de sélections. Faire une sélection sur une vue qui utilise cet algorithme
revient donc à faire une requête directement sur les tables sous-jacentes.
Comme ce n'est pas nécessairement très clair, voici deux exemples.
Exemple 1
On a créé la vue V_Animal_details à partir de la requête suivante :
Code : SQL
SELECT Animal.id, Animal.sexe, Animal.date_naissance, Animal.nom,
Animal.commentaires,
Animal.espece_id, Animal.race_id, Animal.mere_id,
Animal.pere_id, Animal.disponible,
Espece.nom_courant AS espece_nom, Race.nom AS race_nom
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
LEFT JOIN Race ON Animal.race_id = Race.id;
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
342/414
www.openclassrooms.com
est possible de définir des droits particuliers pour chaque table et chaque vue (entre autres choses).
On peut par exemple autoriser l'utilisateur A à faire des requêtes d'insertion, modification, suppression et sélection (le fameux
CRUD) sur la table T1, mais n'autoriser l'utilisateur B qu'à faire des sélections sur la table T1.
Et imaginons qu'il existe aussi un utilisateur C, auquel on veut donner l'autorisation de faire des requêtes de sélection sur la table
T1, mais auquel il faudrait cacher certaines colonnes qui contiennent des données sensibles, ou certaines lignes auxquelles il ne
devrait pas accéder. Il suffit de créer la vue V_T1, n'ayant accès qu'aux colonnes/lignes "publiques" de la table T1, et de donner
à C les droits sur la vue V_T1, mais pas sur la table T1.
Exemple
Le stagiaire travaillant dans notre élevage s'occupe exclusivement des chats, et ne doit pas avoir accès aux commentaires. On ne
lui donne donc pas accès à la table Animal, mais à une vue V_Animal_stagiaire créée de la manière suivante :
Code : SQL
CREATE VIEW V_Animal_stagiaire
AS SELECT id, nom, sexe, date_naissance, espece_id, race_id,
mere_id, pere_id, disponible
FROM Animal
WHERE espece_id = 2;
Algorithmes
Lors de la création d'une vue, on peut définir quel algorithme sera utilisé par MySQL lors d'une sélection sur celle-ci.
Code : SQL
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW nom_vue
AS requete_select
Il s'agit d'une clause non standard, donc valable uniquement pour MySQL. Deux algorithmes différents peuvent être utilisés :
MERGE et TEMPTABLE.
Les algorithmes interviennent au moment où l'on sélectionne des données de la vue, et pas directement à la création de celle-ci.
MERGE
Si l'algorithme MERGE (fusion en anglais) a été choisi, lorsque l'on sélectionne des données de la vue, MySQL va fusionner la
requête SELECT qui définit la vue avec les clauses de sélections. Faire une sélection sur une vue qui utilise cet algorithme
revient donc à faire une requête directement sur les tables sous-jacentes.
Comme ce n'est pas nécessairement très clair, voici deux exemples.
Exemple 1
On a créé la vue V_Animal_details à partir de la requête suivante :
Code : SQL
SELECT Animal.id, Animal.sexe, Animal.date_naissance, Animal.nom,
Animal.commentaires,
Animal.espece_id, Animal.race_id, Animal.mere_id,
Animal.pere_id, Animal.disponible,
Espece.nom_courant AS espece_nom, Race.nom AS race_nom
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
LEFT JOIN Race ON Animal.race_id = Race.id;
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
342/414
www.openclassrooms.com
