Criei um banco de dados e um usuário e permiti o acesso através do seguinte:
create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;
no entanto, quando tento conectar-me ao MySQL, recebo o seguinte erro:
$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)
Se "%" for o curinga, também não habilitaria o host local? No entanto, se eu não especificar que quero usar uma senha, posso conectar-me perfeitamente ao banco de dados, o que não faz sentido, porque estou especificando uma senha quando criei o usuário.
Tenho certeza de que você precisa do seguinte:
conceda todos os privilégios no somedb. * para 'someuser' @ '%' com opção de concessão;
Sua instrução GRANT não possui uma declaração de nome de host.
fonte
GRANT ALL ON somedb.* TO 'someuser'@'10.1.10.1';
Se você não conseguir se conectar ao mysql usando someuser @ '%' em que '%' é o caractere curinga do nome do host, verifique se você não possui a entrada '' @localhost em sua tabela de usuários. Confirme usando a seguinte instrução SQL:
Se '' @localhost estiver existente, remova-o emitindo a seguinte instrução SQL:
então finalmente
Agora someuser @ '%' se conectará ao banco de dados.
fonte
Meu entendimento, e estou preparado para ser corrigido, é que o MySQL trata o host local separadamente para%. ou seja, localhost não está incluído no curinga.
fonte
user@%
e não funcionou até eu incluiruser@localhost
. Então eu vi a resposta stackoverflow.com/a/29421084/4850646 e percebi que tinha um usuário anônimo com hostlocalhost
. Eu removi todos os usuários anônimos e consegui acessar a partirlocalhost
desse usuário, mesmo depois de removeruser@localhost
(e deixar apenasuser@%
). Parece que, porlocalhost
ser mais específico do que%
, tenta primeiro olocalhost
usuário, mesmo que seja um usuário anônimo!Você correu
flush privileges;
depois de criar o usuário? Caso contrário, as alterações nos usuários / permissões não serão necessárias até que o servidor seja reiniciado.Em seguida, verifique se você não possui uma entrada '%' @ 'localhost'.
fonte