Comment réinitialiser votre mot de passe root MySQL ou MariaDB sur Ubuntu 18.04

introduction

Oublier les mots de passe arrive au meilleur de nous. Si vous oubliez ou perdez le mot de passe * root * de votre base de données MySQL ou MariaDB, vous pouvez toujours y accéder et le réinitialiser si vous avez accès au serveur et à un compte utilisateur doté des privilèges sudo +.

Ce tutoriel explique comment réinitialiser le mot de passe * root * des bases de données MySQL et MariaDB installées avec le gestionnaire de paquets + apt + sous Ubuntu 18.04. La procédure de modification du mot de passe root varie selon que vous avez ou non MySQL ou MariaDB installé, ainsi que selon la configuration systemd par défaut fournie avec la distribution ou les packages d’autres fournisseurs. Bien que les instructions de ce didacticiel puissent fonctionner avec d’autres versions du système ou du serveur de base de données, elles ont été spécifiquement testées avec Ubuntu 18.04 et les packages fournis par la distribution.

Conditions préalables

Pour récupérer votre mot de passe MySQL ou MariaDB * root *, vous aurez besoin des éléments suivants:

Étape 1 - Identification de la version de la base de données et arrêt du serveur

Ubuntu 18.04 utilise MySQL ou MariaDB, un système de remplacement populaire totalement compatible avec MySQL. Vous devrez utiliser différentes commandes pour récupérer le mot de passe + racine + en fonction de celui que vous avez installé. Suivez donc les étapes décrites dans cette section pour déterminer le serveur de base de données que vous utilisez.

Vérifiez votre version avec la commande suivante:

mysql --version

Si vous exécutez MariaDB, “MariaDB” sera précédé du numéro de version dans le résultat:

MariaDB outputmysql  Ver 15.1 Distrib -, for debian-linux-gnu (x86_64) using readline 5.2

Vous verrez cette sortie si vous utilisez MySQL:

MySQL outputmysql  Ver 14.14 Distrib , for Linux (x86_64) using  EditLine wrapper

Notez quelle base de données, car cela détermine les commandes appropriées à suivre dans la suite de ce didacticiel.

Pour changer le mot de passe * root *, vous devez arrêter le serveur de base de données. Si vous exécutez MariaDB, vous pouvez le faire avec la commande suivante:

sudo systemctl stop

Pour MySQL, arrêtez le serveur de base de données en lançant:

sudo systemctl stop

La base de données étant arrêtée, vous pouvez la redémarrer en mode sans échec pour réinitialiser le mot de passe root.

Étape 2 - Redémarrage du serveur de base de données sans vérification des autorisations

L’exécution de MySQL et de MariaDB sans vérification des autorisations permet d’accéder à la ligne de commande de la base de données avec les privilèges root sans fournir de mot de passe valide. Pour ce faire, vous devez empêcher la base de données de charger les tables _grant, qui stockent les informations de privilège utilisateur. Comme il s’agit là d’un risque pour la sécurité, vous pouvez également désactiver le réseau pour empêcher d’autres clients de se connecter au serveur temporairement vulnérable.

Selon le serveur de base de données que vous avez installé, la méthode de démarrage du serveur sans charger les tables grant diffère.

Configuration de MariaDB pour démarrer sans tables d’attribution

Afin de démarrer le serveur MariaDB sans les tables de droits, nous utiliserons le fichier unité + systemd + pour définir des paramètres supplémentaires pour le démon du serveur MariaDB.

Exécutez la commande suivante qui définit la variable d’environnement MYSQLD_OPTS utilisée par MariaDB au démarrage. Les options + - skip-grant-tables et` + - skip-networking` indiquent à MariaDB de démarrer sans charger les tables de subventions ou les fonctionnalités de réseau:

sudo systemctl set-environment MYSQLD_OPTS=""

Puis démarrez le serveur MariaDB:

sudo systemctl start mariadb

Cette commande ne produira aucune sortie, mais elle redémarrera le serveur de base de données en tenant compte des nouveaux paramètres de variable d’environnement.

Vous pouvez vous assurer que tout a commencé avec + sudo systemctl status mariadb +.

Vous devriez maintenant pouvoir vous connecter à la base de données en tant qu’utilisateur MariaDB * root * sans fournir de mot de passe:

sudo mysql -u root

Vous verrez immédiatement une invite du shell de la base de données:

MariaDB promptType 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Maintenant que vous avez accès au serveur de base de données, vous pouvez modifier le mot de passe * root * comme indiqué à l’étape 3.

Configurer MySQL pour qu’il démarre sans tables d’octroi

Afin de démarrer le serveur MySQL sans ses tables de droits, vous modifierez la configuration de systemd pour que MySQL transmette des paramètres de ligne de commande supplémentaires au serveur au démarrage.

Pour ce faire, exécutez la commande suivante:

sudo systemctl edit mysql

Cette commande ouvrira un nouveau fichier dans l’éditeur + nano +, que vous utiliserez pour éditer le _service de MySQL _. Ceux-ci modifient les paramètres de service par défaut pour MySQL. Ce fichier sera vide, ajoutez donc le contenu suivant:

Le service MySQL remplace

