Як mysql визначає ім'я хоста своїх клієнтів?


14

Я намагаюся створити користувача MySQL, якому буде дозволено підключатися до бази даних MySQL лише з певного імені хоста.

дозволити всім на db_name. * на 'user_name'@'appserver-lan.mydomain.com', ідентифікований 'some_passwd'

Перевіряючи таблицю користувачів на mysql db, я бачу, що користувач був створений успішно:

використовувати mysql; виберіть * від користувача, де User = 'ім'я_користувача' та Host = 'appserver-lan.mydomain.com'

або

показати гранти для 'username'@'appserver-lan.mydomain.com'

Ім'я хоста, яке я вказав, є псевдонімом до імені amazon-ec2, яке при вирішенні DNS-серверів AWS призводить до локальної адреси:

[root @ db_server ~] # хост appserver-lan.mydomain.com

appserver-lan.mydomain.com - псевдонім для ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com має адресу 10.xxx .xxx.xxx

Проблема полягає в тому, що коли я намагаюся підключитися до бази даних LAN IP від ​​цього додатка-lan, я отримую помилку в доступі, відхилену в доступі, хоча пароль правильний. Дивна справа в тому, що ім'я хоста, вказане помилкою, не є ім'ям хоста, яке я вказав, коли користувач створювався:

ПОМИЛКА 1045 (28000): Відмовлено в доступі для користувача 'ім'я користувача' @ ' appserver.mydomain.com ' (з використанням пароля: ТАК)

Отже, моє запитання: як mysql визначає ім'я хоста клієнта? Я вважаю, що це не відбувається за допомогою зворотного пошуку DNS, оскільки я перевірив, і він не вказує на "appserver.mydomain.com", а також на "appserver-lan.mydomain.com". Крім того, на db-сервері немає записів, пов’язаних із додатком на / etc / hosts.

Підводячи підсумок, я впевнений, що це проблема вирішення імені хоста, оскільки надання пільг для хоста "%" або для IP-адреси локальної мережі працює просто чудово.

Будь-які ідеї того, чого мені не вистачає?


Чому, на вашу думку, це не зворотний DNS? Що відбувається, коли ти робиш host -t PTR 10.1.2.3?
Зоредаче

хост -t PTR 10.xxx.xxx.xxx xxx.xxx.xxx.10.in-addr.arpa вказівник доменного імені ip-10-xxx-xxx-xxx.ec2.internal. Як ви бачите, це не ім'я хоста, показане у повідомленні про помилку (appserver.mydomain.com), і це змусило мене думати, що MySQL не робить зворотного пошуку.
Луїс Фернандо Ален

Відповіді:


13

Він використовує зворотний пошук DNS. Він приймає IP-адресу клієнта і використовує те, що повертається запис PTR для цього імені.

На мою думку, автентифікація на основі імені зовсім не дуже корисна, я пропоную вам замість цього використовувати IP-адреси.

Дивіться цей документ про те, як Mysql використовує DNS .


Дякуємо за посилання, @Zoredache. Я хотів би уникати використання IP-адрес, оскільки внутрішній інтерфейс AWS використовує DHCP і його IP час від часу змінюється (коли я думаю, що сервер завантажується), а також його запис PTR. Дивна річ у тому, що оскільки він використовує зворотні пошуки, він повинен говорити "Доступ заборонено для користувача @ ip-10-xxx-xxx-xxx.ec2.internal". замість appserver.mydomain.com ...
Луїс Фернандо Ален

1
Чи можете ви пропустити аутентифікацію IP / імені взагалі, замість цього або використовувати брандмауер на основі хоста або встановити SSL та автентифікацію на основі Cert.
Зоредаче

3

MySQL буде робити зворотний пошук DNS на IP-адресу, щоб отримати ім'я хоста. Якщо ви працюєте в AWS EC2, тоді ви можете призначити еластичний IP для вашого сервера (це не коштує додаткових витрат), а потім попросити Amazon встановити зворотний DNS для еластичного IP для переходу до вашого імені хоста.

Також ваш сервер БД також знаходиться в EC2? Тому що якщо це так, він буде використовувати приватну IP-адресу екземпляра, інакше буде використовувати загальнодоступну ip-адресу. Це виглядає з вашої публікації, оскільки ваш додаток-сер - це 10.XXX.XXX.XXX приватний ip, призначений для вашого сервера, а не путлік.

Я не впевнений, яка IP-адреса буде використовуватися при спілкуванні з іншим регіоном, хоча у мене були тільки сервери в одному регіоні.


Так, це також на EC2 і в тому ж регіоні. Дякую за пораду, Енді. Я не знав, що екземпляри EC2 використовують внутрішній ip для зв'язку між ними, навіть якщо ви вказали дійсний ip для зв'язку. Це вирішило мою проблему =]
Луїс Фернандо Ален

3

У мене щойно була подібна проблема, коли сервер mysql неправильно робив зворотні пошуки DNS.

Проблема у мене полягала в тому, що сервер мав дозволи на "user'@'1.2.3.4", а також на "user'@'reverse.dns". Користувач із лише IP-адресою мав мінімальні дозволи, але сервер mysql використовував дозволи цього користувача, а не того, з ім'ям хоста, і повертав повідомлення "Доступ заборонено для користувача" user'@'1.2.3.4 '". Видалення користувача з IP-адресою вирішило проблему і змусило серера використовувати іншого користувача під ім'ям хоста.


0

Я також бачив проблеми, коли імена хостів IPV4 та IPV6 та IP адреси не збігаються, і де ім'я хоста використовується лише для дозволу користувача. Наприклад, там, де є зворотний DNS IPV6, але немає прямого DNS IPV6.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.