15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
01.11.2024
1 +1

Comment créer un nouvel utilisateur et définir les autorisations dans MySQL

MySQL reste l’un des systèmes de gestion de bases de données relationnelles les plus largement déployés au monde, alimentant tout, des petits projets personnels aux applications à l’échelle de l’entreprise. Que vous soyez développeur, administrateur système ou propriétaire d’entreprise gérant votre propre infrastructure, savoir comment créer des utilisateurs MySQL et configurer leurs permissions est une compétence non négociable pour maintenir un environnement de base de données sécurisé et bien organisé.

La mauvaise gestion des utilisateurs est l’une des principales causes des violations de bases de données. Accorder des privilèges excessifs, réutiliser des identifiants ou laisser des comptes par défaut actifs peut exposer toute votre couche de données à des risques inutiles. Ce guide vous guide à travers le processus complet — de la connexion à MySQL à la vérification des permissions — avec des commandes claires, des exemples pratiques et les meilleures pratiques de sécurité à chaque étape.

Pourquoi la gestion des utilisateurs MySQL est importante

Avant de plonger dans les commandes, il vaut la peine de comprendre *pourquoi* cela importe. MySQL fonctionne selon un principe du moindre privilège : chaque utilisateur ne devrait avoir accès que aux bases de données, tables et opérations spécifiques dont il a réellement besoin. Cela minimise le rayon d’impact d’un compte compromis et rend l’audit beaucoup plus facile.

Si vous exécutez MySQL sur un plan VPS Hosting géré ou un Serveur Dédié, vous avez un accès complet au niveau root à votre instance MySQL, vous donnant un contrôle total sur la création d’utilisateurs et la gestion des permissions. De nombreux environnements de panneau de contrôle — tels que ceux disponibles avec VPS avec cPanel — fournissent également une interface graphique pour la gestion de MySQL, qui peut compléter l’approche en ligne de commande décrite ici.

Prérequis

Avant de commencer, assurez-vous d’avoir :

  • MySQL 5.7+ ou MySQL 8.0+ installé et en cours d’exécution sur votre serveur
  • Accès root ou accès à un compte superutilisateur MySQL avec privilèges GRANT OPTION
  • Accès au terminal (Linux/macOS) ou Invite de commandes / PowerShell (Windows)

Étape 1 : Se connecter à MySQL

Pour gérer les utilisateurs et les permissions, vous devez vous authentifier en tant qu’utilisateur disposant de privilèges administratifs suffisants. Dans la plupart des cas, il s’agit du compte root.

Ouvrez votre terminal ou invite de commandes

  • Linux / macOS : Ouvrez votre application terminal
  • Windows : Ouvrez l’Invite de commandes ou PowerShell

Connectez-vous au serveur MySQL

Exécutez la commande suivante :

mysql -u root -p

Vous serez invité à entrer le mot de passe root. Après une authentification réussie, vous verrez l’invite MySQL :

mysql>

> Conseil de sécurité : Si vous vous connectez à un serveur MySQL distant, spécifiez l’hôte avec le drapeau -h :

> “`bash

> mysql -u root -p -h your_server_ip

> “`

Étape 2 : Créer un nouvel utilisateur MySQL

Une fois à l’intérieur du shell MySQL, vous pouvez créer un nouvel utilisateur avec l’instruction CREATE USER.

Syntaxe

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

Ventilation des paramètres :

ParamètreDescription
usernameLe nom que vous souhaitez attribuer au nouvel utilisateur
hostL’hôte à partir duquel l’utilisateur est autorisé à se connecter. Utilisez localhost pour un accès local uniquement ou % comme caractère générique pour n’importe quel hôte
passwordUn mot de passe fort et unique pour cet utilisateur

Exemple : Créer un utilisateur accessible depuis n’importe quel hôte

CREATE USER 'newuser'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';

Exemple : Créer un utilisateur limité à localhost

CREATE USER 'localuser'@'localhost' IDENTIFIED BY 'AnotherStr0ng#Pass';

> Bonne pratique : Dans la mesure du possible, limitez les utilisateurs à localhost ou à une adresse IP spécifique plutôt que d’utiliser %. L’accès à l’hôte générique augmente inutilement votre surface d’attaque.

Note MySQL 8.0 sur les plugins d’authentification

MySQL 8.0 a introduit caching_sha2_password comme plugin d’authentification par défaut, ce qui peut causer des problèmes de compatibilité avec les anciens clients ou applications. Si nécessaire, vous pouvez définir explicitement la méthode d’authentification :

CREATE USER 'newuser'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongP@ssw0rd!';

Étape 3 : Accorder des permissions à l’utilisateur

La création d’un utilisateur ne lui accorde pas automatiquement l’accès à une base de données. Vous devez explicitement assigner des privilèges en utilisant l’instruction GRANT.

Syntaxe

GRANT privileges ON database.table TO 'username'@'host';

Ventilation des paramètres :

ParamètreDescription
privilegesUne liste séparée par des virgules de permissions (par exemple, SELECT, INSERT, UPDATE, DELETE) ou ALL PRIVILEGES
database.tableLa portée de l’octroi. Utilisez *.* pour toutes les bases de données et tables, dbname.* pour toutes les tables d’une base de données spécifique, ou dbname.tablename pour une seule table
username@hostLe compte utilisateur cible

Permissions MySQL courantes

PermissionDescription
SELECTLire les données des tables
INSERTAjouter de nouvelles lignes aux tables
UPDATEModifier les lignes existantes
DELETESupprimer les lignes des tables
CREATECréer de nouvelles bases de données ou tables
DROPSupprimer les bases de données ou tables
INDEXCréer ou supprimer des index
ALTERModifier les structures de table
ALL PRIVILEGESAccès complet (à utiliser avec prudence)
GRANT OPTIONPermettre à l’utilisateur d’accorder des privilèges à d’autres

