Linuchs: kann entfernte DB nicht öffnen

Moin,

PHP-Vers.=[5.3.3-7+squeeze15]

Von Server A möchte ich auf die Datenbank des Servers B zugreifen und setze dieses Kommando ab:

mysql_connect( 'wp427.webpack.hosteurope.de', 'db12936182-kd103', 'mypw' );

Fehlermeldung:

Warning: mysql_connect(): Access denied for user 'db12936182-kd103'@'osmer.inet.de' (using password: YES) ...

inet.de ist dabei der Server A, er scheint den externen Zugriff nicht zu erkennen.

Was mache ich falsch?

Gruß, Linuchs

  1. Hallo Linuchs,

    Was mache ich falsch?

    Das kennst du bereits?

    Gruss
    Henry

    1. Hallo Henry,

      den externen Zugriff auf die DB habe ich erlaubt. Aus deinem Link:

      Greifen Sie dann auf die Adresse des Servers zu, auf dem Ihre Datenbank liegt. Dieser wird im KIS unter "Produktverwaltung - Ihr Produktbereich - Konfigurieren - Allgemeines - Allgemeine Informationen - Datenbanken" angezeigt. Der Port lautet 3306.
      

      Mit dem Port kann ich nichts anfangen, wo wird der bei mysql_connect angegeben?

      Habe gerade mit dem Support telefoniert, die meinen, das Passwort muss neu gesetzt und dann 15 min gewartet werden. Ja toll.

      Wenn das Passwort nicht stimmt, würde ich so eine Fehlermeldung erwarten:

      mysql_connect(): Access denied for user 'db12936182-kd103'@'wp12936182.server-he.de'
      

      aber nicht diese

      mysql_connect(): Access denied for user 'db12936182-kd103'@'osmer.inet.de'
      

      Versucht PHP, die lokale DB zu öffnen, wenn die externe nicht will?

      Gruß, Linuchs

      1. Mit Hilfe des Supports klappt der Zugang nun.

        1. Hallo Linuchs,

          Mit Hilfe des Supports klappt der Zugang nun.

          Haben die auch gesagt, worans lag?

          Bis demnächst
          Matthias

          --
          Rosen sind rot.
      2. Tach!

        den externen Zugriff auf die DB habe ich erlaubt.

        Das ist übrigens keine besonders gute Idee, denn nun ist da ein weiterer Punkt für direkte Angriffe hinzugekommen. Besser wäre es, über den sowieso schon vorhandenen SSH-Zugang zu tunneln.

        Mit dem Port kann ich nichts anfangen, wo wird der bei mysql_connect angegeben?

        Da gar nicht mehr. mysql_*-Funktionen sind veraltet. Ansonsten gibt es das PHP-Handbuch, das solche einfachen Fragen direkt klärt.

        Wenn das Passwort nicht stimmt, würde ich so eine Fehlermeldung erwarten:

        mysql_connect(): Access denied for user 'db12936182-kd103'@'wp12936182.server-he.de'
        

        Du solltest deine Erwartungen korrigieren und etwas über das Login-System von MySQL lernen. Das identifiziert einen Nutzer anhand von drei Kriterien: Username, Passwort und Host, von dem aus zugegriffen wird. Somit könnte man dieselbe Username-Passwort-Kombination unterschiedlich behandeln, wenn man unterschiedliche Hostnamen dazu verwaltet.

        Die Angabe hinter dem @ gibt an, welchen Host MySQL erkannt hat, von dem du gerade kommst. Es nützt dir nichts, wenn du den Namen des Servers genannt bekommst, auf den du zugreifst, denn den weißt du bereits. Du weißt aber nicht, ob der Server deine IP-Adresse richtig aufgelöst hat zu einem ihm bekannten Hostnamen, um damit dann den passenden Rest der Dreifaltigkeit (sprich Username und Password) zu finden.

        Üblicherweise schränkt man den Zugriff so ein, dass ein Username nur mit localhost als Absender oder dem lokalen Netzwerk (auch da eingeschränkt soweit es möglich ist) erlaubt ist, so dass Angriffe von außen zumindest erschwert werden. Wenn du nun von außen kommst, musst du einen weiteren Nutzer anlegen, dessen Nutzung von deinem Host aus erlaubt ist. Oder man bohrt von einem vorhandenen Nutzer den Host auf % auf, was aber eine ganz schlecht Idee ist, besonders in Kombination mit einem schwachen Passwort.

        Wenn es dir also nicht möglich ist, einen SSH-Tunnel zu nutzen, um dann aus Sicht des MySQL-Servers aus dem lokalen Netzwerk oder localhost zu kommen, sollte wenigstens der Host-Anteil der Nutzer-Passwort-Host-Kombination so weit wir möglich eingeschränkt werden.

        dedlfix.

        1. Tach!

          den externen Zugriff auf die DB habe ich erlaubt.

          Das ist übrigens keine besonders gute Idee, denn nun ist da ein weiterer Punkt für direkte Angriffe hinzugekommen. Besser wäre es, über den sowieso schon vorhandenen SSH-Zugang zu tunneln.

          Kann das PHP? Bitte mal ein Beispiel.

          Üblicherweise schränkt man den Zugriff so ein, dass ein Username nur mit localhost als Absender oder dem lokalen Netzwerk (auch da eingeschränkt soweit es möglich ist) erlaubt ist,

          Es ist aber auch durchaus üblich daß Webserver/PHP und MySQLserver auf unterschiedlichen Maschinen und in getrennten Netzen laufen!

          MfG

          1. Tach!

            Besser wäre es, über den sowieso schon vorhandenen SSH-Zugang zu tunneln.

            Kann das PHP? Bitte mal ein Beispiel.

            Prinzipiell ja, es gibt ein PECL-Paket für SSH, mit dem man auch einen Tunnel erstellen kann. Ich würde das aber nicht über PHP initialisieren, auch weil PECL immer eine Unsicherheit bezüglich des Vorhandenseins ist. Zudem ist es eher eine Aufgabe für das Netzwerk und weniger für die Anwendung. Das Betriebssystem bietet vielfältige Möglichkeiten, solange es ein unixoides ist auch von Haus aus. Sogar ein Aufbauen der Verbindung auf Anfrage, ist über den xinetd möglich. Anleitungen dazu bitte im Netz nachschlagen.

            Die Frage ist noch, ob man mit dem verzögerten Verbindungsaufbau leben kann, und ob einem Sicherheit oder Geschwindigkeit lieber ist.

            Üblicherweise schränkt man den Zugriff so ein, dass ein Username nur mit localhost als Absender oder dem lokalen Netzwerk (auch da eingeschränkt soweit es möglich ist) erlaubt ist,

            Es ist aber auch durchaus üblich daß Webserver/PHP und MySQLserver auf unterschiedlichen Maschinen und in getrennten Netzen laufen!

            Ich kenne keine Zahlen, aber ich vermute mal, dass es jeder zu vermeiden versucht, Anwendung und Datenhaltung solcherart auseinanderzulegen. Einerseits aus Gründen, zwischen beiden eine sicheren Kanal legen zu müssen nebst zusätzlicher Öffnung der Systeme nach außen, andererseits auch wegen der Laufzeit.

            dedlfix.

          2. Besser wäre es, über den sowieso schon vorhandenen SSH-Zugang zu tunneln.

            Kann das PHP? Bitte mal ein Beispiel.

            https://blog.rjmetrics.com/2009/01/06/php-mysql-and-ssh-tunneling-port-forwarding/, auch wenn ich den Tunnel eher dauerhaft per autossh o.ä. aufbauen würde.