# Java-Applet -> MySQL Datenbank



## andi565 (21. Jul 2007)

Hallo,

gibt es eine Möglichkeit, mit einem Java-Applet mittels JDBC-Treibern auf eine MySQL Datenbank zuzugreifen, ohne das jeder das Datenbank Passwort mittels dekompilieren auslesen kann?

Freue mich auf Hinweise  :shock:


----------



## kleiner_held (21. Jul 2007)

Nein - außer du läßt das Passwort explizit eingeben.

Abgesehen davon ist eine Direktverbindung vom Applet zu DB ganz schlechter Stil und kann auch an den Sicherheitseinstellungen der Sandbox des Browsers scheitern (üblicherweise sind ausgehende Verbinungen nur zu dem Server erlaubt von dem das Applet geladen wurde).

Üblich ist, vom Applet auf einen Server zuzugreifen (z.B: per HTTP oder HTTPS) und der Server hat im Hintergrund die DB.


----------



## L-ectron-X (21. Jul 2007)

Über Middleware. Bspw. über RMI. Dazu musst du auf einem Rechner im Netz einen RMI-Server laufen lassen, der die Vermittlung übernimmt. Der RMI-Server könnte dann das Passwort der DB übergeben, der Client bekommt davon nichts mit. Das Applet muss dazu signiert sein und die Download-Größe des Applets wird auf Grund des DB-Treibers etwas mehr in Anspruch nehmen.


----------



## abollm (21. Jul 2007)

andi565 hat gesagt.:
			
		

> Hallo,
> 
> gibt es eine Möglichkeit, mit einem Java-Applet mittels JDBC-Treibern auf eine MySQL Datenbank zuzugreifen, ohne das jeder das Datenbank Passwort mittels dekompilieren auslesen kann?
> 
> Freue mich auf Hinweise  :shock:



Was genau meinst du denn damit? Meinst du mit dekompilieren knacken?

Folgende Szenarien fallen mir spontan ein:
==============================
Mit einem (i.d.R. aufwändigeren) MITM-Angriff kann ein Angreifer grundsätzlich ein Passwort abfangen. Falls das Passwort nicht verschlüsselt vom Client (dein Applet) zum DB-Server (MySQL-DB) gesendet wird, liegt hier für einen Angreifer die einfache (Standard-)Situation vor.

Auch MySQL speicher m.W. nur entsprechende Hash-Werte (User/Kennwort) innerhalb der DB-Engine, sodass ein Angreifer grundsätzlich erhöhten Aufwand zum Knacken des Passworts/der Passwörter treiben muss, wenn er das jeweilige Passwort _nicht_ im Klartext abfangen kann.

Hth


----------



## andi565 (21. Jul 2007)

Danke für die bisherigen Antworten, aber hier nochmal genauer beschrieben was ich meine:

Angenommen, ich programmiere ein Java-Applet für einen Onlinedienst. Jeder User meldet sich dazu mit Username und Passwort an (um diese Verbindung gehts mir aber vorerst nicht) und kann sich dann nach Prüfung seines Usernamen und des Passwortes in der MySQL Datenbank im Mitgliederbereich bewegen.

Um auf eine MySQL Datenbank zuzugreifen, braucht man ja in der Regel einen Usernamen und ein Passwort.
Diese Daten müssen irgendwo gespeichert werden, jedes mal eingeben ist nicht möglich, da diese Daten nur mir (dem Webspace-Besitzer / Onlinedienstbetreiber) bekannt sind. Wenn ich diese Daten jetzt im Java-Quellcode hinterlege, um mittels JDBC-Treiber auf die MySQL Datenbank zuzugreifen, kann die Daten im Prinzip jeder durch decomplilieren des Applets auslesen. Und genau das möchte ich möglichst einfach (ohne speziellen Server) verhindern.



			
				kleiner_held hat gesagt.:
			
		

> Üblich ist, vom Applet auf einen Server zuzugreifen (z.B: per HTTP oder HTTPS) und der Server hat im Hintergrund die DB.


Meine genauere Beschreibung müsste nun genau auf das zutreffen, nur habe ich da das beschriebene Problem...


----------



## abollm (22. Jul 2007)

andi565 hat gesagt.:
			
		

> Danke für die bisherigen Antworten, aber hier nochmal genauer beschrieben was ich meine:
> 
> Angenommen, ich programmiere ein Java-Applet für einen Onlinedienst. Jeder User meldet sich dazu mit Username und Passwort an (um diese Verbindung gehts mir aber vorerst nicht) und kann sich dann nach Prüfung seines Usernamen und des Passwortes in der MySQL Datenbank im Mitgliederbereich bewegen.
> 
> ...



Hm, ehrlich gesagt, versteh ich dein genaues Problem nicht. Eigentlich benötigst du so eine Art Session-Handling, d.h. du musst in deinem Applet pro offener Session mit der DB das Kennwort im Speicher halten. Wo ist dann das Problem? Oder willst du das Kennwort Session-übergreifend speichern, so à la Cookie-Lösung? Also jedes Mal, wenn sich ein Benutzer erneut anmeldet, geht das dann automatisch?
 :?:


----------



## kleiner_held (22. Jul 2007)

Wenn du darauf bestehst, dass deine Client-Anwendung (das Applet) in einem Mehrbenutzer-System direkt mit der Datenbank kommuniziert, wird es meiner Meinung nach keine vernünftige Lösung geben (hinsichtlich Zugriffskontrolle).

Der Anwendungsfall schreit quasi nach einer 3-Schichten-Architektur.


----------



## Guest (22. Jul 2007)

abollm hat gesagt.:
			
		

> andi565 hat gesagt.:
> 
> 
> 
> ...


Mein Problem:

Im Quelltext öffne ich mit folgenden Code eine Datenbank-Verbindung:
      Class.forName("com.mysql.jdbc.Driver");
      Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/meinedb", "admin", "passwort" );

Das Applet kann im Prinzip jeder runterladen und decomplilieren und hat damit Zugriff auf meine MySQL Datenbank


----------

