Applet - Zugriff auf Datenbank hinter phpmyadmin

Hi.

Ich möchte ein Applet schreiben, dass Zugriff auf eine MySQL-Datenbank nimmt, Daten ausliest und speichert.

Der Server der Homepage steuert das ganze aber über phpmyadmin.
Ist es möglich dennoch mit einem Applet auf die Daten zuzugreifen? Wenn ja, wie?

Ich hatte auch selber schonmal gesucht. Mir ist da ein besonderer MySQL-Treiber für Java aufgefallen, dessen Sinn ich nicht wirklich verstanden habe, der es aber wohl schafft, diverse Blockaden zu durchbrechen. Eine richtig Beschreibung dazu habe ich nicht gefunden und daher hab ich keine Ahnung was dieser Treiber nun wirklich kann.
https://jpmdbc.dev.java.net/
Hat damit vielleicht schonmal jemand gearbeitet? Ist der Treiber genau für einen solche Fall gemacht?

Grüße
Morgyr

Generell schlechte Idee - sofern das Applet öffentlich zugänglich gemacht wird.

[QUOTE=Morgyr;11288]Der Server der Homepage steuert das ganze aber über phpmyadmin.
Ist es möglich dennoch mit einem Applet auf die Daten zuzugreifen? Wenn ja, wie?[/QUOTE]

Ist doch egal, Hauptsache die DB erlaubt Zugriffe von außerhalb des WebServers. Dann funktioniert es mit einer ganz normalen JDBC-Verbindung.

[QUOTE=Morgyr;11288]Ich hatte auch selber schonmal gesucht. Mir ist da ein besonderer MySQL-Treiber für Java aufgefallen, dessen Sinn ich nicht wirklich verstanden habe, der es aber wohl schafft, diverse Blockaden zu durchbrechen. Eine richtig Beschreibung dazu habe ich nicht gefunden und daher hab ich keine Ahnung was dieser Treiber nun wirklich kann.
https://jpmdbc.dev.java.net/
Hat damit vielleicht schonmal jemand gearbeitet? Ist der Treiber genau für einen solche Fall gemacht?[/QUOTE]

Jap, ich habe damit schon einmal gearbeitet. Der Treiber macht dann Sinn, wenn die Datenbank so konfiguriert ist, dass man eben nicht von außen darauf zugreifen kann.

Generell schlechte Idee - sofern das Applet öffentlich zugänglich gemacht wird.

Wie genau ist öffentlich gemeint? Für einen Zugriff auf das Applet ist eine Anmeldung nötig, die vom Admin freigeschaltet wird. Öffentlich ist es also nicht.
Die MySQL Datenbank ist ausschließlich nur für dieses Applet.

Ist doch egal, Hauptsache die DB erlaubt Zugriffe von außerhalb des WebServers. Dann funktioniert es mit einer ganz normalen JDBC-Verbindung.

Das ist ja der Punkt. Ein externer Zugriff ist gesperrt.

Ansonsten, danke für die Antwort. Ich werde dann mit dem jpmdbc-Treiber herumexperimentieren.

Grüße
Morgyr

Das ist nicht möglich, seidenn du setzt dich damit auseinander wie du dich bei phpmyadmin, per HTTP einloggst und querys absetzt. Das ist möglich aber sehr aufwändig.

Naja doch - eben über jpmdbc .

[QUOTE=Morgyr;11294]Wie genau ist öffentlich gemeint? Für einen Zugriff auf das Applet ist eine Anmeldung nötig, die vom Admin freigeschaltet wird. Öffentlich ist es also nicht.
Die MySQL Datenbank ist ausschließlich nur für dieses Applet.[/QUOTE]

Du musst dir dessen bewusst sein, dass

1.) Du dein Applet wohl signieren musst
2.) Jeder, der angemeldet ist, das Applet runterladen, dekompilieren und im Quellcode nach den Zugangsdaten für die DB suchen, finden, und damit viel kaputt machen kann.

Ist gar nicht so schwer. Du legst ne PHP-Datei auf deinem Server, bindest den Treiber wie nen ganz normalen JDBC-Treiber ein (Connection-String muss halt auf die PHP-Datei verweisen), und kannst SQLs absetzen. Gibt auch ein gutes Beispiel dazu

Wenn ich das Applet in den Browser lade, eben über diesen HTML Code, kann ich soweit ich das noch weiß auch Parameter mitangeben. Wenn ich die Zugriffsdaten für die Datenbank dann im HTML Code hinterlege, wie leicht wäre es denn dann die Daten herauszubekommen?

