● Routine level : privilèges globaux ou au niveau d’une base (CREATE ROUTINE, ALTER ROUTINE, EXECUTE, et GRANT) s’appliquant aux procédures cataloguées (étudiées au chapitre 7). Ces privilèges sont stockés dans la table mysql.procs_priv de la base mysql (exemple d’attribution d’un privilège routine : GRANT EXECUTE ON
…).
Tables de la base mysql
Cinq tables de la base de données mysql suffisent à MySQL pour stocker les privilèges (système et objet) de tous les utilisateurs. La figure suivante illustre comment MySQL déduit toutes ces prérogatives toujours en fonction des accès (couple utilisateur, machine).
Figure 5-2 Niveaux de privilèges
Jules Paul
mysql test
information_schema
bdjules bdpaul
Routine level
Global level
Database level Table level
Column level
ON *.*
ON bdpaul.*
ON bdpaul.Avion
nomComp bdpaul.Compagnie
PROCEDURE bdpaul.sp1
La colonne Db est en plus dans les tables host, tables_priv et columns_priv, car elle est nécessaire pour désigner la base de données sur laquelle portera le droit ou la famille de droits.
Supposons, pour nos exemples, que l’utilisateur Paul (accès en local) et la base de données bdpaul soient créés.
CREATE DATABASE bdpaul;
CREATE USER Paul@localhost IDENTIFIED BY 'iut';
Table mysql.user
Présenté brièvement au début du chapitre. Cette table est composée de 37 colonnes qui décrivent les privilèges au niveau global du serveur. Nous détaillons ici la signification des principales.
Privilèges objet (LMD) sur toutes les bases de données
La requête suivante extrait les prérogatives de Paul (et des autres). Pour l’instant, le caractère 'N' étant dans toutes les colonnes, il ne peut ni interroger une table (Select_priv), ni insé-rer dans une table (Insert_priv), ni en modifier (Update_priv), ni en supprimer (Delete_priv), et ce quelle que soit la base de données (excepté les bases système test et information_schema) sur laquelle il voudra se connecter.
SELECT Host, User, FROM mysql.user;
+---+---+---+---+---+---+
| Host | User | Select_priv | Insert_priv | Update_priv | Delete_priv | +---+---+---+---+---+---+
| localhost | root | Y | Y | Y | Y |
| localhost | | Y | Y | Y | Y |
| % | | N | N | N | N |
| |
+---+---+---+---+---+---+
Figure 5-3 Stockage des prérogatives
Table user / db / host / tables_priv / columns_priv /procs_priv
+ + + + + + +
-| Host -| User -| … -| droit1 -| droit2 -| familledroit1 -| … +--- +--- +--- --+--- +--- +---
---+----| localhost ---+----| root ---+----| ---+----| Y ---+----| Y ---+----| Y | …
| … | | | | | |
| … | | | | | |
| localhost | Paul | | N | Y | N | … +--- +--- +--- +--- +--- +---
Paul possède le privilège droit2
sur une base / table / objet Paul
root possède tous les privilèges sur une base / table / objet root
Select_priv, Insert_priv, Update_priv, Delete_priv
localhost | Paul | N | N | N | N
Vous pouvez, par analogie, pour cet exemple et pour les suivants, découvrir les prérogatives des autres accès (ici root et anonyme).
Privilèges objet (LDD) sur toutes les bases de données
La requête suivante extrait les prérogatives à propos des instructions LDD. Pour l’instant, le caractère 'N' étant dans toutes les colonnes, Paul ne peut ni créer une table ou une base (Create_priv), ni en supprimer (Drop_priv), ni créer ou supprimer un index (Index_
priv), ni modifier la structure d’une table, la renommer ou modifier une base (Alter_
priv), et ce quelle que soit la base de données (excepté les bases système test et information_schema).
SELECT Host, User, FROM mysql.user;
+---+---+---+---+---+---+
| Host | User | Create_priv | Drop_priv | Index_priv | Alter_priv | +---+---+---+---+---+---+
| localhost | root | Y | Y | Y | Y |
| localhost | | Y | Y | Y | Y |
| % | | N | N | N | N |
| |
+---+---+---+---+---+---+
Privilèges système (LCD) sur toutes les bases de données
La requête suivante extrait les prérogatives à propos des instructions LCD. Pour l’instant, le caractère 'N' étant dans toutes les colonnes, Paul ne peut ni créer un utilisateur (Create_
user_priv), ni transmettre des droits qu’il aura lui-même reçus (Grant_priv), ni lister les bases de données existantes (Show_db_priv), et ce quelle que soit la base de données.
SELECT Host,User, FROM mysql.user;
+---+---+---+---+---+
| Host | User | Create_user_priv | Grant_priv | Show_db_priv | +---+---+---+---+---+
| localhost | root | Y | Y | Y |
| localhost | | N | Y | Y |
| % | | N | N | N |
| |
+---+---+---+---+---+
Privilèges à propos des vues sur toutes les bases de données
La requête suivante extrait les prérogatives à propos des instructions relatives aux vues (views détaillées dans la section suivante). Pour l’instant, le caractère 'N' étant dans toutes les colonnes, Paul ne peut ni créer une vue (Create_view_priv), ni lister les vues existantes (Show_view_priv), et ce quelle que soit la base de données.
Create_priv, Drop_priv,Index_priv, Alter_priv
localhost | Paul | N | N | N | N
Create_user_priv, Grant_priv, Show_db_priv
localhost | Paul | N | N | N
SELECT Host,User, FROM mysql.user;
Privilèges à propos des procédures cataloguées sur toutes les bases de données La requête suivante extrait les prérogatives à propos des procédures cataloguées (détaillées dans le chapitre 7). Pour l’instant, le caractère 'N' étant dans toutes les colonnes, Paul ne peut ni créer une procédure (Create_routine_priv), ni en modifier (Alter_routine_
priv), ni en exécuter (Execute_priv), et ce quelle que soit la base de données.
SELECT Host,User, FROM mysql.user;
+---+---+---+---+---+
| Host | User | Create_routine_priv | Alter_routine_priv | Execute_priv | +---+---+---+---+---+
Privilèges à propos des restrictions d’utilisateur
La requête suivante extrait les prérogatives à propos des restrictions qu’on peut définir par accès. Pour l’instant, le chiffre étant à 0 dans toutes les colonnes, aucun accès (utilisateur) n’est limité concernant le nombre de requêtes (max_questions), de modifications (max_
updates), de connexions par heure (max_connections) et de connexions simultanées (max_user_connections) à un serveur.
SELECT Host, User, "Requetes", "Modifs" , "Connexions", "Cx simult."
Privilèges non abordés
D’autres colonnes de la table mysql.user sont intéressantes, mais sortent un peu du cadre de ce livre. J’ai donc fait l’impasse sur Create_tmp_table_priv (sert à créer des tables temporaires), Lock_tables_priv (pose des verrous explicites), Shutdown_priv (arrête et redémarre le serveur), Process_priv et Super_priv (gèrent les processus), File_
priv (accède aux fichiers du système d’exploitation), Repl_slave_priv et Repl_
client_priv (utilisés pour des aspects de réplication de données).
Nul doute que vous saurez vous servir de ces privilèges en temps voulu, par analogie avec ceux que nous allons étudier.
Le privilège References_priv n’est pas opérationnel encore. Il permettrait de bénéficier de l’intégrité référentielle entre deux tables appartenant à deux bases distinctes (par exemple la table Avion dans bd1 ferait référence par clé étrangère à la table Compagnie dans bd2).
Avant de présenter les autres tables (db, host, tables_priv, columns_priv et procs_
priv) de la base mysql, étudions les intructions relatives à l’attribution d’un privilège (GRANT), qu’il soit système ou objet, et celles relatives à la révocation d’un privilège (REVOKE).