Gestion des utilisateurs dans MySQL

Deux parties :

Ajouter des privilèges

GRANT privileges
ON base.table
TO user@host IDENTIFIED BY 'password';

Si l'utilisateur n'existe pas il est crée. Si l'utilisateur existe déjà les privilèges sont ajoutés.

Privilèges

C'est le type de requête que l'utilisateur a le droit de faire.

Exemple : GRANT SELECT, INSERT ON ....

Pour lui donner des droits de gestion des utilisateurs on rajoute à la fin ... WITH GRANT OPTION;. Mais on ne peut donner un privilège que s'il on a le privilège soi-même.

Tables

On choisit après le ON sur quelle table l'utilisateur a le droit de faire ses privilèges. Attention on peut donner des droits sur une table qui n'existe pas sans faire d'erreur.

Notation : ... ON base.table ...

En SQL non-standard (mais fonctionne sur la grande majorité des SGBD) on peut donner des droits sur l'ensemble des tables et futures tables d'une même base.

Notation : ... ON base.* ou encore *.* pour toutes les bases à la fois.

Nom

Notation : ... TO 'user'@'host' ....

Utilisateur

Attention comme on peut ajouter des utilisateurs on peut donner des droits a un utilisateur qui n'existe pas sans faire d'erreur. Les quotes sont facultatives s'il n'y a pas de caracteres spéciaux.

Hôte

Exemples :

L'hôte localhost sera toujours traité à part, il faudra toujours l'ajouter dans une deuxième requête. Les quotes sont facultatives s'il n'y a pas le joker %.

Mot de passe

Notation : ... IDENTIFIED BY 'motdepasse';

Si l'utilisateur n'a pas de mot de passe ou s'il a déjà un mot de passe à cet hôte pas besoin de mettre IDENTIFIED BY. Sur un utilisateur déjà existant ça lui remet un nouveau mot de passe. Pour retirer un mot de passe : ... IDENTIFIED BY ''.

Attention le mot de passe est en clair. Pour le donner de manière déjà cryptée on utilise : ... IDENTIFIED BY PASSWORD 'md5crypté'. (Le mot-clé PASSWORD est à ne pas confondre avec la fonction PASSWORD('chaîne') qui crypte la chaîne.)

Retirer les privilèges

REVOKE privilege
ON base.table
FROM user@host;

Voir les privilèges

En MySQL uniquement SHOW GRANTS; affiche les droits de l'utilisateur courant sur la machine où il se connecte. SHOW GRANTS FOR user@host; permet de voir les privilèges des autres utilisateurs.

Sous MySQL la table user de la table mysql contient tous les droits des utilisateurs. Avec les droits suffisants on peut également les gérer. Dès que l'on modifie directement les utilisateurs dans la base il faut utiliser FLUSH PRIVILEGES; après pour prendre en compte les modifications.

Exemples SQL

#1. Créer un utilisateur webmaster, mot de passe www, ayant le droit
# de modifier toutes les données de la base école à partir de n'importe où.

GRANT SELECT, INSERT, UPDATE, DELETE
ON ecole.*
TO 'webmaster'@'localhost' IDENTIFIED BY 'www';

GRANT USAGE
ON ecole.*
TO 'webmaster'@'%';

#2. Créer un utilisateur admin:admin qui peut manipuler les données
# et le schéma et créer des utilisateurs de la base ecole mais seulement
# à partir de localhost.

GRANT ALL
ON ecole.*
TO 'admin'@'localhost' IDENTIFIED BY 'admin'
WITH GRANT OPTION;