Hallo!
Ich habe versucht jpmdbc
(http://www.gruessditsch.de/blog/?p=14) zu benutzen, aber dort
sind Prepared Statements unbekannt.
Ich übersetze das mal: Ich möchte mich nicht nur in die Abhängigkeit einer Technologie (MySQL) begeben, ich möchte auch zusätzlich noch von einer weiteren Technologie (SQL über HTTP) sowie einer zusätzlichen Programmiersprache (PHP) und damit zusammenhängend auch noch von weiteren Server-Technologien (Apache mit PHP-Unterstützung) abhängig machen. Auch ist mir das Internet noch nicht unsicher genug, ich möchte gerne meine Daten allen anderen zur freien Verwendung - inklusive Löschen - zur Verfügung stellen. Mein Vertrauen in andere Menschen ist unendlich gross.
Sorry, aber sowas finde ich totalen Unsinn. SQL-Abfragen über HTTP und ein PHP-Backend zu tunneln ist in meinen Augen Symptombekämpfung (ich will „öffentliches“ SQL) statt Problemlösung (Datentransfer). Was ist dein Problem? Dass MySQL keine externen Zugriffe erlaubt? Falls du das denkst: FALSCH!
Ich versuche dir mal näher zu bringen, was ich denke. Ich denke, Dein Problem ist nicht die öffentliche Verfügbarkeit von MySQL. Dein Problem ist, Daten, welche auf dem Server bereit liegen, auf den Clients zur Verfügung zu haben. Verstehst du den Unterschied? Versuche nicht, die Technologie (SQL) auf den Clients verfügbar zu machen, sondern nur das, was sie benötigen: die Daten! Nur auf diese Weise behältst du die volle Kontrolle über deine Daten und die Business-Logic.
Lese dir bitte mal folgenden Artikel über REST durch: http://de.wikipedia.org/wiki/REST
REST ist nur ein Beispiel, wie ich es lösen würde. Wenn du dir dazu noch eine Library (z.B. Restlet: http://www.restlet.org/) suchst, die dir bei der Umsetzung hilft, bist du nicht nur viele Probleme (gerade im Bezug auf Sicherheit der Daten) los, sondern gewinnst viel Flexibilität hinzu.
Folgende Probleme hast du, wenn du von den Clients aus selbst SQL absetzt:
- Keine Kontrolle über die SQL-Statements (der Client ist nicht unter deiner Kontrolle)
- Totale Abhängigkeit von der Server-Technologie (eine Änderung am Server, z.B. der Datenbank, führt dazu, dass alle Clients aktualisiert werden müssen)
- Angreifbarkeit, da die Datenschicht (SQL) von extern attackiert werden kann.
Folgende Fähigkeiten gewinnst du, wenn du auf eine Technologie wie (beispielsweise) REST über HTTP mit JSON oder XML (je nach persönlichem Geschmack) setzt:
- Totale Kontrolle über alle Daten, da diese nur auf dem Server modifiziert werden.
- Client kann keine ungewünschten Änderungen an den Daten vornehmen.
- Dadurch Unabhängigkeit von der Server-Technologie.
- Austausch der DB ohne Änderungen am Client möglich.
- Neue Server-Technologie gefällig? Kein Problem, REST-URIs bleiben gleich, auch hier keine Änderungen an den Clients nötig.
- Noch ein Client z.B. für Handy oder PDA, die kein Java unterstützen? Kein Problem, OHNE Änderungen am Server!
Du hast einen Server-Teil, dem vollkommen egal ist, welche Technologie der Client einsetzt. Du hast einen Client-Teil, dem vollkommen egal ist, welche Technologie der Server einsetzt. Du hast vollkommene Freiheit bei der Weiterentwicklung sowohl des Servers als auch des Clients. Du hast keine Abhängigkeiten auf eine bestimmte Technologie (wie SQL). Du hast keine Abhängigkeiten zu bestimmten Programmiersprachen (Java, PHP, C++).
Gruss
McPringle