Étape 1 – Installation de MySQL
Sur Ubuntu 20.04, vous pouvez installer MySQL en utilisant le référentiel de paquets APT. Au moment de la rédaction de ce document, la version de MySQL disponible dans le référentiel Ubuntu par défaut est la version 8.0.19.
Pour l’installer, mettez à jour l’index des paquets sur votre serveur si vous ne l’avez pas fait récemment :
sudo apt update
Copy
Ensuite, installez le paquet mysql-server
:
sudo apt install mysql-server
Copy
Cela installera MySQL, mais ne vous demandera pas de définir un mot de passe ou de faire d’autres changements de configuration. Comme cela rend votre installation de MySQL non sécurisée, nous allons aborder ce point.
Étape 2 – Configuration de MySQL
Pour les nouvelles installations de MySQL, vous devrez exécuter le script de sécurité inclus dans le SGBD. Ce script modifie certaines des options par défaut les moins sûres pour des choses comme les connexions root distantes et les sample users.
Exécutez le script de sécurité avec sudo
:
sudo mysql_secure_installation
Copy
Vous serez alors guidé à travers une série d’invites où vous pourrez apporter quelques modifications aux options de sécurité de votre installation MySQL. La première invite vous demandera si vous souhaitez configurer le plugin Validate Password, que vous pouvez utiliser pour tester la solidité de votre mot de passe MySQL.
Si vous choisissez de mettre en place le plugin Validate Password, le script vous demandera de choisir un niveau de validation du mot de passe. Le niveau le plus fort – que vous sélectionnez en entrant 2
– exigera que votre mot de passe comporte au moins huit caractères, dont un mélange de majuscules, de minuscules, de chiffres et de caractères spéciaux :
OutputSecuring the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
2
Que vous choisissiez ou non de configurer le plugin Validate Password, l’invite suivante vous demandera de définir un mot de passe pour l’utilisateur root de MySQL. Entrez et confirmez le mot de passe sécurisé de votre choix :
OutputPlease set the password for root here.
New password:
Re-enter new password:
Si vous avez utilisé le plugin Validate Password, vous recevrez des commentaires sur la force de votre nouveau mot de passe. Ensuite, le script vous demandera si vous voulez continuer avec le mot de passe que vous venez de saisir ou si vous voulez en saisir un nouveau. En supposant que vous êtes satisfait de la force du mot de passe que vous venez d’entrer, saisissez Y
pour poursuivre le script :
OutputEstimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
À partir de là, vous pouvez appuyer sur Y
puis sur ENTER
pour accepter les valeurs par défaut pour toutes les questions suivantes. Cela supprimera les utilisateurs anonymes et la base de données de test, désactivera les connexions root à distance, et chargera ces nouvelles règles afin que MySQL respecte immédiatement les modifications que vous avez apportées.
Notez que même si vous avez défini un mot de passe pour l’utilisateur MySQL root, cet utilisateur n’est pas configuré pour s’authentifier avec un mot de passe lors de la connexion au shell MySQL. Si vous le souhaitez, vous pouvez ajuster ce paramètre en suivant l’étape 3.
Étape 3 – (Facultatif) Ajustement de l’authentification et des privilèges de l’utilisateur
Dans les systèmes Ubuntu fonctionnant sous MySQL 5.7 (et versions ultérieures), l’utilisateur MySQL root est configuré pour s’authentifier en utilisant le plugin auth_socket
par défaut plutôt qu’avec un mot de passe. Cela permet d’améliorer la sécurité et la convivialité dans de nombreux cas, mais cela peut aussi compliquer les choses si vous devez autoriser un programme externe (par exemple, phpMyAdmin) à accéder à l’utilisateur.
Afin d’utiliser un mot de passe pour se connecter à MySQL en tant que root, vous devrez changer sa méthode d’authentification de auth_socket
à un autre plugin, tel que caching_sha2_password
ou mysql_native_password
. Pour ce faire, ouvrez l’invite MySQL depuis votre terminal :
sudo mysql
Copy
Ensuite, vérifiez la méthode d’authentification utilisée par chacun de vos comptes utilisateurs MySQL à l’aide de la commande suivante :
SELECT user,authentication_string,plugin,host FROM mysql.user;
Copy
Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | | auth_socket | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
Dans cet exemple, vous pouvez voir que l’utilisateur root s’authentifie effectivement en utilisant le plugin auth_socket
. Pour configurer le compte root afin qu’il s’authentifie avec un mot de passe, lancez une instruction ALTER USER
pour modifier le plugin d’authentification utilisé et définir un nouveau mot de passe.
Veillez à remplacer password
par un mot de passe fort de votre choix, et souvenez-vous que cette commande modifiera le mot de passe root que vous avez défini à l’étape 2 :
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Copy
Remarque : L’instruction ALTER USER
précédente définit l’utilisateur MySQL root pour s’authentifier avec le plugin caching_sha2_password
. Selon la documentation officielle de MySQL, caching_sha2_password
est le plugin d’authentification préféré de MySQL, car il fournit un cryptage de mot de passe plus sûr que l’ancien, mais encore largement utilisé, mysql_native_password
.
Cependant, de nombreuses applications PHP – phpMyAdmin, par exemple – ne fonctionnent pas de manière fiable avec caching_sha2_password
. Si vous prévoyez d’utiliser cette base de données avec une application PHP, vous pouvez définir root pour vous authentifier avec mysql_native_password
à la place :
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Copy
Exécutez ensuite FLUSH PRIVILEGES
qui ordonne au serveur de recharger les tableaux de subventions et de mettre vos nouvelles modifications en vigueur :
FLUSH PRIVILEGES;
Copy
Vérifiez à nouveau les méthodes d’authentification utilisées par chacun de vos utilisateurs pour confirmer que root ne s’authentifie plus à l’aide du plugin auth_socket
:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Copy
Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$lS|M#3K #XslZ.xXUq.crEqTjMvhgOIX7B/zki5DeLA3JB9nh0KwENtwQ4 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
Vous pouvez voir dans cet exemple que l’utilisateur MySQL root s’authentifie maintenant en utilisant le plugin caching_sha2_password
. Une fois que vous avez confirmé cela sur votre propre serveur, vous pouvez quitter le shell MySQL :
exit
Copy
Certains peuvent aussi trouver qu’il est plus adapté à leur travail de se connecter à MySQL avec un utilisateur dédié. Pour créer un tel utilisateur, ouvrez à nouveau le shell MySQL :
sudo mysql
Copy
Remarque : si vous avez activé l’authentification par mot de passe pour root, comme décrit dans les paragraphes précédents, vous devrez utiliser une commande différente pour accéder au shell MySQL. Ce qui suit permettra d’exécuter votre client MySQL avec les privilèges d’utilisateur habituels, et vous n’obtiendrez les privilèges d’administrateur au sein de la base de données qu’en vous authentifiant :
mysql -u root -p
Copy
De là, créez un nouvel utilisateur et attribuez-lui un mot de passe fort :
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Copy
Ensuite, accordez à votre nouvel utilisateur les privilèges appropriés. Par exemple, vous pourriez accorder les privilèges d’utilisateur à tous les tableaux de la base de données, ainsi que le pouvoir d’ajouter, de modifier et de supprimer des privilèges d’utilisateur, avec cette commande :
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Copy
Notez qu’à ce stade, vous n’avez pas besoin d’exécuter à nouveau la commande FLUSH PRIVILEGES
. Cette commande n’est nécessaire que lorsque vous modifiez les tableaux de subvention en utilisant des instructions comme INSERT
, UPDATE
ou DELETE
. Comme vous avez créé un nouvel utilisateur, au lieu de modifier un utilisateur existant, le FLUSH PRIVILEGES
est inutile ici.
Ensuite, quittez le shell MySQL :
exit
Copy