Mysql : comprendre root@% et root@localhost

MySQL : comprendre
root@%
et
root@localhost
Quand on installe MySQL, on voit souvent des utilisateurs comme :
root@localhost root@%
Ça peut sembler pareil… mais ce n’est pas du tout la même chose.
root@localhost
- Cet utilisateur ne peut se connecter qu’en local.
- “Local” veut dire : sur la même machine que MySQL, souvent via un socket Unix.
Exemple : tu es sur le serveur, tu tapes :
mysql -u root -p
Ça marche, car tu es en local.
root@%
-
%
est un joker → ça veut dire “toutes les IP”. -
root@%
peut donc se connecter depuis n’importe quelle machine sur le réseau (si le firewall le permet).
Exemple : tu as MySQL sur un serveur et tu te connectes depuis ton PC :
mysql -u root -p -h 192.168.1.50
Ça marche grâce à root@%.
Pourquoi ça bloque souvent ?
Par défaut, MySQL n’autorise pas root à se connecter à distance.
Il n’y a que root@localhost après l’installation → donc pas de connexion réseau possible.
Pour activer l’accès root depuis une autre machine :
CREATE USER 'root'@'%' IDENTIFIED BY 'monmotdepasse'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
Attention à la sécurité
Autoriser root depuis partout (%) = très risqué.
À éviter sur Internet.
La bonne pratique :
- Créer un utilisateur dédié (ex : app_user@'%')
- Limiter ses droits au strict nécessaire
Activer le root login distant (optionnel)
Si tu as besoin de root à distance (par ex. en développement) :
- Édite le fichier /etc/mysql/mysql.conf.d/mysqld.cnf (ou équivalent).
- Vérifie que bind-address n’est pas limité à 127.0.0.1 :
bind-address = 0.0.0.0
- Redémarre MySQL :
sudo systemctl restart mysql
Maintenant root@% pourra se connecter… mais pense à protéger ton serveur (firewall, réseau privé).
Résumé
- root@localhost → accès uniquement en local.
- root@% → accès depuis n’importe où.
- Par défaut, root distant est désactivé (seulement localhost).
- Si tu actives root@% → sécurise ton serveur !
Retour a la liste