Selon la documentation MySQL , vous pouvez renforcer un serveur MySQL en ajoutant des mots de passe ou en supprimant les comptes anonymes.
Si vous souhaitez empêcher les clients de se connecter en tant qu'utilisateurs anonymes sans mot de passe, vous devez soit attribuer un mot de passe à chaque compte anonyme, soit supprimer les comptes.
Avant de durcir, ma table d'utilisateurs ressemblait à ceci.
mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| root | gitlab | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | gitlab | |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
J'ai supprimé tous les comptes anonymes, de sorte que la table des utilisateurs ressemble maintenant à ceci. (J'utilise marionnette pour gérer les utilisateurs, mais la marionnette exécute efficacement une DROP USER
commande).
mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
Pourquoi est-ce que je peux toujours me connecter à mon système de test sans nom d'utilisateur ou mot de passe?
Que dois-je faire pour empêcher les utilisateurs indésirables de se connecter?
root@gitlab:~# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 98
Server version: 5.5.32-0ubuntu0.12.04.1 (Ubuntu)
....
mysql>
Mise à jour : je viens également de découvrir que je peux me connecter en tant que root, sans entrer de mot de passe.
Update2 : J'ai trouvé cette question qui contient de bonnes informations, mais ne résout pas le problème.
Il n'y a pas d'utilisateurs anonymes.
mysql> select user,host,password from mysql.user where user='';
Empty set (0.00 sec)
Je me connecte en tant que root@localhost
.
mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
Je n'ai pas de mot de passe par défaut ou de tables de saut de subvention définies dans my.cnf
root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'skip-grant-tables'|wc -l
0
root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'pass'|wc -l
0
Update3 :
J'ai essayé d'effectuer ces étapes avec une marionnette (qui devrait effectuer automatiquement les privilèges de vidage). J'ai également vidé les privilèges manuellement et j'ai également essayé de redémarrer mysql.
Update4 :
J'ai également essayé de changer le mot de passe root de mysql et les privilèges vides. Pas de chance, je peux toujours me connecter en tant qu'utilisateur sans mot de passe.
Réponses:
Je l'ai compris. Alors que /etc/mysql/my.cnf n'avait pas de paire de clés de mot de passe stockée, il y avait un mot de passe stocké dans /root/.my.cnf.
Dès que j'ai commenté le mot de passe dans /root/.my.cnf, je n'ai pas été autorisé à me connecter sans mot de passe (ce que j'attendais).
la source