Wie ermittelt mysql den Hostnamen seiner Clients?


14

Ich versuche, einen MySQL-Benutzer zu erstellen, der nur von einem bestimmten Hostnamen aus eine Verbindung zur MySQL-Datenbank herstellen darf.

Gewähren Sie allen Einträgen in Datenbankname. * den Namen "Benutzername "@Appserver-LAN.Mydomain.com", der durch "some_passwd" gekennzeichnet ist.

Durch Überprüfen der Benutzertabelle in der MySQL-Datenbank kann ich feststellen, dass der Benutzer erfolgreich erstellt wurde:

benutze mysql; Wählen Sie * von Benutzer aus, wobei Benutzer = 'Benutzername' und Host = 'appserver-lan.meinedomain.com'

oder

Stipendien für 'Benutzername'@'appserver-lan.meinedomain.com' anzeigen

Der von mir angegebene Hostname ist ein Alias ​​für einen amazon-ec2-Namen, der, wenn er von den AWS-DNS-Servern aufgelöst wird, zu einer LAN-Adresse führt:

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

appserver-lan.mydomain.com ist ein Alias ​​für ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com hat die Adresse 10.xxx .xxx.xxx

Das Problem ist, dass beim Versuch, von diesem Anwendungsserver-LAN aus eine Verbindung zur Datenbank-LAN-IP herzustellen, der Zugriff verweigert wird, obwohl das Kennwort korrekt ist. Das Seltsame dabei ist, dass der in dem Fehler angezeigte Hostname nicht der Hostname ist, den ich beim Erstellen des Benutzers angegeben hatte:

FEHLER 1045 (28000): Zugriff für Benutzer 'Benutzername' @ ' Anwendungsserver.meinedomäne.com ' verweigert (mit Kennwort: JA)

Meine Frage lautet also: Wie ermittelt MySQL den Hostnamen des Clients? Ich glaube, dass dies bei einer umgekehrten DNS-Suche nicht der Fall ist, da ich dies überprüft habe und es weder auf "appserver.meinedomain.com" noch auf "appserver-lan.meinedomain.com" verweist. Darüber hinaus hat der Datenbankserver keine Einträge in Bezug auf den Anwendungsserver auf / etc / hosts.

Zusammenfassend bin ich mir ziemlich sicher, dass es sich um ein Problem mit der Auflösung von Hostnamen handelt, da das Gewähren von Berechtigungen für Host "%" oder für die LAN-IP gut funktioniert.

Irgendwelche Ideen, was mir fehlt?


Warum ist es Ihrer Meinung nach kein Reverse-DNS? Was passiert wenn du machst host -t PTR 10.1.2.3?
Zoredache

Host -t PTR 10.xxx.xxx.xxx xxx.xxx.xxx.10.in-addr.arpa Domänennamenzeiger ip-10-xxx-xxx-xxx.ec2.internal. Wie Sie sehen können, ist dies nicht der Hostname, der in der Fehlermeldung (appserver.mydomain.com) angezeigt wird, und das ließ mich glauben, dass MySQL keine umgekehrte Suche durchführte.
Luis Fernando Alen

Antworten:


13

Es wird eine umgekehrte DNS-Suche verwendet. Es nimmt die IP-Adresse des Clients und verwendet den PTR-Datensatz, der für diesen Namen zurückgegeben wird.

Meiner Meinung nach ist die Authentifizierung anhand des Namens überhaupt nicht sehr nützlich. Ich empfehle, stattdessen IP-Adressen zu verwenden.

In diesem Dokument erfahren Sie, wie Mysql DNS verwendet .


Danke für den Link, @Zoredache. Ich möchte die Verwendung von IP-Adressen vermeiden, da die interne AWS-Schnittstelle DHCP verwendet und ihre IP-Adresse sich von Zeit zu Zeit ändert (wenn der Server hochfährt, denke ich) sowie ihren PTR-Eintrag. Das Seltsame hier ist, dass es, da es Reverse-Lookups verwendet, "Zugriff verweigert für Benutzer @ ip-10-xxx-xxx-xxx.ec2.internal" sagen sollte. statt appserver.meinedomain.com ...
Luis Fernando Alen

1
Können Sie die IP- / Namensauthentifizierung insgesamt überspringen, stattdessen entweder eine hostbasierte Firewall verwenden oder die SSL- und Cert-basierte Authentifizierung einrichten?
Zoredache

3

MySQL führt eine Reverse-DNS-Abfrage der IP-Adresse durch, um den Hostnamen zu ermitteln. Wenn Sie mit AWS EC2 arbeiten, können Sie Ihrem Server eine elastische IP zuweisen (dies kostet keinen Aufpreis) und amazon dann auffordern, Reverse-DNS einzurichten, damit die elastische IP an Ihren Hostnamen geht.

Ist auch dein DB Server auch in EC2? Wenn dies der Fall ist, wird die private IP-Adresse der Instanz verwendet, andernfalls wird die öffentliche IP-Adresse verwendet. Wie es aussieht, postest du als AppServer-Lan die private IP 10.XXX.XXX.XXX, die deinem Server zugewiesen ist, nicht die Putlic-IP.

Ich bin nicht sicher, welche IP-Adresse für die Kommunikation mit einer anderen Region verwendet wird, da ich nur Server in derselben Region hatte.


Ja, es ist auch auf EC2 und in derselben Region. Danke für den Tipp, Andy. Ich wusste nicht, dass EC2-Instanzen die interne IP für die Kommunikation zwischen ihnen verwenden, selbst wenn Sie die gültige IP für die Kommunikation angeben. Das hat mein Problem gelöst =]
Luis Fernando Alen

3

Ich hatte gerade ein ähnliches Problem, bei dem der MySQL-Server scheinbar falsche Reverse-DNS-Lookups durchführte.

Das Problem, das ich hatte, war, dass der Server Berechtigungen für 'user'@'1.2.3.4' sowie 'user'@'reverse.dns' hatte. Der Benutzer mit nur der IP-Adresse hatte nur minimale Berechtigungen, aber der MySQL-Server verwendete die Berechtigungen dieses Benutzers und nicht die mit dem Hostnamen und gab die Meldung "Zugriff verweigert für Benutzer 'Benutzer'@'1.2.3.4'" zurück. Das Löschen des Benutzers mit der IP-Adresse behebt das Problem und zwingt den Serer, den anderen Benutzer unter dem Hostnamen zu verwenden.


0

Ich habe auch Probleme gesehen, bei denen IPV4- und IPV6-Hostnamen und -IP-Adressen nicht übereinstimmen und bei denen nur ein Hostname für die Benutzerberechtigung verwendet wird. Zum Beispiel, wenn es ein IPV6-Reverse-DNS, aber kein Forward-IPV6-DNS gibt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.