Les droits sont conservés dans les tables user
, db
, host
, tables_priv
et columns_priv
de la base de données. Le serveur MySQL lis le contenu de ces tables au démarrage, et à chaque fois que c'est nécessaire, comme décrit dans la section 6.9 Prise en compte des modifications de droits.
Les noms utilisés dans ce manuel pour se référer aux droits de MySQL sont listés ci-dessous, avec le nom de la colonne associé à chaque droit dans la table de droits, et le contexte d'application du droit.
Les droits select, insert, update et delete permettent d'exécuter des opérations sur les lignes dans les tables existantes d'une base. Vous pouvez même exécuter certaines commandes SELECT
sans avoir accès à aucune base sur le serveur. Par exemple, vous pouvez utiliser mysql
comme une simple calculatrice :
mysql> SELECT 1+1;
mysql> SELECT PI()*2;
Le droit index vous permet de créer ou de détruire des index.
Le droit alter vous permet d'utiliser la commande ALTER TABLE
.
Les droits create et drop vous permet de créer et détruire de nouvelles tables et bases.
Il faut bien remarquer que si vous donnez le droit de drop pour la base mysql
, un utilisateur pourra effacer la table des droits MySQL!
Le droit grant vous permet de donner des droits que vous possédez à un autre utilisateur.
Le droit file vous permet de lire et écrire des fichiers sur le serveur, en utilisant les commandes LOAD DATA INFILE
et SELECT ... INTO OUTFILE
. Tout utilisateur qui dispose de ce droit peut écrire ou lire des fichiers que MySQL peut écrire ou lire.
Les autres droits sont utilisés pour les opérations administratives, qui sont disponibles avec mysqladmin
. La table ci-dessous montre quelle droit donne accès à quelle commande mysqladmi
:
La commande reload
force le serveur à relire les tables de droits. La commande refresh
vide toutes les tables de la mémoire, et ouvre puis ferme les fichiers d'historique. flush-privileges
est un synonyme de reload
. Les autres commandes flush-*
exécutent des fonctions similaires à refresh
mais ne sont pas aussi limitées, et parfois même, elles sont préférables. Par exemple, si vous souhaitez uniquement enregistrer les fichiers d'historique, flush-logs
est mieux que refresh
.
La commande shutdown
éteint le serveur.
La commande processlist
affiche la liste des threads courant du serveur. La commande kill
arrête les threads du serveur. Vous pouvez toujours afficher et détruire les threads que vous possédez, mais vous devez avoir les droits de process pour afficher ou terminer les threads d'un autre utilisateur.
La meilleure stratégie est de ne donner des droits qu'à ceux qui en ont besoin, mais il faut être particulièrement prudents avec certains droits :
- Le droit de grant permet à utilisateur de donner ses propres droits à un autre. Deux utilisateurs pourront alors s'échanger les droits, et ainsi, obtenir des droits supplémentaires.
- Les droits de alter peuvent être utilisés pour renommer des tables systèmes
- Les droits de file peuvent être détourné : en lisant n'importe quel fichier (sensible de préférence) sur le serveur pour le monter dans une base de données, il est alors possible d'accéder au contenu en utilisant la commande
SELECT
.
- Les droits de shutdown peuvent être utilisé pour empêcher l'accès au serveur, en l'éteignant.
- Les droits de process permettent à un utilisateur de voir les commandes des autres utilisateurs, sans cryptage, notamment les commandes de changement de mot de passe.
- Les droits sur la base
mysql
peuvent être utilisés pour changer des mots de passe, ou tout autre droit d'accès. (Les mots de passes sont cryptés avant d'être enregistrés, ce qui empêche leur relecture. Mais avec les droits adéquats, un utilisateur peu scrupuleux peu les remplacer par d'autre mot de passe, et empêcher l'accès).
Il y a des limitations avec les droits MySQL:
- Vous ne pouvez pas refuser des droits à un utilisateur. Vous ne pouvez pas spécifier un utilisateur, et lui refuser spécialement les droits de connexion.
- Vous ne pouvez pas séparer les droits de création et d'effacement des tables et de la bases de données qui les contient. L'utilisateur pourra créer et effacer les tables ET la base.