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. ![]() 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... voir ![]() 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 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... 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! 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; ![]() 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. mysql> DESCRIBE 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; |