Jak mysql określa nazwę hosta swoich klientów?

14

Próbuję utworzyć użytkownika MySQL, który będzie mógł łączyć się z bazą danych MySQL tylko z określonej nazwy hosta.

nadaj wszystko na db_name. * do „nazwa_użytkownika ”@'appserver-lan.mydomain.com” identyfikowany przez „some_passwd”

Sprawdzając tabelę użytkowników w bazie danych mysql, widzę, że użytkownik został pomyślnie utworzony:

użyj mysql; wybierz * od użytkownika, gdzie Użytkownik = „nazwa_użytkownika”, a Host = „appserver-lan.mydomain.com”

lub

pokaż granty dla „nazwa użytkownika ”@'appserver-lan.mydomain.com”

Podana nazwa hosta jest aliasem nazwy amazon-ec2, która po rozpoznaniu przez serwery DNS AWS skutkuje adresem LAN:

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

appserver-lan.mydomain.com to alias ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com ma adres 10.xxx .xxx.xxx

Problem polega na tym, że kiedy próbuję połączyć się z bazą danych LAN IP z tego serwera appserver-lan, pojawia się błąd odmowy dostępu, chociaż hasło jest prawidłowe. Dziwne jest to, że nazwa hosta wyświetlana w błędzie nie jest nazwą hosta, którą podałem podczas tworzenia użytkownika:

BŁĄD 1045 (28000): Odmowa dostępu dla użytkownika „nazwa_użytkownika” @ „ appserver.mydomain.com ” (przy użyciu hasła: TAK)

Moje pytanie brzmi: w jaki sposób mysql określa nazwę hosta klienta? Wierzę, że nie robi tego przez odwrotne wyszukiwanie DNS, ponieważ sprawdziłem i nie wskazuje on „appserver.mydomain.com” ani „appserver-lan.mydomain.com”. Ponadto serwer db nie ma wpisów związanych z serwerem aplikacji na / etc / hosts.

Podsumowując, jestem prawie pewien, że jest to problem z rozpoznawaniem nazwy hosta, ponieważ nadawanie uprawnień dla hosta „%” lub adresu IP sieci LAN działa dobrze.

Jakieś pomysły na to, czego mi brakuje?

Luis Fernando Alen
źródło
Jak myślisz, dlaczego nie jest to odwrotny DNS? Co się stanie, kiedy to zrobisz host -t PTR 10.1.2.3?
Zoredache
host -t PTR 10.xxx.xxx.xxx xxx.xxx.xxx.10.in-addr.arpa wskaźnik nazwy domeny ip-10-xxx-xxx-xxx.ec2.internal. Jak widać, nie jest to nazwa hosta pokazana w komunikacie o błędzie (appserver.mydomain.com) i to sprawiło, że pomyślałem, że MySQL nie szukał wstecz.
Luis Fernando Alen

Odpowiedzi:

13

Wykorzystuje odwrotne wyszukiwanie DNS. Pobiera adres IP klienta i wykorzystuje dowolny zwrócony rekord PTR dla tej nazwy.

Moim zdaniem uwierzytelnianie na podstawie nazwy wcale nie jest bardzo przydatne, sugeruję rozważenie użycia adresów IP.

Zobacz ten dokument o tym, jak Mysql używa DNS .

Zoredache
źródło
Dzięki za link, @Zoredache. Chciałbym unikać używania adresów IP, ponieważ wewnętrzny interfejs AWS korzysta z DHCP, a jego adres IP zmienia się od czasu do czasu (chyba, że ​​serwer uruchamia się, jak sądzę), a także jego rekord PTR. Dziwną rzeczą jest to, że ponieważ korzysta z wyszukiwania wstecznego, powinna powiedzieć „Odmowa dostępu dla użytkownika @ ip-10-xxx-xxx-xxx.ec2.internal”. zamiast appserver.mydomain.com ...
Luis Fernando Alen
1
Czy można całkowicie pominąć uwierzytelnianie IP / nazwy, zamiast tego użyć zapory opartej na hoście lub skonfigurować uwierzytelnianie oparte na SSL i Cert.
Zoredache
3

MySQL wykona odwrotne wyszukiwanie DNS na adresie IP, aby uzyskać nazwę hosta. Jeśli korzystasz z AWS EC2, możesz przypisać elastyczny adres IP swojemu serwerowi (nie kosztuje to żadnych dodatkowych), a następnie poprosić amazon o skonfigurowanie odwrotnego DNS dla elastycznego adresu IP, aby przejść do twojej nazwy hosta.

Czy twój serwer DB jest także w EC2? Ponieważ jeśli tak, użyje prywatnego adresu IP instancji, w przeciwnym razie użyje publicznego adresu IP. Wygląda na to, że Twój post to appserver-lan to prywatny adres IP 10.XXX.XXX.XXX przypisany do twojego serwera, a nie zepsuty.

Nie jestem jednak pewien, który adres IP zostałby użyty do komunikacji z innym regionem, ponieważ miałem tylko serwery w tym samym regionie.

Andy Hobbs
źródło
Tak, dotyczy to również EC2 i tego samego regionu. Dzięki za wskazówkę, Andy. Nie wiedziałem, że instancje EC2 używają wewnętrznego adresu IP do komunikacji między nimi, nawet jeśli podasz prawidłowy adres IP do komunikacji. To rozwiązało mój problem =]
Luis Fernando Alen
3

Właśnie miałem podobny problem, gdy serwer mysql nieprawidłowo wykonywał wyszukiwania wstecznego DNS.

Problem, który miałem, polegał na tym, że serwer miał uprawnienia do „użytkownika ”@'1.3.3.4”, a także „użytkownika ”@'reverse.dns. Użytkownik posiadający tylko adres IP miał minimalne uprawnienia, ale serwer mysql korzystał z uprawnień tego użytkownika zamiast tego z nazwą hosta i zwracał komunikat „Odmowa dostępu dla użytkownika„ użytkownik ”@'1.2.3.4 ”. Usunięcie użytkownika z adresem IP rozwiązało problem i zmusiło serwer do korzystania z drugiego użytkownika pod nazwą hosta.

Andy Beverley
źródło
0

Widziałem również problemy, w których nazwy hostów IPV4 i IPV6 i adresy IP nie są zgodne, a nazwa hosta jest używana tylko do uzyskania zgody użytkownika. Na przykład, gdy istnieje odwrotny DNS IPV6, ale nie ma przekierowującego DNS IPV6.

Andy Beverley
źródło