Gäbe es denn überhaupt irgendwie eine Alternative dazu? Im Prinzip wäre das dann ja gar nicht möglich ohne ein Risiko einzugehen.
Meine “Sicherheitsvorkehrungen” sind also eigendlich nur, dass die komplette Datenbank nur für dieses Applet benutzt wird. Da sind keine Daten drin die in irgendeiner Weise die Homepage selber betreffen. Zum zweiten handelt es sich bei den Benutzern um 20-30 Leuten, die nicht irgendwer sondern ausgewählt sind.

Zu jpmdbc kann ich jetzt noch nichts sagen, hatte noch nicht die Möglichkeit da mal was zu testen.

Das wäre ja noch schlimmer. Dann kann die ja wirklich jeder bekommen :stuck_out_tongue:

Üblicherweise verbindet sich dein Applet mit einem von dir entwickelten Server, und dieser führt dann die jeweiligen Aktionen durch.

Das wäre ja noch schlimmer. Dann kann die ja wirklich jeder bekommen

Gut, dass ich den Thread hier geöffnet habe, sonst hätte ich wohl ziemlichen Mist gebaut :smiley:

Üblicherweise verbindet sich dein Applet mit einem von dir entwickelten Server, und dieser führt dann die jeweiligen Aktionen durch.

Wie genau meinst du Server?

Also so wie ich das verstehen würde, besteht das ganze dann aus folgenden Dingen (nur was das Applet betrifft)

Der gesamter Server:
-Homepage
-FTP
-DB

Applet, Server-Programm, und die .php für jpmdbc liegen im FTP
Das Server-Programm läuft als dauerhafter Prozess, als daemon, wenn man das darauf bezogen auch so nennt. Um variable Daten (Speicherort der DB, Zugangsdaten) in das Programm zu bekommen, läge dann bspw. eine xml-Datei bei. Bei Änderung der xml-Datei wäre ein Neustart des Prozesses nötig.
Das Applet wird in die Homepage geladen und verbindet sich beim Start mit dem Server. Der Server hat dauerhaft die Verbindung zur Datenbank und muss bei einem vom Applet gesendeten Befehl diesen als MySQL Query an die Datenbank und das Ergebnis zurück an das Applet senden.
Wenn das Applet geschlossen wird, bleibt der Server aktiv und wartet auf neue Clients, falls nicht sogar mehrere aktiv waren.

Soweit das Konzept, was ich mir vorstellen würde.

Zum Detail:

Ich weiß nicht, wie das mit dem Traffic ist. Aber der Server-Prozess müsste ja auch Traffic verursachen. Da wäre es wahrscheinlich besser, den Server in C++ o.ä. zu programmieren, oder nicht?

Die Verbindung von Applet und Server ist dann tatsächlich Server-Client, mit ServerSocket etc.?

Der Client müsste ja dann irgendwie authorisiert sein, an die Daten zu kommen, da wieder eine Adresse im Applet drinsteht und leicht zu finden wäre. Würde es da ausreichen, bei der Server-Anwendung eine Abfrage reinzusetzen, ob der Client, der sich dann gerade anmeldet, die ip vom Server hat, und an Hand des Ergebnisses entweder antwortet, oder einfach die Verbindung schließt?

Ein Programm, das auf dem Hardware-Server läuft und einen Software-Server darstellt :wink: . Dieser Server verbindet sich mit der Datenbank und nimmt die Anfragen (nicht zwingend als SQL, aber als abstrakte Befehle, bspw. via Sockets, WebService-Request oder RMI) des Clients (deines Applets) entgegen. So kann der User bestenfalls deine Applet-Server Kommunikation mitsniffen. Die Zugangsdaten für die SQL-Datenbank bleiben aber im Verborgenen - und du müsstest deine DB nicht nach außen öffnen.

Wie kann denn etwas „im FTP“ liegen? FTP ist einfach nur ein Dateiübertragungsprotokoll :stuck_out_tongue:

Jap, wobei ich nicht direkt die SQL-Befehle übermitteln würde. Sonst kann das ein Angreifer auch tun :wink: .

[QUOTE=Morgyr;11355]Wenn das Applet geschlossen wird, bleibt der Server aktiv und wartet auf neue Clients, falls nicht sogar mehrere aktiv waren.

Soweit das Konzept, was ich mir vorstellen würde.[/QUOTE]

jop

Warum? Ein Byte über das Netzwerk kostet mit C++, mit Java oder mit sonst einer Programmiersprache gleich viel Traffic.

Kommunikationsmöglichkeiten gibt es viele. Beispiele hab ich dir oben genannt.

Ich würde einfach die SQLs nicht direkt übertragen. Einfach Methoden wie bspw. „getResultsAsXML“ oder „saveData(x,y,z)“ bereitstellen. Anhand der Kommunikation wird dann entschieden, welche Methode ausgeführt wird. SQLs direkt übertragen und auswerten ist immer ein Sicherheitsrisiko.