Mysql:GRANT
| Fiche express | |
|---|---|
| Type | Commande SQL MySQL (gestion des droits) |
| Voir aussi | Mysql:show · Mysql |
GRANT est la commande SQL utilisée pour attribuer des privilèges à un utilisateur MySQL/MariaDB sur une base, une table, ou globalement (*.*). Elle se combine avec CREATE USER (création du compte) et REVOKE (retrait de privilèges).
Syntaxe
CREATE USER 'utilisateur'@'hôte' IDENTIFIED BY 'mot_de_passe'; GRANT privilège [, privilège...] ON base.table TO 'utilisateur'@'hôte'; REVOKE privilège ON base.table FROM 'utilisateur'@'hôte'; SHOW GRANTS FOR 'utilisateur'@'hôte'; FLUSH PRIVILEGES;
hôte peut être localhost (connexion locale uniquement), une IP précise, ou % (n'importe quel hôte — à réserver aux cas où c'est réellement nécessaire).
Depuis MySQL 5.7 / MariaDB 10.2, combiner création de compte et attribution de droits en une seule commande (GRANT ... IDENTIFIED BY) est déprécié : il est recommandé de séparer CREATE USER puis GRANT (à vérifier selon la version exacte du serveur).
Exemples
Créer un utilisateur applicatif dédié à une base
CREATE USER 'appuser'@'%' IDENTIFIED BY 'mot_de_passe'; GRANT ALL PRIVILEGES ON nom_base.* TO 'appuser'@'%'; FLUSH PRIVILEGES;
Compte de supervision (lecture seule)
Un outil de monitoring (Nagios, Cacti…) n'a besoin que de droits de lecture et de visibilité sur les process, jamais de droits d'écriture :
CREATE USER 'monitoring'@'ip_serveur_supervision' IDENTIFIED BY 'mot_de_passe'; GRANT USAGE ON *.* TO 'monitoring'@'ip_serveur_supervision'; GRANT PROCESS ON *.* TO 'monitoring'@'localhost'; GRANT SELECT ON *.* TO 'monitoring'@'localhost';
Compte root distant restreint
CREATE USER 'root'@'ip_admin' IDENTIFIED BY 'mot_de_passe_complexe'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'ip_admin' WITH GRANT OPTION;
Compte en lecture seule sur une table
CREATE USER 'lecteur'@'ip_client' IDENTIFIED BY 'mot_de_passe'; GRANT SELECT ON nom_base.nom_table TO 'lecteur'@'ip_client';
Changer le mot de passe root directement en base (ancienne méthode)
UPDATE mysql.user SET password = PASSWORD('nouveau_mot_de_passe') WHERE User = 'root';
FLUSH PRIVILEGES;
Depuis MySQL 5.7.6 / MariaDB 10.1.20, la colonne password et la fonction PASSWORD() sont dépréciées ; utiliser plutôt ALTER USER 'root'@'localhost' IDENTIFIED BY 'nouveau_mot_de_passe'; (à vérifier selon version).
Bonnes pratiques
- Après une installation fraîche, supprimer les comptes par défaut inutiles (utilisateurs anonymes, comptes root accessibles à distance) et ne garder que les accès nécessaires.
- Un compte dédié par application/usage plutôt qu'un compte root partagé — limite l'impact en cas de compromission.
- Générer des mots de passe robustes (gestionnaire de mots de passe) plutôt que des valeurs faciles à deviner.
- Toute modification directe des tables système (
mysql.user) doit être suivie d'unFLUSH PRIVILEGES;pour être prise en compte. - Éviter
'utilisateur'@'%'(tout hôte) quand une IP ou un sous-réseau précis suffit.
Voir aussi
- Mysql:show —
SHOW GRANTS,SHOW PROCESSLIST... - Mysql:mysql — se connecter en ligne de commande
- Mysql — panorama général MySQL/MariaDB