Einfache Webseite mit Tabelle aus MySql

  • Danke für den Tipp.

    Habe jetzt folgenden Fehler

    Code
    Warning: mysqli::__construct(): (HY000/1045): Access denied for user '#####'@'*************.powersrv.de' (using password: YES) in /var/www/html/connection.php on line 10
    Connection failed: Access denied for user '######'@'****************.powersrv.de' (using password: YES)

    Was ich nicht verstehe weil ich ja von der Ferne mit HeidiSQL zugreifen kann.

    Auch mit phpmyadmin sehe ich die Datenbank!

  • Kurz um das ganze mal aufzuschlüsseln. Wo liegt der Datenbankserver und wo der Webserver?


    Ich rate dir zudem, den Datenbankzugriff von deinem Client aus nicht einfach so direkt durchzuführen, sondern die Datenbank (sofern du alles auf einem VPS hast) einfach auf localhost bzw. ::1 lauschen zu lassen und dann Portforwarding mittels z.B. PuTTY zu nutzen.

    So kommst nur du an die Datenbank und die Verbindung ist sogar verschlüsselt, da Sie ja durch den SSH Tunnel zum Server geht.

    Beispiel/Anleitung für PuTTY: https://blog.devolutions.net/2…re-an-ssh-tunnel-on-putty


    Zum Fehler selbst - naja du hast da halt einen Berechtigungsfehler, ganz klar, steht ja da. Das heißt, entweder hast du das falsche Passwort reingegeben oder der Benutzer verfügt nicht über die nötigen Rechte um sich zu verbinden.

    Beachte auch, dass du, wenn die DB auf dem selben Server liegt, als Host nicht den Hostname oder FQDN angeben musst, sondern localhost. Du kommst nämlich vom localhost und nicht von außen, da der Zugriff mit ::1 als Source IP erfolgt.

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Kurz um das ganze mal aufzuschlüsseln. Wo liegt der Datenbankserver und wo der Webserver?

    Also es läuft beides auf meinem VPS

    ch rate dir zudem, den Datenbankzugriff von deinem Client aus nicht einfach so direkt durchzuführen, sondern die Datenbank (sofern du alles auf einem VPS hast) einfach auf localhost bzw. ::1 lauschen zu lassen und dann Portforwarding mittels z.B. PuTTY zu nutzen.

    So kommst nur du an die Datenbank und die Verbindung ist sogar verschlüsselt, da Sie ja durch den SSH Tunnel zum Server geht.

    Beispiel/Anleitung für PuTTY: https://blog.devolutions.net/2…re-an-ssh-tunnel-on-putty

    Ich möchte von einer Sps aus in die Daten Bank schreiben. Ist das eine schlechte Idee?


    Zum Fehler selbst - naja du hast da halt einen Berechtigungsfehler, ganz klar, steht ja da. Das heißt, entweder hast du das falsche Passwort reingegeben oder der Benutzer verfügt nicht über die nötigen Rechte um sich zu verbinden.

    Beachte auch, dass du, wenn die DB auf dem selben Server liegt, als Host nicht den Hostname oder FQDN angeben musst, sondern localhost. Du kommst nämlich vom localhost und nicht von außen, da der Zugriff mit ::1 als Source IP erfolgt.

    Wenn ich mit HeidiSql mit dem selben Benutzer von außen zugreife dann funktioniert es also denke ich hat der User ausreichend Rechte.


    Was heißt "::1"


    Danke für die Hilfe

  • Wenn ich mit HeidiSql mit dem selben Benutzer von außen zugreife dann funktioniert es also denke ich hat der User ausreichend Rechte.

    Die kurze Antwort: nein.

    Die lange Antwort kommt weiter unten.


    Die User kannst du dir über SSH ansehen, dort steht auch der Hostname, von dem sie kommen können.

    Die Rechte allerdings sind eine ganz andere Geschichte. Die werden nämlich immer an User@LoginHost vergeben.


    show grants; zeigt dir deine Privilegien. 'myuser'@'localhost' hat demnach andere Rechte, als 'myuser'@'%' weil es andere Nutzer sind.


    sqluser.jpg


    Hier siehst du, dass der Host immer zum User Eintrag gehört.

    select * from information_schema.user_privileges; zeigt dir alle Privilegien aller Nutzer.


    Was heißt "::1"

    Das ist die IPv6 Version von 127.0.0.1 - also localhost bzw. das Loopback Device.

    Speaking of localhost:


    Bei der DNS Auflösung von Hostnamen geht das Betriebssystem immer zuerst in die Datei /etc/hosts, bevor ein DNS Server befragt wird.

    Mit hoher Wahrscheinlichkeit steht da, dass ********.powersrv.de auf 127.0.0.1 zeigt - also das Loopback Device.

    Viele SQL Treiber stricken dir aus localhost nämlich nicht das Loopback Device (also TCP über Loopback, sprich AF_INET oder AF_INET6), sondern gehen über den Unix Domain Socket /var/run/mysqld/mysqld.sock (also AF_UNIX), was wiederum andere Privilegien zur Folge haben kann.


    Bei mir sieht der Grant Eintrag dann nämlich so aus: GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' IDENTIFIED VIA unix_socket


    Deshalb kann ich dir eine Faustregel mitgeben: Lokale Nutzer sollten andere Zugangsdaten haben, als externe Nutzer.

    Die Rechtestruktur von MySQL ist nicht gerade einfach zu durchschauen und bringt so seine Besonderheiten mit sich.


    Dazu kommen noch so besondere Sachen vom Betriebssystem und wie MySQL mit "localhost" umgeht.

  • ich bin da auch schonmal daran verzweifelt...

    gerade mit mysql localhost oder domain/ip beide werden für sich selbst behandelt.

    sprich hat man z.B. extern zugriff auf die DB, heist das noch nicht zwangsläufig das man via localhost darauf zugreifen darf, geht man aber localhost über die IP, geht es auf einmal...

    jeder der einen Schreibfehler in meinem Post findet, darf ihn Kommentarlos behalten

    P.S. gilt auch für Schignaturen ;)