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?
źródło
host -t PTR 10.1.2.3
?Odpowiedzi:
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 .
źródło
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.
źródło
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.
źródło
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.
źródło