gechger
Goto Top

Fehler beim Zugriff auf MySQL-Tabelle aus einem Skript heraus

Guten Tag,

folgende Fehlermeldung macht mir gerade zu schaffen:
mysqli_connect(): (HY000/2002): No connection could be made because the target machine actively refused it.

Es ist ein WIN2016 Server, IIS10, PHP7.2, MySQL5.0. Die Firewall ist so konfiguriert, daß der Prt 3306 von aussen erreichbar ist. Die Dienste laufen auch alle.
Mit diesen, durch eine Schleife gefüllte, Zugangsdaten

$cldb2 = mysqli_connect($host2, $user2, $kennwort2, $dbname2) or die(mysqli_error($cldb2));

soll die Verbindung aufgebaut werden. Die Zugangsdaten sind doppelt geprüft und korrekt.

Das kuriose ist, daß ich von aussen mit dem MySQL-Administrator (auch mit diesen Zugangsdaten) an die Datenbank komme und Querys starten kann.
Der Fehler kommt nur, wenn ich versuche, mit einem PHP-Skript eine Verbindung herzustellen. Beide betroffenen Server befinden sich bei T-Systems in der Cloud und befinden sich im derselben IP-Range.
Sie sind aber nicht in einer Domäne.

Zögert bitte nicht zu fragen, wenn Euch zur Analyse noch irgendwelche Informationen fehlen. Ich steh wirklich auf dem Schlauch.

Vielen Dank für jede Idee
Chris

Content-ID: 464792

Url: https://administrator.de/contentid/464792

Ausgedruckt am: 24.11.2024 um 20:11 Uhr

SeaStorm
SeaStorm 21.06.2019 um 11:03:26 Uhr
Goto Top
Hi

da wurde entweder eine Firewall so eingerichtet, das sie die Verbindung nur von bestimmten IPs annimmt und/oder der MySQL User eingeschränkt.
Guck mal wie der User in der DB steht.
Administrator@% z.B bedeutet, das von allen Verbindungen her der Admin verwendet werden kann.
Administrator@localhost würde eine Verbindung nur vom lokalen Server aus zulassen.
eisbein
eisbein 21.06.2019 um 11:27:28 Uhr
Goto Top
Hallo!

Überleg dir evtl. auch MySql auf den aktuellen Stand (Version 5.7) zu bringen. Version 5.0 ist Stand 2005 und PHP 7.2 ist Stand 2017.

Aufgrund der Fehlermeldung schließe ich mich der Vermutungen von @SeaStorm an.

Gruß
eisbein
gechger
gechger 21.06.2019 um 12:05:29 Uhr
Goto Top
Hallo,

vielen Dank schon mal für Eure Ideen.
Firewall will ich mal ausschliessen, es gibt dort keine Einschränkung auf IP-Adressen.
fw ipbereich

Für den Zugriff habe ich einen eigenen Benutzer angelegt, der nur Zugriff auf die eine verwendete Tabelle hat
sql berechtigung

Und extern, mit einem MySQL Administrator, kann dieser User zugreifen und mit den Tabellen arbeiten.
Nur wenn der Zugriff über ein PHP-Skript erfolgt, kommt diese Fehlermeldung.
An den Berechtigungen wird es dann wohl nicht liegen.
erikro
erikro 21.06.2019 um 13:43:50 Uhr
Goto Top
Moin,

PHP greift von außen zu oder lokal? Ansonsten wäre ein Blick in die php.ini hilfreich.

Liebe Grüße

Erik
SeaStorm
SeaStorm 21.06.2019 um 14:05:09 Uhr
Goto Top
das MySQL Log sollte da etwas mehr Infos haben, warum die Verbindung abgelehnt wurde.
erikro
erikro 21.06.2019 um 14:14:52 Uhr
Goto Top
Zitat von @SeaStorm:

das MySQL Log sollte da etwas mehr Infos haben, warum die Verbindung abgelehnt wurde.

Stimmt, das wäre auch hilfreich. face-wink
gechger
gechger 21.06.2019 um 14:27:28 Uhr
Goto Top
der Zugriff erfolgt von aussen.
Ich muß dann mal rauskriegen, wo MySQL seine log-Dateien hat.

