"Acesso negado para o usuário 'test'@'ip'(usando senha:YES)" é um erro do MySQL.
Isso significa que no nível da rede tudo está funcionando , porque ter acesso negado como um determinado usuário , o servidor deve ter entendido com qual usuário você estava tentando se conectar . Portanto, rede, firewall, roteamento e assim por diante, todos devem estar funcionando; o servidor deve estar escutando, etc.
O problema está "simplesmente" na autenticação .
Tente conectar localmente ao banco de dados (para substituir a autenticação) e inspecione a tabela de privilégios:
USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';
e lembre-se de que a linha em que você está interessado é a que menciona o IP (já que a mensagem de erro especifica o IP , e não o nome do host - nesse caso, pode ter sido um problema de DNS; o nome do host é o nome do host que o servidor acredita que você está vindo , não o nome do host de onde você está realmente vindo).
A correspondência usuário/host vai de mais específico para menos específico . Então, se você já teve:
user host password
test 1.2.3.4 foo
e correu,
GRANT... TO [email protected]'%' ... PASSWORD bar
...esta doação funcionaria em qualquer lugar exceto 1.2.3.4, onde a senha permaneceria 'foo'.
Do manual (link acima):
Você pode ser forçado a fazer
USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
para garantir que não haja linhas espúrias na tabela de concessão referindo-se ao 'teste' do usuário.
(Além disso, o GRANT deve ser, eu acho,
GRANT ALL PRIVILEGES ON databasename.*
)
Dúvida de segurança (não relacionada à resposta)
O manual acima diz:A especificidade de um endereço IP literal não é afetada pelo fato de ele ter uma máscara de rede, então 192.168.1.13 e 192.168.1.0/255.255.255.0 são considerados igualmente específicos .
Agora, à primeira vista
127.0.0.1/0.0.0.0
parece muito específico (e inofensivo) para localhost . A máscara de rede, se não me engano, garante que seja equivalente a %
, exceto que é incrivelmente específico e será executado primeiro . Portanto test bar %
test localfoo 127.0.0.1/0.0.0.0
significa que a senha para
test
de qualquer lugar não é "bar", mas é "localfoo". Ninguém inseriria tal concessão por engano, mas há engano e erro .