Kalle_B: Zugriff auf entfernte Datenbank

Hallöle,

ein Programm, das schon mal lief, kann keinen Kontakt aufnehmen mit einer entfernten Datenbank. Ich erinnere mich, dass der Provider damals etwas freigeschaltet hat, das scheint nun wieder blockiert zu sein.

Habe Folgendes versucht:

  
    $conn_id = @mysql_connect( 'xxx.xx.xxx.xx', 'kennwort', 'passwort' );  
  
    if ( $conn_id ) {  
...  
    } else {  
      echo "<p>".mysql_error()."<br>Verbindung zu <b>host [".$db[$nr]['host']."]</b> ist fehlgeschlagen.</p>";  
    }  

Die Fehlermeldung wird ausgegeben. Wenn ich mit phpmyadmin zugreife, klappt es, also host, kennwort, passwort sind okay.

Kann ich per PHP diese Remote-Zulassung abfragen und/oder sogar setzen?

Lieben Gruß, Kalle

  1. Bei meinem Provider kann ich das mittels Web-Interface einstellen, ob ich einen Zugriff auf die Datenbank von ausserhalb des Servers zulassen möchte oder nicht. Man kann über das Webinterface auch Datenbanken anlegen.

    Falls Du keinen solchen Administrations-Zugang hast, dann wird vermutlich Dein Provider das für Dich machen müssen.

    viele Grüsse

    Thomas.

    1. Hallo, Thomas,

      Bei meinem Provider kann ich das mittels Web-Interface einstellen, ob ich einen Zugriff auf die Datenbank von ausserhalb des Servers zulassen möchte oder nicht. Man kann über das Webinterface auch Datenbanken anlegen.

      Guter Tipp, der Server wurde im Sept. neu aufgesetzt.

      Mal schauen, welcher Punkt im Web-Interface das sein könnte ...

      1. Mal schauen, welcher Punkt im Web-Interface das sein könnte ...

        Ich kann hier zwischen den Einstellungen

        • local/remote
        • local only

        wählen.

        1. Mal schauen, welcher Punkt im Web-Interface das sein könnte ...

          Ich kann hier zwischen den Einstellungen

          • local/remote
          • local only

          wählen.

          Ich habe hier
          Bearbeite Datenbanken - Remote hosts - Allowed hosts for MySQL
          localhost
          (und habe in der zweiten Zeile hinzugefügt)
          xxxxxxxx.de

          Danach war die DB von eigenen (lokalen) PHP-Programmen nicht mehr erreichbar. Habe die zweite Zeile wieder gelöscht, Sperrung blieb.

          Provider hat telefonisch geholfen, die DB war nicht mehr für den ursprünglichen Benutzer zugänglich. Weiss der Geier, warum.

          Ich lass jetzt erstmal die Finger davon, weil die DB in Echtzeit gebraucht wird. Spielen ist jetzt verboten ;-)

          Kalle

  2. Hello Kalle,

    Die Fehlermeldung wird ausgegeben.

    Und wie lautet sie?

    Bei den Einsellungen könnte es sich um eine Zeile in der my.cnf handeln

    skip-networking

    Außerdem muss der MySQL-Server an eine von außen erreichbare IP-Adresse gebunden werden, was er üblicherweise bei den Standardinstalleionen absichtlich nicht ist

    http://www.huschi.net/12_123_de-mysql-fuer-externen-zugriff-konfigurieren.html

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo Tom,

      danke für den Link. Ich lasse aber jetzt erstmal die Finger davon, nachdem ich bei einem Versuch mit WEBMIN die DB für den lokalen PHP-User gesperrt habe und auf Providerhilfe angewiesen war. Erfreulicherweise gibt es dort einen Fachmann (das bin ich für Server-Einstellungen sicher nicht).

      Lieben Gruß, Kalle

    2. Hallo Tom,

      der Provider von der Remote-Datenbank hat diese freigegeben für den Zugriff von aussen (Mail als Bestätigung erhalten).

      Jetzt probiere ich von Win2000 (XAMPP läuft) folgendes:

      //TEST  
      $p022_connect = mysql_connect( 'xxx.xx.xxx.xx', 'kw', 'pw' );  
      if ( $p022_connect ) echo "JA<br>"; else echo "NEIN<br>";  
      
      

      Meldung:

      Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'http' (11001) in D:\www\beispiel.de\000\p022.php on line 17
      NEIN

      IP, kw und pw funktionieren einwandfrei, wenn ich phpmyadmin aufrufe.

      Kann es sein, dass der Ausgang zum "Fremdserver" gesperrt ist? Ich kann nicht erkennen, ob ich bei mir nicht rauskomme oder beim Fremdserver nicht reinkomme.

      Wenn ich in eine DOS- Box wörtlich eingebe:
      telnet beispiel.de.org 3306
      werden Zeichen ausgegeben.

      Wenn ich statt "beispiel" den richtigen Namen nehme, kommt
      Verbindungsaufbau zu ???.de.org...Es konnte keine Verbindung hergestellt werden mit Host  auf Port 3306 : Verbinden fehlgeschlagen

      Kalle

      1. Hello,

        der Provider von der Remote-Datenbank hat diese freigegeben für den Zugriff von aussen (Mail als Bestätigung erhalten).

        Jetzt probiere ich von Win2000 (XAMPP läuft) folgendes:

        //TEST

        $p022_connect = mysql_connect( 'xxx.xx.xxx.xx', 'kw', 'pw' );
        if ( $p022_connect ) echo "JA<br>"; else echo "NEIN<br>";

          
        1\. woher kommt das 'http'?  
        2\. warum hast Du das mysql\_error() aus der Fehlermeldung rausgenommen?  
        3\. passt die Client-API zum Connector der Datenbank?  
           Welche Versionen sind installiert?  
        4\. Hast Du einen User eingerichtet in der MySQL-Datenbank-Verwaltung  
           'username'@'IP\_des\_Clients' oder, wenn die nicht bekannt ist  
           'username'@'%', was ich aber möglichst vermeiden würde wegen gefährlicher...  
          
        5\. Hast Du eine Firewall zwischen dem Client und dem MySQL-Server sitzen?  
           Meistens ist es die Popelwall von Windows, oder noch schlimmer, die von  
           irgendeinem beschissenen Virenschutzprogramm, die stört.  
          
        6\. Ist am Router ggf. der Port 3306 gesperrt, bzw. nicht freigegeben für Requests  
           aus deinem Client-Netz hinaus in die Welt?  
          
          
        Ich habe derartige Aktionen schon mit vielen Kunden durchgezogen, die allerdings ihre Datenbank ins Haus geholt haben und dann von 1&1 aus (dort liegen die Webseiten) über DynDNS auf ihren MySQL-Server im Hause zugegriffen haben.  
          
        Das hat den Vorteil, dass bei richtiger Konfiguration niemand (beim Provider) die gesamte Datenbank in Zugriff bekommt, sondern maximal die einzelnen Datenpakete von einzelnen Requests und Responses  
          
          
          
        Liebe Grüße aus dem schönen Oberharz  
          
          
        Tom vom Berg  
        ![](http://selfhtml.bitworks.de/Virencheck.gif)  
          
        
        -- 
        Nur selber lernen macht schlau  
        <http://bergpost.annerschbarrich.de>  
          
        
        
        1. Hello,

          will mich mal bemühen, deine Fragen zu beantworten.

          1. woher kommt das 'http'?

          Sorry, habe verschiedene Versuche gemacht, PHP- Code und Meldung gehören nicht zusammen. Hier nochmal:

          $p022_connect = mysql_connect( 'xxx.xx.xxx.xx', 'kw', 'pw' );  
          if ( $p022_connect ) echo "JA<br>"; else echo "NEIN<br>";  
          
          

          Meldung unter Win2000:
          Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'xxx.xx.xxx.xx' (10061) in D:...\p022.php on line 17
          NEIN

          Meldung unter LINUX (Ersqatzserver):
          NEIN

          1. warum hast Du das mysql_error() aus der Fehlermeldung rausgenommen?

          Habe die recht komplizierte DB-Anmeldung durch zwei Testzeilen ersetzt. Hier nochmal das etwas abgeänderte Original:

              // MIT HOST VERBINDEN  
              $db[$nr]['conn_id'] = @mysql_connect( $db[$nr]['host'], $db[$nr]['id'], $db[$nr]['pw'] );  
            
              if ( $db[$nr]['conn_id'] ) {  
          ...  
              } else {  
                // 2006-03-03 MELDUNG NUR BEI FREIGEGEBENER DB  
                if ( $db[$nr]['gesperrt'] == 0 ) {  
          //      echo "<p>".mysql_error()."<br>Verbindung zu <b>host [".$db[$nr]['host']."]</b> ist fehlgeschlagen.</p>";  
                  echo "<pre><b>".mysql_errno().": ".mysql_error()."</b><br><b>host [".$db[$nr]['host']."]</b></pre>";  
                }  
              }  
          
          

          Das ergibt die Meldung:
          0:
          host [xxx.xx.xxx.xx]

          Also keine Verbindung zustandegekommen, aber auch kein Fehler -  Hä?

          1. passt die Client-API zum Connector der Datenbank?
               Welche Versionen sind installiert?

          Frage nicht verstanden.

          1. Hast Du einen User eingerichtet in der MySQL-Datenbank-Verwaltung
               'username'@'IP_des_Clients' oder, wenn die nicht bekannt ist
               'username'@'%', was ich aber möglichst vermeiden würde wegen gefährlicher...

          Muss ich mal eben in phpmyadmin gucken (Provider hat ja was geändert) ...
          Es gibt einen 'username'@localhost und einen 'username'@%, wobei username beide Male derselbe ist. Mögliche Fehlerquelle? (Nöö, root kommt auch mehrfach vor).

          % deshalb, weil auch ein USB- Stick "Ersatzserver" sein darf und sich Daten ziehen kann.

          1. Hast Du eine Firewall zwischen dem Client und dem MySQL-Server sitzen?
               Meistens ist es die Popelwall von Windows, oder noch schlimmer, die von
               irgendeinem beschissenen Virenschutzprogramm, die stört.

          Bei Win2000 weiss ich es nicht, bin hier beim Kunden an einem (mir) unbekannten Router angeschlossen. Aber der Versuch, von einem Linux- Server zum anderen scheitert eben auch.

          1. Ist am Router ggf. der Port 3306 gesperrt, bzw. nicht freigegeben für Requests
               aus deinem Client-Netz hinaus in die Welt?

          s.o.

          Ich habe derartige Aktionen schon mit vielen Kunden durchgezogen, die allerdings ihre Datenbank ins Haus geholt haben und dann von 1&1 aus (dort liegen die Webseiten) über DynDNS auf ihren MySQL-Server im Hause zugegriffen haben.

          Das hat den Vorteil, dass bei richtiger Konfiguration niemand (beim Provider) die gesamte Datenbank in Zugriff bekommt, sondern maximal die einzelnen Datenpakete von einzelnen Requests und Responses

          Tja, damit hätte ich die Gesamtproblematik der Linux- Servertechnik und des zugehörigen Know-Hows am Hals ... Wollte ich eigentlich delegieren, aber wie man sieht, klappt das nicht.

          Lieben Gruß, Kalle

          1. Hello,

            1. passt die Client-API zum Connector der Datenbank?
                 Welche Versionen sind installiert?

            Frage nicht verstanden.

            Ich ging davon aus, dass der Provider die MySQL-Version geändert hat und damit acuh das Anmeldeverfahren? Dann wird das Passwort jetzt verschlüsselt übrtragen, was aber deine alte Client-API ggf. noch nicht unterstützt.

            Versuche also erstmal festzustellen, welche Seite welche API hat/erwartet.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de