4 votes

Création d'un nouvel utilisateur MySQL... le mot de passe et les privilèges ne collent pas

En me connectant à MySQL via le client de ligne de commande en tant que "root", j'essaie de créer un utilisateur MySQL avec les commandes suivantes :

mysql> create user 'myuser'@'%' identified by 'mypass';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on MY_DATABASE.* to 'myuser'@'%' identified by 'mypass';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

L'utilisateur est créé, mais son mot de passe et ses privilèges ne sont pas "collés". Lorsque j'essaie de me connecter en utilisant le mot de passe, j'obtiens une erreur :

~$ mysql -u myuser -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: YES)

Cependant, je PEUX me connecter en appuyant simplement sur la touche [entrée] sans mot de passe :

~$ mysql -u myuser -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 95
Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> 

Pourtant, l'utilisateur ne peut voir aucune table... donc non seulement le mot de passe n'a pas persisté, mais les privilèges que j'ai définis ont également été perdus.

Quelqu'un sait-il ce que je manque ici ? Merci.

UPDATE : Affichage du contenu de la table mysql.user, comme demandé dans les commentaires :

mysql> select User, Host, Password from mysql.user;
+------------------+---------------------+-------------------------------------------+
| User             | Host                | Password                                  |
+------------------+---------------------+-------------------------------------------+
| root             | localhost           | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| root             | 127.0.0.1           | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| root             | ::1                 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
|                  | localhost           |                                           |
| debian-sys-maint | localhost           | *817684763DD0B095B4703EC55053DAB57A2D9F4F |
| phpmyadmin       | localhost           | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| myuser           | %                   | *C5250F20FB991AA969917726DE6547D425DB3234 |
+------------------+---------------------+-------------------------------------------+

7voto

Daniel Points 414

Vous avez un utilisateur anonyme pour localhost et cet utilisateur anonyme n'a pas de mot de passe.

Il est nécessaire d'avoir les deux ( % y localhost ) pour vos comptes myuser pour pouvoir pouvoir se connecter de n'importe où comme myuser . Sans le compte localhost, le site anonymous user compte pour localhost qui est créé par mysql_install_db aurait la priorité lorsque myuser se connecte à partir du localhost . En conséquence, myuser serait traité comme un anonymous user . Le site La raison en est que le compte d'utilisateur anonyme a un nom plus spécifique. plus précise que celle de la colonne myuser'@'%' et vient donc plus tôt dans la l'ordre de tri de la table des utilisateurs.

A propos de l'ordre de tri :

Le serveur utilise des règles de tri qui ordonnent les rangées en fonction de leur spécificité. Host en premier. Les noms d'hôtes littéraux et les adresses IP sont les plus spécifiques. (La spécificité d'une adresse IP littérale n'est pas affectée par le fait que par la présence ou non d'un masque de réseau, donc par exemple 192.168.1.13 y 192.168.1.0/255.255.255.0 sont considérées comme également spécifiques). Le modèle '%' signifie "any host" et est le moins spécifique. La chaîne vide '' signifie également "any host" mais trie après '%' . Les rangées ayant la même valeur Host sont ordonnées en commençant par les valeurs d'utilisateur les plus spécifiques (une valeur d'utilisateur vide signifie qu'il n'y a pas de valeur d'utilisateur spécifique). valeur utilisateur vide signifie "any user" et est le moins spécifique).

Alors mysql considère votre myuser comme un anonymous user et depuis le anonymous user para localhost n'a pas de mot de passe, il est capable de se connecter sans mot de passe.

Pour résoudre votre problème, il vous suffit de créer une localhost pour votre myuser avec mot de passe

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X