Guide de gestion des mots de passe MySQL : comment définir, modifier, réinitialiser et sécuriser les mots de passe (Windows, Linux, Mac)

目次

1. Introduction

L’importance de la gestion des mots de passe MySQL

MySQL est un système de gestion de bases de données largement utilisé dans le monde. Cependant, la base de sa gestion de sécurité repose sur une configuration et une administration correctes des mots de passe. Sans une gestion appropriée des mots de passe, vous pouvez rencontrer les risques suivants :

  • Accès non autorisé : Les mots de passe faibles rendent votre système vulnérable aux attaques externes.
  • Violation de données : Des informations sensibles peuvent être exposées par des utilisateurs malveillants.
  • Altération du système : La suppression ou la modification de données peut affecter le fonctionnement normal des sites web et des applications.

Pour éviter ces risques, il est essentiel de définir des mots de passe forts et de les changer régulièrement. Dans cet article, nous expliquerons en détail les aspects suivants de la gestion des mots de passe MySQL :

Comment définir des mots de passe pour les nouveaux utilisateurs
Comment changer les mots de passe des utilisateurs existants
Comment réinitialiser un mot de passe oublié
Comment vérifier la robustesse d’un mot de passe
Erreurs courantes et comment les résoudre
Paramètres recommandés pour renforcer la sécurité

En lisant cet article, vous acquerrez les connaissances et compétences nécessaires pour gérer correctement les mots de passe MySQL, alors assurez‑vous de le lire jusqu’à la fin.

2. Comment définir et modifier les mots de passe MySQL

Créer un nouvel utilisateur et définir un mot de passe

Cette section explique comment créer un nouvel utilisateur et définir un mot de passe dans MySQL.

1. Se connecter à MySQL

Tout d’abord, connectez‑vous en tant qu’administrateur MySQL (par exemple l’utilisateur root).

mysql -u root -p

-u root est une option pour se connecter en tant qu’utilisateur root, et -p affiche une invite de mot de passe.

2. Créer un nouvel utilisateur et définir un mot de passe

Utilisez la commande CREATE USER pour créer un nouvel utilisateur et définir un mot de passe.

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'secure_password';
  • 'newuser'@'localhost' : Spécifie le nom d’utilisateur ( newuser ) et l’hôte ( localhost ) depuis lequel l’utilisateur peut se connecter.
  • 'secure_password' : Le mot de passe à définir (assurez‑vous d’utiliser un mot de passe fort).

3. Accorder les privilèges appropriés

Vous devez accorder des privilèges de base de données au nouvel utilisateur. Par exemple, pour accorder tous les privilèges :

GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' WITH GRANT OPTION;
  • ALL PRIVILEGES : Accorde tous les privilèges.
  • *.* : Permet l’accès à toutes les bases de données et tables.
  • WITH GRANT OPTION : Permet à l’utilisateur d’accorder des privilèges à d’autres utilisateurs.

4. Appliquer les privilèges

Exécutez FLUSH PRIVILEGES pour appliquer les modifications.

FLUSH PRIVILEGES;

Vous avez maintenant créé avec succès un nouvel utilisateur avec un mot de passe sécurisé et les privilèges appropriés.

Modifier le mot de passe d’un utilisateur existant

Cette section explique comment modifier le mot de passe d’un utilisateur MySQL existant.

1. Se connecter à MySQL

Connectez‑vous avec des privilèges administratifs.

mysql -u root -p

2. Modifier le mot de passe avec ALTER USER (MySQL 5.7 et ultérieur)

ALTER USER 'existinguser'@'localhost' IDENTIFIED BY 'new_secure_password';
  • 'existinguser'@'localhost' : Le nom d’utilisateur et l’hôte à modifier.
  • 'new_secure_password' : Le nouveau mot de passe.

3. Modifier le mot de passe avec SET PASSWORD (MySQL 5.6 et antérieur)

SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('new_secure_password');

Utiliser la fonction PASSWORD() garantit que le mot de passe est correctement chiffré avant d’être stocké.

4. Appliquer les modifications

N’oubliez pas d’exécuter FLUSH PRIVILEGES;.

FLUSH PRIVILEGES;

Vous pouvez maintenant modifier en toute sécurité le mot de passe d’un utilisateur existant en utilisant cette méthode.

