# JDBC über Proxy



## Gast (20. Sep 2006)

Hi!

Ich will mittels JDBC eine Verbindung zu einer MySQL DB aufbauen. Auf dem einen Rechner funktioniert es auch wunderbar, es klappt alles. Auf einem anderen Rechner, der über einen Proxy ins Internet geht, funktioniert es allerdings nicht. Es wird immer ein "timeout" angezeigt. Ist ja auch logisch, da der Proxy dazwischen steht. 

Ich habe in dem Programm auch HTTP-Verbindungen, diese funktionieren auf dem Rechner mit dem Proxy wenn ich in System die Proxydaten setze. Also 


```
System.setProperty("useProxy", true);
......
```

Um die Verbindung herzustellen verwende ich den folgenden Code:


```
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://host/DB", user, pw);
```

Die JDBC Verbindung funktioniert aber auch nicht, wenn der Proxy auf diese Weise eingestellt ist. Wie kann ich über einen Proxy eine Verbindung zu einer MySQL DB herstellen? Wäre super wenn mir jemand weiterhelfen könnte....   :bahnhof: 

Gruß
Jan


----------



## Caffè Latte (20. Sep 2006)

Hi,

was ist denn da für ein Proxy? Normalerweise nimmt der nur HTTP- und HTTPS- bzw. FTP-Anfragen an und leitet die weiter. Andere Dienste funktionieren nicht oder nur nach einer entsprechenden Konfiguration des Proxies. Wenn du Pech hast, "liest" der Proxy auch noch mit und verändert die Daten ...


----------



## AlArenal (20. Sep 2006)

Ich hab ja im Leben noch von keinem JDBC-Proxy gehört. Kann mir da auch herzlich wenig sinnvolles drunter vorstellen. Wie schon geschrieben wurde, sind Proxys in der Regel dazu da Traffic fürs Web (HTTP, HTTPS) und ggf. noch POP3 zu cachen und u.U. zu filtern.

Mit allem anderen haben die nichts am Hut. Das sind keine Allzweck-Proxys die den kompletten Netzwerk-Traffic cachen/umleiten.


----------



## Gast (20. Sep 2006)

Hmm... Das heißt also wenn die SQL Verbindung nicht funktioniert, dann liegt das ziemlich sicher nicht am Proxy, da die Daten sowieso nicht über diesen laufen?

Dann ist vielleicht noch irgendeine versteckte Firewall dran schuld. Oder hat jemand noch eine andere Idee? Der Rechner auf dem es läuft (der ohne Proxy) ist ein Windows Rechner, der andere (mit Proxy) ist ein Linuxrechner, gibt es da vielleicht irgendwelche Besonderheiten di ich nicht kenne?

Gruß
Jan


----------



## SamHotte (20. Sep 2006)

Hat die JDBC-Connection denn schon mal funktioniert? Was für Fehlermeldungen kommen denn?


----------



## Guest (20. Sep 2006)

Also auf dem Rechner ohne Proxy funktioniert alles ohne Probleme.

Auf dem mit Proxy kommt nach ein paar Sekunden "Communications link failure due to underlying exception: connection timeout".

Kann man eine DB Verbindung nicht auch anders als ich es gemacht habe aufbauen? Vielleicht würde es damit funktionieren? Ich habe mal was von einem DataSource Objekt gehört, weiß aber leider nichts genaueres darüber...


----------



## SamHotte (20. Sep 2006)

Ich verstehe nicht wirklich, was du mit dem Proxy machst ...

Du hast zwei Rechner zu Hause, einer mit Windows, einer mit Linux, und wo genau liegt die Datenbank?


----------



## Guest (20. Sep 2006)

Also ich habe zwei Rechner einen Linux-Rechner mit Proxy und einen Windows-Rechner ohne Proxy.
Die Datenbank liegt auf einem Server im Internet.
Mein Programm soll von jedem Rechner, Linux und Windows, mit und ohne Proxy, auf die Datenbank zugreifen können. Es soll ein Freeware-Tool werden, das für Rechner mit beliebigen Internetzugängen funktionieren soll. Ich habe also keinen Einfluß auf den Proxy.

