Jörg Reinholz: Skript als "Gateway" zu einer externen MySQL-DB ?

Beitrag lesen

Soweit, so gut - aber jetzt stehe ich da und weiß überhaupt nicht, ob:
a) diese Lösung überhaupt Sinn macht und realisierbar ist
b) wie ich das ganze technisch/programmiertechnisch lösen kann.

Also im Prinzip geht das.

=== Aber ===

Ich befürchte sehr ernsthaft, dass Du Dir ein erhebliches Sicherheitsproblem baust. Denn wenn Du nichts weißt, wie Du das technisch lösen kannst dann weißt Du auch nicht wo die Haken sind. Das ist nämlich nicht trivial.

Im folgenden sind
"Webserver"   - Der Server, der keinen Zugang zur Datenbank hat.
"Datenserver" - Der Server mit dem Zugang

=== Im Prinzip geht es universell ===

Auf dem entfernten Server ein Skript erstellen, welches Deine Abfrage entgegen nimmt und das Ergebnis z.B. als JSON zurück gibt.

Problematisch hierbei: Eine Authentifizierung ist absolut notwendig - die Daten gehen aber im Klartext über das Netz. Es wäre zwar über ein servergeneriertes Token für jeden Zugriff und die Beschränkung auf die IP des Clients (der eigentliche Webserver) durchaus möglich dies zu beheben, aber darunter leidet die Performance:

Webserver stellt Anfrage nach Token

Datenserver prüft die IP und liefert ein Token (zufälligen String) oder eine Fehlermeldung (dann exit).Der Datenserver speichert einen Schlüssel (Hash aus dem Token und einem beiden Seiten bekanntem "Geheimnis") sowie einen Timestamp in einer Datentabelle.

Webserver hasht das Token und das auch ihm bekannte "Geheimnis" und schickt das Ergebnis als Schlüssel zur Authentifizierung mit der Abfrage an den Datenserver.

Datenserver löscht alle überalterten Schlüssel aus der Tabelle und prüft danach, ob die IP stimmt und ob der Schlüssel in der Tabelle ist.
* Falls eines davon nicht: Fehlermeldung, exit.
* Falls ja wird der Schlüssel gelöscht, die mitgelieferte Abfrage ausgeführt und das Ergebnis (aus meiner Sicht am besten) nach JSON umgewandelt, dieses wird (womöglich komprimiert) gesendet.

  1. Webserver wertet die empfangenen Daten aus.

Der Datentransport sollte zusätzlich verschlüsselt erfolgen (HTTPS). Die Sicherheitssituation verschlechtert sich dennoch, denn das "Geheimnis" muss auf beiden Rechnern im Klartext gespeichert werden. Wer also Zugriff auf nur einen Hosts hat, der kann beide Webseiten und die Datenbank angreifen!

=== Schneller wäre spezielle Skripte für jede Abfrage ===

Voraussetzung: Die NUR LESENDEN Abfragen sind, bis auf die Parameter (where foo="bar" - dann wäre "bar" ein Parameter) bekannt und die abrufbaren Daten sind ohnehin SÄMTLICH für die Öffentlichkeit bestimmt, es entsteht also kein Problem, wenn jemand diese Daten unberechtigt abruft.

Auf dem Datenserver liegen Skripte für jede Abfrage, welche aus den übergebenen Parametern die Abfrage genau so zusammenbauen, wie Du es machen würdest, wenn Du direkt auf die Datenbank zugreifen könntest. Die Abfrage würde ausgeführt, das Ergebnis nach JSON, CSV, eine HTML-Tabelle, what ever umgewandelt und dann gesendet.

Wenn die Daten nicht für die Öffentlichkeit bestimmt sind oder schreibende Zugriffe möglich sein müssen, dann musst Du das mit einer Authentifizierung (wie oben beschrieben) versehen und der Datentransport sollte ebenfalls verschlüsselt erfolgen (HTTPS).

=== Falls Dir das zu aufwendig ist ===

Wechsle den Hoster. Variomedia bietet eine Datenbank, auf die man auch von entfernten Hosts zugreifen kann.

Jörg Reinholz