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 busca en las filas [de la tabla mysql.user] en orden ordenado.
- El servidor usa la primera fila que coincide con el nombre de host y el nombre de usuario del cliente.
(...) El servidor usa reglas de clasificación que ordenan las filas con los valores de Host más específicos primero .Nombres de host literales [como 'localhost'] y las direcciones IP son las más específicas.
Por lo tanto, dicho usuario anónimo "enmascararía" a cualquier otro usuario como '[any_username]'@'%'
cuando se conecta desde localhost
.
'bill'@'localhost'
coincide con 'bill'@'%'
, pero coincidiría (p. ej.) ''@'localhost'
de antemano.
La solución recomendada es descartar a este usuario anónimo (esto suele ser bueno de todos modos).
Las siguientes ediciones 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
Autenticación como 'bill'@'%'
a través de un enchufe.
[email protected]:/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() | +----------------+----------------+ | [email protected] | [email protected]% | +----------------+----------------+ 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)
Editar 2
Exactamente la misma configuración, excepto que reactivé la red y ahora creo un usuario anónimo ''@'localhost'
.
[email protected]:/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 [email protected]:/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) [email protected]:/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) [email protected]:/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)
Editar 3
Misma situación que en la edición 2, ahora proporcionando la contraseña del usuario anónimo.
[email protected]:/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() | +----------------+----------------+ | [email protected] | @localhost | +----------------+----------------+ 1 row in set (0.01 sec)
Conclusión 1, de la edición 1:Uno puede autenticarse como 'bill'@'%'
a través de un enchufe.
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 impacto en el proceso de autenticación (excepto que uno no puede conectarse como nadie más que 'something'@'localhost'
a través de un enchufe, obviamente).
Conclusión 3, de la edición 3:aunque especifiqué -ubill
, se me ha concedido 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, un código anónimo sin contraseña el usuario existe
(y debe asegurarse/quitarse).