Gruß
Jan


----------



## AlArenal (20. Sep 2006)

Und was soll nun der Proxy mit JDBC am Hut haben?

Wenn du auf deiner Linux-Büchse munter Ports gesperrt hast, oder "Rechner mit beliebigen INternetzugängen" entsprechend konfigurierte Firewalls laufen haben, biste gekniffen. Ist nunmal so. Ein Web-Proxy hat mit JDBC mal überhaupt gar nix am Hut.

Direkter Zugriff von Hans und Franz auf ne Datenbank halte ich auch für schwer suboptimal. Da wir im Hellsehen unsere Schwächen haben, können wir nun schlecht sagen woran es bei deiner Linux-Büchse hängen könnte. Es gibt Dutzende, wenn nicht hunderte von Distributionen, zig tausende von Paketen mit jeweils Unmengen an Konfig-Parametern. Die können wir ja von hier aus schlecht auspendeln.

Man sollte aber meinen, dass derjenige, der die Karre aufgesetzt hat auch Peilung daovn hat, wie er sie konfiguriert hat. Dummerweise weiß ich selbst, dass diese Hoffnung nicht mehr so berechtigt ist, seit auch Lieschen Müller in der Lage ist sich mal flott Linux zu installieren...

So wenig wie man ein System vor DAUs schützen kann, kann man DAUs vor Systemen schützen.


----------



## Guest (21. Sep 2006)

Mein Programm soll einfach nur Daten aus einer zentralen Datenbank im Internet abrufen, der Benuter hat über das Programm keinen direkten Zugriff auf die Datenbank. 
Also liegt mein Problem wohl nicht am Proxy, sondern an einer Firewall oder gesperrten Ports...
Weiß vielleicht jemand welche Ports man für eine JDBC-MySQL-Verbindung braucht?

Gruß
Jan


----------



## AlArenal (21. Sep 2006)

Den Port, auf den MySQL konfiguriert ist. Standardmäßig 3306, TCP, ausgehend


----------



## Guest (22. Sep 2006)

Vielen Dank für die Antworten!

Dann fasse ich mal zusammen:
Wenn mein Programm nicht auf die Internet-DB zugreifen kann, dann liegt es nicht an einem Proxy, da der JDBC-Datenverkehr sowieso nicht darüber läuft. Sollte es Probleme geben, liegt es ziemlich sicher daran, dass durch eine Firewall oder eine andere Portsperre der Zugriff aufs Inet blockiert ist und der Benutzer muss diesen Port freigeben.

Sehe ich das so richtig?

Und dann noch eine Frage: AlArenal hat geschrieben "der Port auf den MySQL konfiguriert ist". Bei meiner Anwendung braucht man MySQL ja nicht auf dem eigenen lokalen Rechner zu installieren und bei der Installation daher auch keinen Port anzugeben / zu konfigurieren, da die DB im Internet liegt. Versucht JDBC also immer über Port 3306 ins Inet zu kommen oder kann man bei JDBC diesen Port irgendwie einstellen?


----------



## AlArenal (23. Sep 2006)

So wirklich hast du noch nie was mit JDBC gemacht, oder?

Relationale Datenbankserver sind nunmal Server und als solche stellen sie ihre Dienste permanent bereit und das tun sie übers Netzwerk und da sind sie halt auf nem bestimmten Port zu erreichen, so wie jeder andere Service auch. Verschiedene Datenbanksysteme haben verschiedene Ports voreingestellt und bei MySQL ist es nunmal 3306. Hättest du dir die Verbindungsparamter des JDBC-Treibers angeschaut, wüsstest du das auch.

Du musst dich schon selbst ein wenig einlesen. Zusammenhänge und Lösungen kommen dir nicht in den Mund geflogen..


----------



## Guest (23. Sep 2006)

Ich habe schon einiges mit JDBC gemacht, aber um das Problem das man von einem Rechner mit JDBC nicht ins Inet kommt musste ich mich halt noch nicht kümmern.