3. Comment réinitialiser un mot de passe MySQL si vous l’avez oublié

Même si vous avez oublié votre mot de passe MySQL, vous pouvez le réinitialiser en suivant la procédure appropriée. Cette section explique comment réinitialiser les mots de passe sur Windows, Linux et Mac.

Comment réinitialiser un mot de passe MySQL sous Windows

Sur Windows, une méthode courante pour réinitialiser le mot de passe root de MySQL consiste à utiliser l’option skip-grant-tables.

1. Arrêter le service MySQL

Tout d’abord, arrêtez le service MySQL en cours d’exécution sous Windows.

net stop mysql

Alternativement, vous pouvez ouvrir services.msc et arrêter manuellement le service MySQL.

2. Démarrer MySQL avec mysqld --skip-grant-tables

mysqld --skip-grant-tables --skip-networking

3. Se connecter à MySQL

mysql -u root

4. Définir un nouveau mot de passe

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

Ou, pour MySQL 5.6 et antérieur, utilisez SET PASSWORD.

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');

5. Redémarrer MySQL

net stop mysql
net start mysql

Comment réinitialiser un mot de passe MySQL sous Linux / Mac

1. Arrêter le service MySQL

sudo systemctl stop mysql

2. Démarrer MySQL en mode --skip-grant-tables

sudo mysqld_safe --skip-grant-tables --skip-networking &

3. Se connecter à MySQL

mysql -u root

4. Réinitialiser le mot de passe

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

5. Redémarrer MySQL

sudo systemctl start mysql

Modifications des méthodes de réinitialisation du mot de passe dans MySQL 8.0 et versions ultérieures

Dans MySQL 8.0, le mécanisme de gestion des mots de passe a changé, vous devez donc prendre en compte le point suivant.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';

Cela vous permet de continuer à utiliser la méthode d’authentification par mot de passe héritée si nécessaire.

4. Résolution des erreurs courantes lors du changement de mots de passe MySQL

Vous pouvez rencontrer des erreurs en essayant de changer les mots de passe MySQL. Cette section explique les causes et les solutions des erreurs courantes.

ERREUR 1045 (28000) : Accès refusé pour l’utilisateur

Cause de l’erreur

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Cette erreur se produit lors de la connexion à MySQL si le mot de passe est incorrect ou les privilèges sont insuffisants.

Solution

  1. Vérifiez à nouveau le mot de passe que vous avez saisi
  2. Spécifiez le nom d’utilisateur et l’hôte corrects
    SELECT User, Host FROM mysql.user;
    
  1. Réinitialisez le mot de passe (voir la section de réinitialisation du mot de passe)
  2. Configurez correctement les privilèges
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

ERREUR 1133 : Impossible de trouver une ligne correspondante dans la table des utilisateurs

Cause de l’erreur

ERROR 1133: Can't find any matching row in the user table

Cette erreur se produit lorsque l’utilisateur spécifié n’existe pas.

Solution

  1. Vérifiez la liste actuelle des utilisateurs
    SELECT User, Host FROM mysql.user;
    
  1. Recréez l’utilisateur
    CREATE USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
    
  1. Spécifiez l’hôte correct (utilisez localhost ou % de manière appropriée)

ERREUR 1820 : Vous devez réinitialiser votre mot de passe

Cause de l’erreur

ERROR 1820: You must reset your password using ALTER USER statement before executing this statement.

Cette erreur se produit lorsque le mot de passe a expiré.

Solution

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

Pour désactiver l’expiration du mot de passe :

SET GLOBAL default_password_lifetime = 0;

ERREUR 2059 : Le plugin caching_sha2_password n’a pas pu être chargé

Cause de l’erreur

ERROR 2059: Plugin caching_sha2_password could not be loaded

Dans MySQL 8.0 et versions ultérieures, le plugin d’authentification par défaut est passé à caching_sha2_password, ce qui peut provoquer des erreurs avec certains clients.

Solution

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';

Ou ajoutez ce qui suit au fichier de configuration MySQL (my.cnf ou my.ini) et redémarrez MySQL.

[mysqld]
default_authentication_plugin=mysql_native_password

Redémarrer MySQL:

