Creé una base de datos y un usuario, y permití el acceso a través de lo siguiente:
create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;
sin embargo, cuando intento conectarme a MySQL me sale el siguiente error:
$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)
Si "%" es el comodín, ¿no habilitaría también localhost? Sin embargo, si no especifico que quiero usar una contraseña, entonces puedo conectarme bien a la base de datos, lo cual no tiene sentido porque estoy especificando una contraseña cuando creé el usuario.
Estoy bastante seguro de que necesitas lo siguiente:
otorgue todos los privilegios en somedb. * a 'someuser' @ '%' con la opción de concesión;
Su declaración GRANT carece de una declaración de nombre de host.
fuente
GRANT ALL ON somedb.* TO 'someuser'@'10.1.10.1';
Si no puede conectarse a mysql usando someuser @ '%' donde '%' es el comodín para el nombre de host, asegúrese de no tener la entrada '' @localhost en su tabla de usuario. Confirme con la siguiente instrucción SQL:
Si '' @localhost existe, elimínelo emitiendo la siguiente instrucción SQL:
entonces por último
Ahora someuser @ '%' se conectará a la base de datos.
fuente
Mi comprensión, y estoy preparado para ser corregido en esto, es que MySQL trata localhost por separado a%. es decir, localhost no está incluido en el comodín.
fuente
user@%
y no funcionó hasta que lo incluíuser@localhost
. Luego vi la respuesta stackoverflow.com/a/29421084/4850646 y me di cuenta de que tenía un usuario anónimo con hostlocalhost
. Eliminé todos los usuarios anónimos y pude acceder desdelocalhost
ese usuario, incluso después de eliminaruser@localhost
(y dejar solouser@%
). Parece que debido a quelocalhost
es más específico que%
, primero trata allocalhost
usuario, ¡ incluso si es un usuario anónimo!¿Has corrido
flush privileges;
después de crear el usuario? Si no lo hace, los cambios en los usuarios / permisos no se realizarán hasta después de reiniciar el servidor.Luego, verifique que no tenga una entrada '%' @ 'localhost'.
fuente