Easy-Micro

ESPACEMEMBRE MySQL/MariaDB
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.

Formation MySQL par Easy-Micro 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
Accordons le privilège select à titi
mysql> GRANT select ON mabase.* TO titi@localhost;
Révoquons ce privilège
mysql> REVOKE select ON mabase.* TO titi@localhost;

Formation MySQL par Easy-Micro Les tables db et host

mysql> DESCRIBE db;
Nous retrouvons dans la table db la majorité des privilèges de la table User. Seuls les privilèges liés au serveur ne sont pas présent ici : Reload_priv, ShutDown_priv...

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;
Réponse : empty set! Aucun privilèges n'est accordé à personne!

Formation MySQL par Easy-Micro 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 clients
mysql> GRANT select ON mabase.clients TO titi@localhost;
Révoquons ce privilège
mysql> REVOKE select ON mabase.clients TO titi@localhost;
Accordons à titi le privilège de lire les colonnes prenom et nom de la table clients
mysql> GRANT select(prenom, nom) ON mabase.clients TO titi@localhost;
Révoquons ce privilège
mysql> REVOKE select(prenom, nom) ON mabase.clients TO titi@localhost;

< Page précédente MYSQL/MARIADB Page suivante >