Host 'xxx.xx.xxx.xxx' não é permitido conectar a este servidor MySQL

Isto devia ser muito simples, mas não consigo que funcione pela minha vida.
I'estou apenas tentando conectar remotamente ao meu servidor MySQL.

conectando como

mysql -u root -h localhost -p  

funciona bem, mas tentar

mysql -u root -h 'any ip address here' -p

falha com o erro

ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

Na tabela mysql.user, há exatamente a mesma entrada para o usuário 'root' com host 'localhost' como outra com host '%'.

I'm no meu juízo' fim, e não tenho a menor ideia de como proceder. Qualquer ideia é bem-vinda.

Solução

Possivelmente uma precaução de segurança. Você poderia tentar adicionar uma nova conta de administrador:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

Embora, como Pascal e outros notaram, não é uma grande idéia ter um usuário com este tipo de acesso aberto a qualquer IP. Se você precisa de um usuário administrativo, use o root, e deixe-o no localhost. Para qualquer outra ação, especifique exatamente os privilégios que você precisa e limite a acessibilidade do usuário, como Pascal sugeriu abaixo.

Editar:

Da FAQ do MySQL:

Se não consegues perceber porque é que tens Acesso negado, remover do usuário tabela todas as entradas que têm Anfitrião valores contendo wildcards (entradas que contenham caracteres '%' ou '_'). A erro muito comum é inserir um novo entrada com Host='%' e User='some_user', pensando que este permite que você especifique o localhost para conectar a partir da mesma máquina. O razão pela qual isto não funciona é que os privilégios padrão incluem um entrada com Host='localhost' e User=''. Porque essa entrada tem um Host valor 'localhost' que é mais específico do que '%', é usado em preferência pela nova entrada quando conectando-se a partir do localhost! O correto procedimento é inserir uma segunda entrada com Host='localhost' e User='some_user', ou para apagar o entrada com Host='localhost' e User=''. Depois de apagar a entrada, lembre-se de emitir um FLUSH PRIVILEGES declaração para recarregar as tabelas de subsídios. Ver também Secção 5.4.4, "Acesso Controlo, Fase 1: Ligação Verificação".

Comentários (8)

A mensagem *Host ''xxx.xx.xxx.xxx'' não é permitido conectar a este servidor MySQL é uma resposta do servidor MySQL para o cliente MySQL. Repare como ele devolve o endereço IP e não o hostname.

Se você está tentando conectar com mysql -h -u -p e ele retorna esta mensagem com o endereço IP, então o servidor MySQL não é capaz de fazer uma pesquisa reversa no cliente. Isto é crítico porque é assim que ele mapeia o cliente MySQL para as concessões.

Certifique-se de que você pode fazer um nslookup A partir do servidor MySQL. Se isso não funcionar, então não há nenhuma entrada no servidor DNS. Alternativamente, você pode colocar uma entrada no arquivo HOSTS do servidor MySQL (> <

Comentários (1)

Se você modificar as tabelas de subsídios manualmente (usando INSERT, UPDATE, etc.), você deve executar uma declaração FLUSH PRIVILEGES para dizer ao servidor que recarregue as tabelas de subsídios.

PS: Eu não recomendaria permitir qualquer host para conectar para qualquer usuário (especialmente não o uso root). Se você estiver usando o mysql para uma aplicação cliente/servidor, prefira um endereço de sub-rede. Se você estiver usando o mysql com um servidor web ou servidor de aplicações, use IPs específicos.

Comentários (0)