Vous avez probablement un utilisateur anonyme ''@'localhost'
ou ''@'127.0.0.1'
.
Conformément à le manuel :
Lorsque plusieurs correspondances sont possibles, le serveur doit déterminer laquelle des d'entre elles à utiliser. Il résout ce problème de la manière suivante : (...)
- Lorsqu'un client tente de se connecter, le serveur examine les rangées suivantes [de la table mysql.user] dans un ordre trié.
- Le serveur utilise la première ligne qui correspond au nom d'hôte et au nom d'utilisateur du client.
(...) Le serveur utilise des règles de tri qui ordonnent les rangées avec les valeurs de l'hôte les plus spécifiques en premier . Noms d'hôtes littéraux [comme 'localhost'] et les adresses IP sont les plus spécifiques.
Par conséquent, un tel utilisateur anonyme " masquerait " tout autre utilisateur comme '[any_username]'@'%'
lors de la connexion depuis localhost
.
'bill'@'localhost'
correspond 'bill'@'%'
mais correspondrait à (par exemple) ''@'localhost'
avant les mains.
La solution recommandée est de supprimer cet utilisateur anonyme (c'est généralement une bonne chose à faire de toute façon).
Les modifications ci-dessous sont pour la plupart sans rapport avec la question principale. Elles visent uniquement à répondre à certaines questions soulevées dans d'autres commentaires de ce fil de discussion.
Edit 1
Authentification en tant que 'bill'@'%'
à travers une prise.
root@myhost:/home/mysql-5.5.16-linux2.6-x86\_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
Welcome to the MySQL monitor (...)
mysql> SELECT user, host FROM mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| bill | % |
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
+------+-----------+
4 rows in set (0.00 sec)
mysql> SELECT USER(), CURRENT\_USER();
+----------------+----------------+
| USER() | CURRENT\_USER() |
+----------------+----------------+
| bill@localhost | bill@% |
+----------------+----------------+
1 row in set (0.02 sec)
mysql> SHOW VARIABLES LIKE 'skip\_networking';
+-----------------+-------+
| Variable\_name | Value |
+-----------------+-------+
| skip\_networking | ON |
+-----------------+-------+
1 row in set (0.00 sec)
Edit 2
Exactement la même configuration, sauf que j'ai réactivé le réseau et que je crée maintenant un utilisateur anonyme. ''@'localhost'
.
root@myhost:/home/mysql-5.5.16-linux2.6-x86\_64# ./mysql
Welcome to the MySQL monitor (...)
mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
Query OK, 0 rows affected (0.00 sec)
mysql> Bye
root@myhost:/home/mysql-5.5.16-linux2.6-x86\_64# ./mysql -ubill -ppass \\
--socket=/tmp/mysql-5.5.sock
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
root@myhost:/home/mysql-5.5.16-linux2.6-x86\_64# ./mysql -ubill -ppass \\
-h127.0.0.1 --protocol=TCP
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
root@myhost:/home/mysql-5.5.16-linux2.6-x86\_64# ./mysql -ubill -ppass \\
-hlocalhost --protocol=TCP
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
Edit 3
Même situation que dans l'édition 2, en fournissant maintenant le mot de passe de l'utilisateur anonyme.
root@myhost:/home/mysql-5.5.16-linux2.6-x86\_64# ./mysql -ubill -panotherpass -hlocalhost
Welcome to the MySQL monitor (...)
mysql> SELECT USER(), CURRENT\_USER();
+----------------+----------------+
| USER() | CURRENT\_USER() |
+----------------+----------------+
| bill@localhost | @localhost |
+----------------+----------------+
1 row in set (0.01 sec)
Conclusion 1, de l'édition 1 : On peut s'authentifier en tant que 'bill'@'%'
à travers une prise.
Conclusion 2, à partir de l'édition 2 : Le fait de se connecter par TCP ou par une socket n'a aucun impact sur le processus d'authentification (sauf que l'on ne peut pas se connecter en tant que n'importe qui d'autre que 'something'@'localhost'
par le biais d'une prise, évidemment).
Conclusion 3, de l'édition 3 : Bien que j'ai spécifié -ubill
J'ai obtenu un accès en tant qu'utilisateur anonyme. Ceci est dû aux "règles de tri" conseillées ci-dessus. Remarquez que dans la plupart des installations par défaut, un utilisateur anonyme, sans mot de passe, existe (et doivent être sécurisés/enlevés).
0 votes
Je pense que cela vous connectera en tant que 'bill'@'localhost' ce qui n'est probablement pas ce que vous voulez.
42 votes
Avez-vous
FLUSH PRIVILEGES
?10 votes
Ok, j'ai essayé sans succès. Une autre suggestion s'il vous plaît.
1 votes
Quelle version du serveur exécutez-vous ? J'ai vu la version 5.1 se comporter bizarrement à ce sujet.
2 votes
Cela m'est arrivé lors de l'installation de Magento et j'ai fait une erreur bien plus stupide. En tapant 'mysql -u magento -p magento', on m'a demandé un mot de passe et au lieu du mot de passe par défaut, j'ai mis le mot de passe Root.
1 votes
Assurez-vous d'ajouter l'option de subvention à la fin de la ligne de subvention. Dans plusieurs des réponses ci-dessous, ce point est enfoui dans leurs longues réponses. C'est la seule chose qui ne va pas dans ce que vous faisiez. J'ai moi-même perdu du temps sur ce point.
1 votes
@Ali Pourquoi ne pas en accepter une comme réponse ?
2 votes
@authentictech malheureusement, aucune des solutions proposées n'a fonctionné pour moi au moment où cette question a été postée. Veuillez consulter ma propre réponse qui m'a aidé à me sortir de cette situation. C'est la raison pour laquelle je n'ai marqué aucune d'entre elles comme étant la réponse. Je peux probablement marquer la réponse la mieux classée comme réponse.
1 votes
C'est très bête de ma part mais je dois quand même le mentionner au cas où quelqu'un d'autre ferait la même erreur puisque le code d'erreur est le même. Je n'ai pas créé un utilisateur du nom de "bill" (ou autre) avant d'exécuter la commande mysql -u bill -p
0 votes
@Rounak : merci '^.^
0 votes
Créer un utilisateur autre que Root pour accéder à la base de données est plus sûr ; et aller plus loin pour limiter son accès à une seule table est encore mieux. Merci pour l'exemple.
1 votes
Quelqu'un d'autre a utilisé une mauvaise combinaison de nom d'utilisateur et de mot de passe ? :)
0 votes
C'est noté : Je n'ai pas réussi à créer un utilisateur et un mot de passe. D'après le message d'erreur, j'ai cherché et trouvé ce fil de discussion. Veuillez vérifier le nom d'utilisateur et le mot de passe si vous êtes le même que moi.