Vérif requêtes
Vérification des requêtes MySQL afin de s'assurer que l'utilisateur a les privilèges nécessaires à son exécution
Après avoir vérifier les privilèges de l'utilisateur au niveau de la connexion avec les trois premiers champs de la table user (Host, User et password), les privilèges sont ensuite vérifiés au niveau des différents privilèges de l'utilisateur à partir des tables user, db, host, tables_priv et columns_priv.
mysql> USE mysql;
mysql> SHOW tables;
MySQL vérifie d'abord si l'utilisateur à les privilèges pour exécuter sa requête au niveau de la table user, puis si les privilèges ne sont pas suffisants, il consulte les tables db et host conjointement. Si les privilèges ne suffisent pas, MySQL consulte la table tables_priv puis en dernier recours la table columns_priv. Si aucun privilège n'est trouvé, la requête est refusée pour l'utilisateur.
La table user
mysql> DESCRIBE user;
La première colonne FIELD liste le trois champs de connexion (Host, User et password) puis les différents privilèges globaux de l'utilisateur, c'est à dire, ceux s'appliquant à toutes les bases de données et au serveur lui-même. Chaque champ est caractérisé par un type enum (qui n'accepte que les valeurs listés, ici : Y ou N). La valeur par défaut est N, le refus de privilège.
Descriptif des privilèges- Select_priv : privilège de sélectionner (lire) des données.
- Insert_priv : privilège d'insérer (ajouter) des données.
- Update_priv : privilège de mettre à jour (modifier) des données
mysql> GRANT select ON mabase.* TO titi@localhost;
mysql> REVOKE select ON mabase.* TO titi@localhost;
Les tables db et host
mysql> DESCRIBE db;
La plupart des privilèges classique sont stockés dans ces tables.. La table db détermine quels utilisateurs peuvent se connecter depuis quels hôtes sur quelles base de données. Nous pouvons spécifier des privilèges liés à chacun de ces triples critères.
La table host est un complément de la table db. Elle permet de spécifier qu'un utilisateur peut se connecter depuis plusieurs hôtes en ayant des droits communs au niveau de la table db. Cette table évite les doublons au niveau de la table db. Il suffit de laisser le champ Host vide pour que MySQL lise la table host pour compléter ses informations. Dans ces deux table le caractère générique % est utilisé pour exprimer 'tous' ou 'tous le monde'.mysql> DESCRIBE host;
Dans la table host, nous retrouvons les mêmes privilèges que dans la table db. Nous pouvons donc accorder des privilèges communs à tous les hôtes au niveau de la table db et accorder certains privilèges à certains hôtes au niveau de la table host.
mysql> USE mysql;
mysql> SELECT * FROM db;
mysql> SELECT * FROM host;
Les tables tables_priv et columns_priv
mysql> DESCRIBE tables_priv;
Ces deux tables ont un fonctionnement similaire et permettent de stocker des privilèges liés aux tables et aux colonnes.
La table tables_priv détermine si un utilisateur peut agir sur une table si aucun droit plus général ne lui est accordé au niveau des tables user, db et host.
La table columns_priv détermine si un utilisateur peut agir sur une colonne d'une table si aucun droit plus général ne lui est accordé au niveau des tables user, db, host et tables_priv. Accordons le privilège select à titi sur la table clientsmysql> GRANT select ON mabase.clients TO titi@localhost;
mysql> REVOKE select ON mabase.clients TO titi@localhost;
mysql> GRANT select(prenom, nom) ON mabase.clients TO titi@localhost;
mysql> REVOKE select(prenom, nom) ON mabase.clients TO titi@localhost;