Vous avez probablement un utilisateur anonyme ''@'localhost'
ou ''@'127.0.0.1'
.
Selon le manuel :
Lorsque plusieurs correspondances sont possibles, le serveur doit déterminer laquelle utiliser. Il résout ce problème comme suit: (...)
- Lorsqu'un client tente de se connecter, le serveur examine les lignes [de la table mysql.user] dans l'ordre trié.
- Le serveur utilise la première ligne qui correspond au nom d'hôte client et au nom d'utilisateur.
(...) Le serveur utilise des règles de tri qui ordonnent d'abord les lignes avec les valeurs d'hôte les plus spécifiques . Les noms d'hôtes littéraux [tels que «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 localhost
.
'bill'@'localhost'
correspond 'bill'@'%'
, mais correspondrait (par exemple) ''@'localhost'
au préalable.
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 ne concernent généralement pas la question principale. Ceux-ci sont uniquement destinés à répondre à certaines questions soulevées dans d'autres commentaires de ce fil.
Modifier 1
Authentification comme 'bill'@'%'
via une prise.
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock
Bienvenue sur le moniteur MySQL (...)
mysql> SELECT utilisateur, hôte FROM mysql.user;
+ ------ + ----------- +
| utilisateur | hôte |
+ ------ + ----------- +
| facture | % |
| racine | 127.0.0.1 |
| racine | :: 1 |
| racine | localhost |
+ ------ + ----------- +
4 lignes en jeu (0,00 sec)
mysql> SELECT USER (), CURRENT_USER ();
+ ---------------- + ---------------- +
| UTILISATEUR () | CURRENT_USER () |
+ ---------------- + ---------------- +
| bill @ localhost | facture @% |
+ ---------------- + ---------------- +
1 rangée dans l'ensemble (0,02 sec)
mysql> AFFICHER LES VARIABLES COMME 'skip_networking';
+ ----------------- + ------- +
| Nom_variable | Valeur |
+ ----------------- + ------- +
| skip_networking | ON |
+ ----------------- + ------- +
1 rangée en jeu (0,00 sec)
Modifier 2
Exactement la même configuration, sauf que j'ai réactivé la mise en réseau et que je crée maintenant un utilisateur anonyme ''@'localhost'
.
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql
Bienvenue sur le moniteur MySQL (...)
mysql> CREATE USER '' @ 'localhost' IDENTIFIED BY 'anotherpass';
Requête OK, 0 lignes affectées (0,00 sec)
mysql> Au revoir
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
--socket = / tmp / mysql-5.5.sock
ERREUR 1045 (28000): accès refusé pour l'utilisateur 'facture' @ 'localhost' (en utilisant le mot de passe: OUI)
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-h127.0.0.1 --protocol = TCP
ERREUR 1045 (28000): accès refusé pour l'utilisateur 'facture' @ 'localhost' (en utilisant le mot de passe: OUI)
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-hlocalhost --protocol = TCP
ERREUR 1045 (28000): accès refusé pour l'utilisateur 'facture' @ 'localhost' (en utilisant le mot de passe: OUI)
Modifier 3
Même situation que dans l'édition 2, 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
Bienvenue sur le moniteur MySQL (...)
mysql> SELECT USER (), CURRENT_USER ();
+ ---------------- + ---------------- +
| UTILISATEUR () | CURRENT_USER () |
+ ---------------- + ---------------- +
| bill @ localhost | @localhost |
+ ---------------- + ---------------- +
1 rangée dans l'ensemble (0,01 sec)
Conclusion 1, de l'édition 1: On peut s'authentifier comme 'bill'@'%'
via une socket.
Conclusion 2, de l'édition 2: Que l'on se connecte via TCP ou via un socket n'a aucun impact sur le processus d'authentification (sauf que l'on ne peut pas se connecter comme n'importe qui d'autre mais 'something'@'localhost'
via un socket, évidemment).
Conclusion 3, de l'édition 3: Bien que je l'ai spécifié -ubill
, j'ai obtenu l'accès en tant qu'utilisateur anonyme. Cela est dû aux "règles de tri" indiquées ci-dessus. Notez que dans la plupart des installations par défaut, un utilisateur anonyme sans mot de passe existe (et doit être sécurisé / supprimé).
FLUSH PRIVILEGES
?