Exemple : Accorder un accès complet à une base de données spécifique

GRANT ALL PRIVILEGES ON exampledb.* TO 'newuser'@'%';

Exemple : Accorder un accès en lecture seule

GRANT SELECT ON exampledb.* TO 'readonly_user'@'localhost';

Exemple : Accorder des permissions spécifiques sur une seule table

GRANT SELECT, INSERT, UPDATE ON exampledb.orders TO 'app_user'@'localhost';

Exemple : Accorder des permissions globales (à utiliser avec parcimonie)

GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;

> Avertissement : L’octroi de ALL PRIVILEGES ON *.* donne à un utilisateur un accès équivalent à superutilisateur. Réservez cela uniquement aux comptes administratifs de confiance.

Étape 4 : Vider les permissions

Après avoir apporté des modifications aux permissions des utilisateurs, il est bon de recharger les tables de privilèges pour que MySQL reconnaisse immédiatement vos modifications :

FLUSH PRIVILEGES;

> Remarque : Dans les versions modernes de MySQL (5.7.3+), FLUSH PRIVILEGES est automatiquement déclenché après les instructions GRANT, REVOKE et CREATE USER. Cependant, l’exécuter explicitement après les modifications manuelles aux tables système mysql (via INSERT ou UPDATE) reste essentielle.

Étape 5 : Vérifier les permissions des utilisateurs

Confirmez toujours que les permissions que vous avez définies sont correctes avant de mettre un compte utilisateur en production.

Vérifier les octrois pour un utilisateur spécifique

SHOW GRANTS FOR 'newuser'@'%';

Exemple de sortie :

+--------------------------------------------------------------+
| Grants for newuser@%                                         |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `newuser`@`%`                          |
| GRANT ALL PRIVILEGES ON `exampledb`.* TO `newuser`@`%`       |
+--------------------------------------------------------------+

Lister tous les utilisateurs MySQL

SELECT user, host FROM mysql.user;

Vérifier les permissions de votre propre utilisateur actuel

SHOW GRANTS;

Étape 6 : Révoquer les permissions (si nécessaire)

Les permissions changent au fil du temps. Quand un utilisateur n’a plus besoin d’un certain accès, révoquez-le rapidement en utilisant l’instruction REVOKE :

Syntaxe

REVOKE privileges ON database.table FROM 'username'@'host';

Exemple : Révoquer toutes les permissions d’un utilisateur

REVOKE ALL PRIVILEGES ON exampledb.* FROM 'newuser'@'%';
FLUSH PRIVILEGES;

Exemple : Révoquer une permission spécifique

REVOKE DELETE ON exampledb.orders FROM 'app_user'@'localhost';

Étape 7 : Supprimer un utilisateur (si nécessaire)

Si un compte utilisateur n’est plus nécessaire, supprimez-le entièrement pour éliminer les vecteurs d’accès inutiles :

DROP USER 'newuser'@'%';

Cette commande supprime le compte utilisateur et tous les privilèges associés en une seule opération.

Gestion des utilisateurs MySQL dans les environnements hébergés

Si vous gérez MySQL dans un environnement d’hébergement partagé ou géré, le processus peut différer légèrement selon votre panneau de contrôle. Des plateformes comme cPanel, Plesk et DirectAdmin fournissent des interfaces graphiques pour créer des utilisateurs MySQL et assigner des permissions sans écrire directement du SQL.

Pour les utilisateurs qui ont besoin d’un contrôle complet en ligne de commande sans la surcharge d’un serveur dédié, les plans VPS Hosting offrent l’équilibre idéal entre performance, flexibilité et coût. Si vous exécutez des applications gourmandes en bases de données qui nécessitent un débit maximal et des ressources isolées, envisagez de passer à un Serveur Dédié pour des performances garanties.

Pour les petits projets ou environnements de développement, les plans Hébergement Web Partagé incluent généralement l’accès à phpMyAdmin, qui fournit une interface basée sur navigateur pour la gestion des utilisateurs et bases de données MySQL.

De plus, si votre application traite des données utilisateur sensibles, l’association de votre serveur de base de données avec un Certificat SSL valide garantit que les données transmises entre votre application et le serveur de base de données restent chiffrées et protégées contre l’interception.

Meilleures pratiques de sécurité pour la gestion des utilisateurs MySQL

Suivre les étapes techniques n’est que la moitié du travail. Voici les pratiques de sécurité critiques que chaque administrateur devrait mettre en œuvre :

  1. N’utilisez jamais le compte root pour les connexions d’application. Créez des utilisateurs dédiés avec le moindre privilège pour chaque application.
  2. Utilisez des mots de passe forts et uniques pour chaque utilisateur MySQL. Envisagez un gestionnaire de mots de passe ou un coffre-fort de secrets.
  3. Limitez l’accès à l’hôte à localhost ou à des adresses IP spécifiques dans la mesure du possible.
  4. Auditez régulièrement les comptes utilisateurs. Supprimez les comptes qui ne sont plus actifs ou nécessaires.
  5. Évitez les octrois génériques (*.*) sauf si absolument nécessaire pour les tâches administratives.
  6. Activez le plugin de journal d’audit MySQL sur les serveurs de production pour suivre toute l’activité des utilisateurs.
  7. Faites pivoter les mots de passe périodiquement, en particulier après les changements de personnel ou les compromis suspectés.

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer