Como o mysql determina o nome do host de seus clientes?

11

Eu estou tentando criar um usuário do MySQL que só poderá se conectar ao banco de dados MySQL a partir de um nome de host específico.

grant all on db_name.* to 'user_name'@'appserver-lan.mydomain.com' identified by 'some_passwd'

Ao verificar a tabela de usuários no banco de dados mysql, posso ver que o usuário foi criado com sucesso:

use mysql; select * from user where User='user_name' and Host='appserver-lan.mydomain.com'

or

show grants for 'username'@'appserver-lan.mydomain.com'

O nome de host que eu especifiquei é um alias para um nome amazon-ec2, que, quando resolvido pelos servidores DNS da AWS, resulta em um endereço de LAN:

[root@db_server ~] # host appserver-lan.mydomain.com

appserver-lan.mydomain.com is an alias for ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com has address 10.xxx.xxx.xxx

O problema é que quando tento me conectar ao IP da LAN do banco de dados a partir deste appserver-lan, recebo um erro de acesso negado, embora a senha esteja correta. A coisa estranha aqui é que o nome do host mostrado no erro não é o nome do host que eu havia especificado quando o usuário foi criado:

ERROR 1045 (28000): Access denied for user 'user_name'@'appserver.mydomain.com' (using password: YES)

Então, minha pergunta é: como o mysql determina o nome do host do cliente? Eu acredito que ele não faz isso por uma pesquisa reversa de DNS, desde que eu verifiquei e não aponte para "appserver.mydomain.com" nem para "appserver-lan.mydomain.com". Além disso, o servidor db não possui entradas relacionadas ao servidor de aplicativos em / etc / hosts.

Resumindo, tenho certeza que é um problema de resolução de nome de host, já que conceder privilégios para o host "%" ou para o IP da LAN funciona bem.

Alguma ideia do que me falta?

    
por Luis Fernando Alen 23.02.2012 / 20:13

4 respostas

13

Ele usa uma pesquisa de DNS reversa. Ele pega o endereço IP do cliente e usa qualquer registro PTR para esse nome.

Na minha opinião, a autenticação baseada no nome não é muito útil, sugiro que você considere o uso de endereços IP.

Veja este documento sobre como o MySQL usa o DNS .

    
por 23.02.2012 / 20:30
3

O MySQL fará uma pesquisa reversa de DNS no endereço IP para obter o nome do host. Se você estiver executando no AWS EC2, poderá atribuir um IP elástico ao seu servidor (isso não custa nenhum extra) e, em seguida, solicitar à Amazon que configure o DNS reverso para que o IP elástico vá para o seu nome de host.

O seu servidor de banco de dados também está no EC2? Porque se assim for, ele estará usando o endereço IP privado da instância, caso contrário, ele estará usando o endereço IP público. Parece que você postar como tu appserver-lan é o ip privado 10.XXX.XXX.XXX atribuído ao seu servidor, não o putlic.

Não sei ao certo qual endereço IP seria usado se estivesse se comunicando com uma região diferente, já que eu só tinha servidores na mesma região.

    
por 23.02.2012 / 21:29
3

Acabei de ter um problema semelhante, em que o servidor mysql parecia estar fazendo pesquisas de DNS reversas incorretamente.

O problema que tive foi que o servidor tinha permissões para 'user'@'1.2.3.4' assim como 'user'@'reverse.dns'. O usuário com apenas o endereço IP tinha permissões mínimas, mas o servidor mysql estava usando as permissões daquele usuário em vez daquele com o nome do host, e retornando a mensagem "Acesso negado para o usuário 'user'@'1.2.3.4'". A exclusão do usuário com o endereço IP resolveu o problema e forçou o seridor a usar o outro usuário no nome do host.

    
por 28.04.2012 / 11:13
0

Também vi problemas em que nomes de host IPV4 e IPV6 e endereços IP não correspondem e onde um nome de host é usado apenas para a permissão do usuário. Por exemplo, onde há um DNS inverso de IPV6, mas nenhum DNS IPV6 de encaminhamento.

    
por 06.01.2018 / 13:08