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?
quelle
host -t PTR 10.1.2.3
?Antworten:
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 .
quelle
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.
quelle
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.
quelle
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.
quelle