sudo systemctl restart mysql

5. Renforcement de la sécurité MySQL et paramètres recommandés

Renforcer la sécurité de MySQL est essentiel pour améliorer la sûreté de la base de données et prévenir les accès non autorisés et les violations de données. Cette section présente les configurations recommandées pour renforcer la sécurité de MySQL.

Définir des mots de passe forts

Utiliser des mots de passe faibles dans MySQL rend votre système une cible facile pour les attaquants. Configurez les paramètres pour augmenter la robustesse des mots de passe.

Activer une politique de mot de passe

Vérifiez la politique de mot de passe actuelle:

SHOW VARIABLES LIKE 'validate_password%';

Configurez une politique de mot de passe forte:

SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

Définir l’expiration du mot de passe

Changer régulièrement les mots de passe renforce la sécurité.

Vérifiez le paramètre d’expiration du mot de passe actuel:

SHOW VARIABLES LIKE 'default_password_lifetime';

Définissez l’expiration du mot de passe à 90 jours:

SET GLOBAL default_password_lifetime = 90;

Renforcer la sécurité de l’utilisateur root

Restreindre l’accès distant pour l’utilisateur root

Vérifiez la configuration d’hôte actuelle pour l’utilisateur root:

SELECT User, Host FROM mysql.user WHERE User = 'root';

Désactivez l’accès distant pour root:

UPDATE mysql.user SET Host='localhost' WHERE User='root';
FLUSH PRIVILEGES;

Créer un compte administrateur alternatif et désactiver root

CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
RENAME USER 'root'@'localhost' TO 'disabled_root'@'localhost';
FLUSH PRIVILEGES;

Restreindre les connexions distantes MySQL

Modifiez le fichier de configuration (my.cnf ou my.ini):

[mysqld]
bind-address = 127.0.0.1

Configurez le pare-feu sous Linux:

sudo ufw deny 3306

Autorisez uniquement une adresse IP spécifique:

sudo ufw allow from 192.168.1.100 to any port 3306

Supprimer les comptes et privilèges inutiles

Vérifiez la liste actuelle des utilisateurs:

SELECT User, Host FROM mysql.user;

Supprimez les utilisateurs anonymes:

DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;

Supprimez la base de données de test inutile:

DROP DATABASE test;
FLUSH PRIVILEGES;

Activer la journalisation MySQL

Activez le journal d’erreurs:

[mysqld]
log_error = /var/log/mysql/error.log

Activez le journal général des requêtes:

general_log = 1
general_log_file = /var/log/mysql/general.log

Redémarrer MySQL:

sudo systemctl restart mysql

6. Questions fréquemment posées (FAQ)

Cette section résume les questions courantes et leurs solutions liées à la configuration, la modification et la réinitialisation du mot de passe MySQL.

Q1 : Quelle est la façon la plus simple de récupérer un mot de passe root MySQL oublié ?

Solution

  1. Arrêter MySQL
    sudo systemctl stop mysql
    
  1. Démarrer MySQL en mode skip-grant-tables
    sudo mysqld_safe --skip-grant-tables --skip-networking &
    
  1. Se connecter à MySQL
    mysql -u root
    
  1. Définir un nouveau mot de passe
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
    
  1. Redémarrer MySQL
    sudo systemctl restart mysql
    

Q2 : Que faire si j’obtiens « ERROR 1045 (28000) : Access denied for user » ?

Solution

  1. Vérifier le mot de passe que vous avez saisi
    mysql -u root -p
    
  1. Confirmer que l’utilisateur existe
    SELECT User, Host FROM mysql.user;
    
  1. Réinitialiser le mot de passe (voir les instructions précédentes)

  2. Accorder les privilèges appropriés

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

Q3 : Y a-t-il une différence entre MySQL 5.6 et 8.0 lors du changement de mots de passe ?

Modifier le mot de passe dans MySQL 5.6 et antérieur

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');

Modifier le mot de passe dans MySQL 8.0 et versions ultérieures

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

Dans MySQL 8.0, puisque caching_sha2_password est la méthode d’authentification par défaut, les clients plus anciens peuvent nécessiter l’ajustement suivant :

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_secure_password';

Q4 : Comment renforcer la politique de mot de passe MySQL ?