[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

La première instruction + ExecStart + efface la valeur par défaut, tandis que la seconde fournit + systemd + avec la nouvelle commande de démarrage, y compris les paramètres permettant de désactiver le chargement des tables de droits et les capacités de mise en réseau.

Appuyez sur les touches + CTRL-x + pour quitter le fichier, puis + Y + pour enregistrer les modifications apportées, puis + ENTER + pour confirmer le nom du fichier.

Rechargez la configuration + systemd + pour appliquer ces modifications:

sudo systemctl daemon-reload

Maintenant démarrez le serveur MySQL:

sudo systemctl start mysql

La commande ne montrera aucune sortie, mais le serveur de base de données démarrera. Les tables de subvention et la mise en réseau ne seront pas activés.

Connectez-vous à la base de données en tant qu’utilisateur root:

sudo mysql -u root

Vous verrez immédiatement une invite du shell de la base de données:

MySQL promptType 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Maintenant que vous avez accès au serveur, vous pouvez modifier le mot de passe * root *.

Étape 3 - Changer le mot de passe root

Le serveur de base de données fonctionne maintenant dans un mode limité; les tables de droits ne sont pas chargées et aucun support réseau n’est activé. Cela vous permet d’accéder au serveur sans fournir de mot de passe, mais vous empêche d’exécuter des commandes qui altèrent les données. Pour réinitialiser le mot de passe * root *, vous devez charger les tables de droits maintenant que vous avez accès au serveur.

Indiquez au serveur de base de données de recharger les tables d’attribution en exécutant la commande + FLUSH PRIVILEGES +.

FLUSH PRIVILEGES;

Vous pouvez maintenant changer le mot de passe * root *. La méthode que vous utilisez varie selon que vous utilisez MariaDB ou MySQL.

Changer le mot de passe MariaDB

Si vous utilisez MariaDB, exécutez l’instruction suivante pour définir le mot de passe du compte * root *, en veillant à remplacer + new_password + par un nouveau mot de passe fort, dont vous vous souviendrez.

UPDATE mysql.user SET password = PASSWORD('') WHERE user = '';

Cette sortie indique que le mot de passe a changé:

OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB permet d’utiliser des mécanismes d’authentification personnalisés. Exécutez donc les deux instructions suivantes pour vous assurer que MariaDB utilisera son mécanisme d’authentification par défaut pour le nouveau mot de passe que vous avez attribué au compte * root *:

UPDATE mysql.user SET authentication_string = '' WHERE user = '';
UPDATE mysql.user SET plugin = '' WHERE user = '';

Vous verrez la sortie suivante pour chaque instruction:

OutputQuery OK, 0 rows affected (0.01 sec)
Rows matched: 1  Changed: 0  Warnings: 0

Le mot de passe est maintenant changé. Tapez + exit + pour quitter la console MariaDB et passez à l’étape 4 pour redémarrer le serveur de base de données en mode normal.

Changer le mot de passe MySQL

Pour MySQL, exécutez l’instruction suivante pour changer le mot de passe de l’utilisateur * root *, en remplaçant «+ new_password +» par un mot de passe fort dont vous vous souviendrez:

UPDATE mysql.user SET authentication_string = PASSWORD('') WHERE user = '';

Vous verrez cette sortie indiquant que le mot de passe a été changé avec succès:

OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MySQL permet d’utiliser des mécanismes d’authentification personnalisés. Exécutez donc l’instruction suivante pour indiquer à MySQL d’utiliser son mécanisme d’authentification par défaut pour authentifier l’utilisateur * root * à l’aide du nouveau mot de passe:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = '';

Vous verrez une sortie similaire à la commande précédente:

OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Le mot de passe est maintenant changé. Quittez la console MySQL en tapant + exit +.

Redémarrons la base de données en mode opérationnel normal.

Étape 4 - Rétablir les paramètres normaux de votre serveur de base de données

Pour redémarrer le serveur de base de données en mode normal, vous devez annuler les modifications que vous avez apportées afin que la mise en réseau soit activée et que les tables d’attribution soient chargées. Encore une fois, la méthode utilisée dépend de l’utilisation de MariaDB ou de MySQL.

Pour MariaDB, désélectionnez la variable d’environnement + MYSQLD_OPTS + que vous avez définie précédemment:

sudo systemctl unset-environment MYSQLD_OPTS

Ensuite, redémarrez le service en utilisant + systemctl +:

sudo systemctl restart mariadb

Pour MySQL, supprimez la configuration systemd modifiée:

sudo systemctl revert mysql

Vous verrez une sortie semblable à celle-ci:

OutputRemoved /etc/systemd/system/mysql.service.d/override.conf.
Removed /etc/systemd/system/mysql.service.d.

Rechargez ensuite la configuration de systemd pour appliquer les modifications:

sudo systemctl daemon-reload

Enfin, redémarrez le service:

sudo systemctl restart mysql

La base de données est maintenant redémarrée et a retrouvé son état normal. Confirmez que le nouveau mot de passe fonctionne en vous connectant en tant qu’utilisateur * root * avec un mot de passe:

mysql -u root

Vous serez invité à entrer un mot de passe. Entrez votre nouveau mot de passe et vous aurez accès à l’invite de la base de données comme prévu.

Conclusion

Vous avez restauré l’accès administratif au serveur MySQL ou MariaDB. Assurez-vous que le nouveau mot de passe que vous avez choisi est fort et sécurisé et conservez-le dans un endroit sûr.

Pour plus d’informations sur la gestion des utilisateurs, les mécanismes d’authentification ou les moyens de réinitialiser le mot de passe de la base de données pour une autre version de MySQL ou MariaDB, veuillez vous reporter à la MySQL documentation ou à la page https: //. mariadb.com/kb/en/library/documentation/[mariaDB documentation].