Après avoir défini le mot de passe root, pourquoi MYSQL me permet-il toujours de me connecter sans mot de passe?

10

Après avoir défini le mot de passe root, pourquoi MYSQL me permet-il toujours de me connecter sans mot de passe à partir de la ligne de commande? Je peux taper "mysql" à une invite root unix et il ne demande aucun mot de passe et me permet toujours d'accéder à la racine. Je ne comprends pas pourquoi "mysql -u root" ne me demande PAS MAINTENANT le mot de passe que j'ai défini sur le compte.

De plus, je ne peux pas me connecter au mysql depuis une machine distante en tant que 'root'. Ne l'ai-je pas configuré correctement ci-dessous? J'obtiens l'erreur: "L'hôte ... n'est pas autorisé à se connecter à ce serveur MySQL. Je ne l'ai pas configuré pour '%'?

Voici ma table utilisateur:

mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| %         | root |                                           |
| 127.0.0.1 | root |                                           |
| ::1       | root |                                           |
| localhost |      |                                           |
| %         |      |                                           |
+-----------+------+-------------------------------------------+
6 rows in set (0.00 sec)
djangofan
la source

Réponses:

4

Il semble que le mot de passe soit défini sur l' 'root'@'localhost'entrée utilisateur, mais pas sur l' 'root'@'%'entrée; l'authentification sans mot de passe serait autorisée sur cette base.

Pour des raisons de sécurité, reconsidérez l'autorisation d'accès root depuis n'importe où. Si vous en avez besoin, débarrassez-vous simplement des spécifications de l'hôte local:

drop user 'root'@'localhost';
drop user 'root'@'127.0.0.1';
drop user 'root'@'::1';

Et définissez le mot de passe de l' 'root'@'%'utilisateur:

set password for 'root'@'%' = password('passwordhere');
Shane Madden
la source
C'était TOUT ce dont j'avais besoin et puis certains. Merci. Je n'étais pas sûr de ce qui pouvait être retiré ou pas et vous avez répondu à ma question. Très bonne réponse. :-)
djangofan
4

Eh bien, la réponse est juste dans ce tableau - vous devez supprimer les lignes "root" qui n'ont pas de mot de passe répertorié.

En outre, il semble que vous autorisiez les connexions depuis n'importe où (?!?!) Lorsque vous n'utilisez aucun utilisateur ou passe. Probablement une mauvaise idée. Je ferais quelque chose comme:

mysql> use mysql;
mysql> delete from user where password = "";
EEAA
la source
2

N'oubliez pas de FLUSH PRIVILEGES ou vous pouvez toujours vous connecter sans mot de passe.

tgunr
la source