Probablemente tenga un usuario anónimo ''@'localhost'
o ''@'127.0.0.1'
.
Según el manual :
Cuando son posibles varias coincidencias, el servidor debe determinar cuál de ellas usar. Resuelve este problema de la siguiente manera: (...)
- Cuando un cliente intenta conectarse, el servidor mira a través de las filas [de la tabla mysql.user] en orden ordenado.
- El servidor usa la primera fila que coincide con el nombre de host del cliente y el nombre de usuario.
(...) El servidor utiliza reglas de clasificación que ordenan primero las filas con los valores de Host más específicos . Los nombres de host literales [como 'localhost'] y las direcciones IP son los más específicos.
Por lo tanto, dicho usuario anónimo "enmascararía" a cualquier otro usuario '[any_username]'@'%'
al conectarse localhost
.
'bill'@'localhost'
coincide 'bill'@'%'
, pero coincidiría (por ejemplo) ''@'localhost'
antes de las manos.
La solución recomendada es eliminar a este usuario anónimo (de todos modos, esto es algo bueno).
Las ediciones a continuación son en su mayoría irrelevantes para la pregunta principal. Estos solo están destinados a responder algunas preguntas planteadas en otros comentarios dentro de este hilo.
Editar 1
Autenticando como a 'bill'@'%'
través de un zócalo.
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock
Bienvenido al monitor MySQL (...)
mysql> SELECCIONAR usuario, host DE mysql.user;
+ ------ + ----------- +
El | usuario | anfitrión |
+ ------ + ----------- +
El | factura | % |
El | raíz | 127.0.0.1 |
El | raíz | :: 1 |
El | raíz | localhost |
+ ------ + ----------- +
4 filas en conjunto (0.00 seg)
mysql> SELECCIONAR USUARIO (), CURRENT_USER ();
+ ---------------- + ---------------- +
El | USUARIO () | CURRENT_USER () |
+ ---------------- + ---------------- +
El | bill @ localhost | bill @% |
+ ---------------- + ---------------- +
1 fila en conjunto (0.02 seg)
mysql> MOSTRAR VARIABLES COMO 'skip_networking';
+ ----------------- + ------- +
El | Nombre_variable | Valor |
+ ----------------- + ------- +
El | skip_networking | ON |
+ ----------------- + ------- +
1 fila en conjunto (0.00 seg)
Editar 2
Exactamente la misma configuración, excepto que reactivé las redes y ahora creo un usuario anónimo ''@'localhost'
.
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql
Bienvenido al monitor MySQL (...)
mysql> CREAR USUARIO '' @ 'localhost' IDENTIFICADO POR 'anotherpass';
Consulta OK, 0 filas afectadas (0.00 seg)
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): acceso denegado para el usuario 'factura' @ 'localhost' (usando la contraseña: SÍ)
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-h127.0.0.1 --protocol = TCP
ERROR 1045 (28000): acceso denegado para el usuario 'factura' @ 'localhost' (usando la contraseña: SÍ)
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-hlocalhost --protocol = TCP
ERROR 1045 (28000): acceso denegado para el usuario 'factura' @ 'localhost' (usando la contraseña: SÍ)
Editar 3
La misma situación que en la edición 2, ahora proporciona la contraseña del usuario anónimo.
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
Bienvenido al monitor MySQL (...)
mysql> SELECCIONAR USUARIO (), CURRENT_USER ();
+ ---------------- + ---------------- +
El | USUARIO () | CURRENT_USER () |
+ ---------------- + ---------------- +
El | bill @ localhost | @localhost |
+ ---------------- + ---------------- +
1 fila en conjunto (0.01 seg)
Conclusión 1, de la edición 1: se puede autenticar como a 'bill'@'%'
través de un socket.
Conclusión 2, de la edición 2: si uno se conecta a través de TCP o a través de un socket no tiene ningún impacto en el proceso de autenticación (excepto que 'something'@'localhost'
, obviamente, no se puede conectar como nadie más que a través de un socket).
Conclusión 3, de la edición 3: aunque especifiqué -ubill
, se me ha otorgado acceso como usuario anónimo. Esto se debe a las "reglas de clasificación" recomendadas anteriormente. Tenga en cuenta que en la mayoría de las instalaciones predeterminadas, existe un usuario anónimo sin contraseña (y debe asegurarse / eliminarse).
FLUSH PRIVILEGES
?