Configurer une politique de mot de passe forte

SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

Q5 : Est-il sûr de désactiver l’utilisateur root de MySQL ?

Solution

  1. Créer un compte administrateur
    CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'secure_password';
    GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
    
  1. Désactiver le compte root
    RENAME USER 'root'@'localhost' TO 'disabled_root'@'localhost';
    FLUSH PRIVILEGES;
    

Q6 : Existe-t-il des outils pour gérer les mots de passe MySQL de manière sécurisée ?

Solution

  1. mysql_config_editor (Outil officiel MySQL)
    mysql_config_editor set --login-path=local --host=localhost --user=root --password
    

Cela vous permet de vous connecter sans saisir explicitement le mot de passe.

mysql --login-path=local
  1. Gestionnaires de mots de passe (Bitwarden, 1Password, KeePass, etc.)
  • Utile pour générer et stocker en toute sécurité des mots de passe forts.

Q7 : Puis-je consigner les changements de mot de passe MySQL ?

Solution

Activer le journal général des requêtes

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log

Redémarrer MySQL :

sudo systemctl restart mysql

7. Conclusion

Cet article a expliqué tout, des bases aux techniques avancées, de la gestion des mots de passe MySQL. Vous trouverez ci‑dessous un résumé des points clés ainsi qu’une liste de contrôle pour gérer correctement les mots de passe MySQL.

Points clés de la gestion des mots de passe MySQL

Une configuration et une gestion appropriées des mots de passe sont la base de la sécurité
Définir des mots de passe forts lors de la création de nouveaux utilisateurs
Changer régulièrement les mots de passe et configurer des politiques d’expiration
Comprendre les procédures de récupération en cas d’oubli de mot de passe
Diagnostiquer correctement les erreurs lors des changements de mot de passe
Optimiser l’accès distant et la gestion de l’utilisateur root pour renforcer la sécurité
Activer la journalisation pour suivre les activités liées aux mots de passe

Liste de contrôle de la gestion des mots de passe MySQL

Checklist ItemStatus
Have you set a strong root password for MySQL?✅ / ❌
Do you use the CREATE USER command when creating new users?✅ / ❌
Have you enabled the validate_password plugin and configured a strong password policy?✅ / ❌
Do you regularly change passwords and set expiration policies?✅ / ❌
Have you disabled remote access for the root user?✅ / ❌
Have you removed unnecessary or anonymous accounts?✅ / ❌
Do you understand how to reset passwords using skip-grant-tables mode?✅ / ❌
Do you understand how to resolve ERROR 1045 and ERROR 1820 during password changes?✅ / ❌
Have you enabled MySQL logs (general_log and error_log)?✅ / ❌

Actions recommandées à entreprendre après la lecture de cet article

  1. Révisez votre politique de mot de passe actuelle et renforcez‑la si nécessaire
    SHOW VARIABLES LIKE 'validate_password%';
    SET GLOBAL validate_password.policy = STRONG;
    SET GLOBAL validate_password.length = 12;
    
  1. Supprimez les comptes inutiles
    DELETE FROM mysql.user WHERE User='';
    DROP DATABASE test;
    FLUSH PRIVILEGES;
    
  1. Restreignez l’accès distant pour l’utilisateur root
    UPDATE mysql.user SET Host='localhost' WHERE User='root';
    FLUSH PRIVILEGES;
    
  1. Configurez une expiration régulière des mots de passe
    SET GLOBAL default_password_lifetime = 90;
    
  1. Activez la journalisation pour la surveillance
    [mysqld]
    log_error = /var/log/mysql/error.log
    general_log = 1
    general_log_file = /var/log/mysql/general.log
    

Redémarrer MySQL:

sudo systemctl restart mysql

Articles associés pour approfondir

📌 Guide détaillé de la gestion des privilèges utilisateur MySQL
📌 Procédures de sauvegarde et de restauration MySQL
📌 Comment optimiser les bases de données MySQL
📌 Configurer MySQL avec une authentification externe (LDAP ou OAuth)

Réflexions finales

La gestion des mots de passe MySQL est une connaissance essentielle pour protéger la sécurité des bases de données.
Appliquez les pratiques présentées dans ce guide et assurez une gestion sécurisée des bases de données ! 💪