Я пытаюсь создать пользователя MySQL, которому будет разрешено подключаться к базе данных MySQL только с определенного имени хоста.
предоставить все в db_name. * для user_name'@'appserver-lan.mydomain.com, идентифицированного как some_passwd
Проверяя пользовательскую таблицу в базе данных mysql, я вижу, что пользователь был успешно создан:
использовать mysql; выберите * от пользователя, где User = 'user_name' и Host = 'appserver-lan.mydomain.com'
или
показать гранты для 'username'@'appserver-lan.mydomain.com'
Указанное мною имя хоста является псевдонимом имени amazon-ec2, которое при разрешении DNS-серверами AWS приводит к адресу LAN:
[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
Проблема в том, что когда я пытаюсь подключиться к IP-адресу локальной сети базы данных с этого appserver-lan, я получаю сообщение об ошибке отказа в доступе, хотя пароль правильный. Странная вещь здесь в том, что имя хоста, показанное в ошибке, не является именем хоста, которое я указал при создании пользователя:
ОШИБКА 1045 (28000): доступ запрещен для пользователя 'user_name' @ ' appserver.mydomain.com ' (используя пароль: ДА)
Итак, мой вопрос: как mysql определяет имя хоста клиента? Я полагаю, что это не происходит при обратном поиске DNS, так как я проверил и не указывает ни на appserver.mydomain.com, ни на appserver-lan.mydomain.com. Кроме того, на сервере базы данных нет записей, связанных с сервером приложений в / etc / hosts.
Подводя итог, я почти уверен, что это проблема разрешения имени хоста, так как предоставление привилегий для хоста "%" или для IP-адреса локальной сети работает просто отлично.
Есть идеи о том, что мне не хватает?
источник
host -t PTR 10.1.2.3
?Ответы:
Он использует обратный поиск DNS. Он берет IP-адрес клиента и использует любую запись PTR, возвращенную для этого имени.
По моему мнению, аутентификация на основе имени не очень полезна, я советую вам вместо этого использовать IP-адреса.
Посмотрите этот документ о том, как Mysql использует DNS .
источник
MySQL будет выполнять обратный поиск DNS по IP-адресу, чтобы получить имя хоста. Если вы работаете в AWS EC2, вы можете назначить эластичный IP-адрес вашему серверу (это не потребует дополнительных затрат), а затем попросить amazon настроить обратный DNS для эластичного IP-адреса, чтобы перейти к вашему имени хоста.
Также ваш сервер БД также в EC2? Потому что в этом случае он будет использовать частный IP-адрес экземпляра, в противном случае он будет использовать публичный IP-адрес. Из вашего поста видно, что ваш appserver-lan является частным ip 10.XXX.XXX.XXX, назначенным вашему серверу, а не путликом.
Я не уверен, какой IP-адрес будет использоваться при связи с другим регионом, хотя у меня были только серверы в одном регионе.
источник
У меня была похожая проблема, когда сервер mysql неправильно выполнял обратный поиск DNS.
Проблема, с которой я столкнулся, заключалась в том, что у сервера были права для 'user'@'1.2.3.4', а также 'user'@’verse.dns'. Пользователь с только IP-адресом имел минимальные разрешения, но сервер mysql использовал разрешения этого пользователя, а не пользователя с именем хоста, и возвращал сообщение «Доступ запрещен для пользователя 'user'@'1.2.3.4'". Удаление пользователя с IP-адресом устранило проблему и заставило serer использовать другого пользователя на имени хоста.
источник
Я также видел проблемы, когда имена хостов и IP-адреса IPV4 и IPV6 не совпадают, и где только имя хоста используется только для разрешения пользователя. Например, если есть обратный DNS IPV6, но нет прямого IPV6 DNS.
источник