Es ist ja so:

Ich habe im Internet einen DB-Server. Dieser ist über Port 3306 von außen erreichbar. Das ist ja soweit alles klar und funktioniert auch. Dann gibt es aber noch den Client. Auf dem Client ist MySQL nicht installiert. Es wird nur der JDBC-Treiber für MySQL geladen. Und dieser Treiber kommt aus dem Client raus und kann sich deshalb nicht mit Port 3306 des DB-Servers verbinden. Und ich wollte jetzt halt fragen, ob auch der JDBC-Treiber beim Client auch Port 3306 verwendet um rauszukommen. Das scheint ja wohl der Fall zu sein. Also sieht es wohl wie in diesem Schaubild aus:




```
[Client]
[JDBC]
    |
  3306
    |

INTERNET

    |
  3306
    |
[Db-Server]
```

Wenn es so ist, müsste mein Programm also auf allen Rechner tun, bei denen Port 3306 freigegeben ist, oder?

Gruß
Jan


----------



## AlArenal (23. Sep 2006)

Der ausgehende Port hat mir dem eingehenden nichts am Hut. Wenn du jemandem nen Brief schickst, musst du auch nicht dieselbe Adresse haben.


----------



## Guest (23. Sep 2006)

Okay, aber welches ist dann der ausgehende PORT, den ich für eine JDBC-VERBINDUNG brauche? Das ist genau mein problem!

Wie gesagt, das "reinkommen" beim Internetserver tut ja, aber ich komme bei manchen Rechnern nicht RAUS! Das ist genau mein Problem! Welche Ports müssen freigegeben sein, damit ich mit Java mit einer JDBC-Verbindung aus dem Rechner ins Internet komme?


----------



## AlArenal (23. Sep 2006)

AlArenal hat gesagt.:
			
		

> Standardmäßig 3306, TCP, ausgehend


----------



## SamHotte (25. Sep 2006)

Kannste 'rausbekommen, indem du auf dem Windows-Rechner mal schnell 'ne Personal Firewall installierst und guckst, was der dir für 'ne Frage stellt beim 'rausrufen. Da wird normalerweise der Port mit angezeigt.


----------



## AlArenal (25. Sep 2006)

SamHotte hat gesagt.:
			
		

> Kannste 'rausbekommen, indem du auf dem Windows-Rechner mal schnell 'ne Personal Firewall installierst und guckst, was der dir für 'ne Frage stellt beim 'rausrufen. Da wird normalerweise der Port mit angezeigt.



Warum einfach, wenns auch kompliziert geht...

Was rätst du ihm, was er als Benutzername und Passwort nehmen soll? Einfach mal nen Hacker drauf ansetzen, was sich da schon so in der DB tummelt, oder? 

Da würd ich mich mal lieber damit befassen, wie Netzwerke funktionieren. Da erübrigen sich so manche Fragen wie von selbst.


----------



## SamHotte (25. Sep 2006)

So kompliziert fand ich das jetzt nicht ...


----------



## Guest (25. Sep 2006)

@SamHotte: Das mit der Firewall hab ich schon probiert! War einer meiner ersten gedanken!   Benutzername und PW für die Datenbank hab ich ja, ist kein Problem, ich brauche blos den ausgehenden port. 

Die Firewall hat mir auch Ports gelifert, aber leider immer wieder verschiedene. Ist eigentlich auch logisch, es werden ja einfach Ports genutzt, die im Moment frei sind. Von daher kann man wohl nicht fest voraussagen welcher Port benutzt wird. Bei den Firewalls wird deshalb ja normalerweise einem Programm und nicht einem Port der Zugriff aufs Inet gewährt. ABer ich hatte halt gehofft es gibt vielleicht doch Standardports für Java........


----------



## AlArenal (26. Sep 2006)

Ich glaube da hat jemand noch nie eine "richtige" Firewall gesehen.

"3306, TCP, ausgehend" - zum 3. Mal


----------