Vielen Dank für diese Tipps.
gechger
gechger 24.06.2019 um 11:09:16 Uhr
Goto Top
Ich habe mal am WE die Log-Funktionen aktiviert. Wie erwartet steht da aber nichts drin, da die Verbindung ja vorher schon abgwiesen wird. Auch in den Log-Dateien auf dem ausführenden Server wurde nichts rein geschrieben, daß mir weiterhelfen könnte.
Ich habe auch die Dokus von MySQL und MariaDB gewälzt ohne einen Ansatz gefunden zu haben. Mittlerweile versuche ich in Dokus zum IIS einen Hinweis zu finden, der so ein Verhalten erklären könnte. Da ich ja mit dem MySQL Administrator volle Zugriffsberechtigung habe und der Fehler nur auftauscht, wenn der Zugriff aus einem Skript heraus erfolgt, könnte ja auch eine Sicherheitsfunktion vom WIN2016 Server verantwortlich sein.
eisbein
eisbein 25.06.2019 aktualisiert um 07:56:37 Uhr
Goto Top
Guten Morgen,

Da ich ja mit dem MySQL Administrator volle Zugriffsberechtigung habe

Das läuft über Port 80 und nicht über Port 3306?

Scanne mal Port 3306 deiner externen IP um zu sehen ob dieser überhaupt offen ist und welcher Dienst darauf lauscht.

Gruß
eisbein


Edit:

$cldb2 = mysqli_connect($host2, $user2, $kennwort2, $dbname2) or die(mysqli_error($cldb2));

Wie sieht die Variable $host2 aus? Steht da nur die IP oder IP:Port?
gechger
gechger 27.06.2019 um 13:38:56 Uhr
Goto Top
Hallo eisbein,

der Port 3306 ist offen

portscan

In $host2 steht der Servername drin ohne Porterweiterung.
Ich hatte es aber schon in allen Varianten versucht: IP mit und ohne Porterweiterung, Name mit und ohne Porterweiterung.
Hat leider keinen Unterschied gemacht.
erikro
Lösung erikro 27.06.2019 um 14:35:26 Uhr
Goto Top
Moin,

was ist denn mit der Firewall zwischen Netz und Internet? Hast Du die auch geprüft? Oder hängt der Rechner direkt im Netz? Wird evtl. der Port 443 an den Server weitergleitet und der 3306 nicht? Die Fehlermeldung, dass der Zugriff aktiv abgelehnt wurde, spricht eigentlich für einen entsprechenden Eintrag in einer FW.

Liebe Grüße

Erik
gechger
gechger 05.07.2019 um 18:33:23 Uhr
Goto Top
Hallo Erik,

ich hatte gerade einige Einsätze draussen, deshalb komme ich erst jetzt dazu, das Thema weiter zu verfolgen.
Der betreffende Server befindet sich in der Cloud bei T-Systems. Die haben allerdings eine Firewall zwischen der festen IP-Adresse nach draussen und unserer Servefarm. Diese Firewall ist aber so konfiguriert, das sie alles durchläßt und nur das NAT gesteuert wird. Abgesichert wird alles über die Windows Firewall.
Der Server, von dem die Verbindung aufgebaut werden soll, befindet sich aber auch innerhalb der Serverfarm und im selben IP-Bereich. Der muß nichtmal ins Internet gehen, um die Verbindung aufzubauen.
Deshalb tendiere ich weiterhin auf ein Problem in der IIS-Konfiguration oder in einer fehlerhaften Einstellung des MySQL-Servers. Alle Zugriffe funktionieren ja, außer man versucht die Verbindung aus einem PHP-Skript heraus herzustellen.
Der User, mit dem die Verbindung aufgebaut werden soll, hat die Verknüpfung % in der MySQL-Konfiguration, sollte sich also von überall verbinden können.
Firewall will ich als Ursache mal ausschliessen.

LG Chris
gechger
gechger 06.07.2019 um 15:50:28 Uhr
Goto Top
Lösung gefunden, es war wohl ein Routing Problem.
Der Server, von dem ich die Verbindung über ein Skript herstellen wollte, hat zwei Netzwerkkarten. Eine Karte für den inneren Dialog innerhalb der Cloud im Netz 192.168.2.x. Die Verbindung ins Internet, um eine Webanwendung zu erreichen, läuft über das Netz 10.100.100.x.
Wahrscheinlich hat das Skript immer versucht, die Verbindung über das 10er Netz herzustellen. Da wurde der Port 3306 nicht gefunden.

Ich bin drauf gekommen weil ein erneuter Portscan von aussen erfolgreich war, derselbe Scan aber vom Server, der das Skript ausführt, den Port 3306 als geschlossen gemeldet hat. Ich habe nun in den Zugangsdaten für das Skript eindeutig die feste IP des 192er Netzes hinterlegt und die Verbindung wird nicht mehr abgewiesen.

Vielen Dank für alle Helfer bei diesem Problem.
LG Chris