Table des matières

MySQL : Gestion des utilisateurs et droits


Lister les utilisateurs

SELECT USER,host FROM mysql.user;

Lister les droits d'un utilisateur

SHOW GRANTS FOR 'USER'@'localhost';

Ajouter un utilisateur

mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'quelquechose' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

Autre méthode :

mysql> INSERT INTO USER VALUES('localhost','monty',PASSWORD('something'),
                'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO USER VALUES('%','monty',PASSWORD('something'),
                'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;

Mot de passe perdu pour le user root de MySQL

Pour pouvoir modifier le mot de passe root de MySQL, il faut pouvoir s'y connecter, Or, si vous n'avez pas le mot de passe root actuel, vous vous retrouvez alors dans une situation kafkaïenne. Si vous connaissez le mot de passe actuel de MySQL et que vous souhaitez juste changer le mot de passe root, vous pouvez sauter cette étape !
Heureusement, il est possible de se connecter à MySQL en échappant à la phase d'authentification (ce qui est fortement recommandé sur un serveur en production).
Pour ce faire il convient d'arrêter le serveur MySQL :

# /etc/init.d/mysql stop

Redémarrer MySQL en passant outre l'identification et en désactivant l'écoute du réseau (afin d'éviter d'être piraté à ce moment donné où MySQL est vulnérable) :

# mysqld --skip-grant-tables --skip-networking &

Réinitialiser le mot de passe

Une fois l'étape précédente réalisée ou si vous souhaitez modifier le mot de passe root (MySQL est installé par défaut sans mot de passe root), connectez-vous à la base de données système (mysql) de MySQL :

# mysql mysql -u root
Puis, saisissez la commande suivante pour mettre à jour le mot de passe root (en remplaçant évidemment nouveaumotdepasse par le votre) :
UPDATE USER SET password=PASSWORD('nouveaumotdepasse') WHERE USER="root";
Si vous n'êtes pas passé par la première étape, il suffit de prendre en compte les changement en tapant la commande suivante :
FLUSH PRIVILEGES;
Si par contre vous avez démarré MYSQL à la main en mode dégradé, il suffit de redémarrer le serveur :
#/etc/init.d/mysql restart