JDBC durch Firewall

Status
Nicht offen für weitere Antworten.

CeNoRiDeR

Aktives Mitglied
Hallo alle zusammen,

folgendes Problem: In einer Applikation soll eine Datenbank (MySQL) angesprochen werden. Ansich ja kein Problem.
Die Applikation soll allerdings auch hinter einer Firewall die die entsprechenden Ports für eine JDBC Verbindung sperrt funktionieren.

Und genau hier liegt auch mein Problem:)

Gibt es eine Möglichkeit die Verbindung über HTTP durchzuführen? Kennt jemand einen anderen Weg so etwas zu realisieren?

Bin um jeden Tip dankbar :)

Gruß
 

Waldi

Bekanntes Mitglied
Also es kommt halt darauf an ob du den Server selbst verwaltest und den vollen Zugriff hast oder nicht. Falls Ja dann guck dir doch mal SSH und Port Forwarding an. Das dürfte dir wahrscheinlich sehr helfen.

Die Applikation müsste ja trotzdem funktionieren oder warum sperrst du den Port für die MySQL Datenbank von innen nach aussen?

Ansonsten muss ich sagen du drückst dich ein bisschen zu ungenau aus. Erkläre mal ein bisschen genauer wie das bei dir aussieht.
 

CeNoRiDeR

Aktives Mitglied
Okay dann erkläre ich mal etwas genauer:

Die Datenbank ist eine MySQL Datenbank von meinem Webspace bei all-inkl.

Ich bin gerade dabei ein Aktien Verwaltungs programm zu porgrammieren.
Von mir zuhause aus funktioniert das auch wunderbar.

In meiner Firma gehts aber nur über einen Proxy und Firewall nach ausen. Hier funktioniert die normale JDBC Verbindung dann eben nicht mehr.

Wenn es möglich wäre hier eben über HTTP bzw. Port 80 zu kommunizieren. Könnte ich das Programm auch für mich im der Firma lauffähig machen!
 
T

tuxedo

Gast
;-) Wie nett das hier immer mehr das gleiche "Problem" haben ...

MySQL via SSH tunneln ist eine Möglichkeit. Hat man aber keinen SSH Zugriff steht man doof da. So wie ich vor einiger Zeit. Deshalb hab ich mich mal hingesetztund angefangen das Problem zu lösen:

Schau dir mal das an: http://jpmdbc.dev.java.net
Du brauchst auf dem MySQL-Server nur einen Webserver mit PHP, und schon geht's.

Ach ja: Das Ding ist noch in der Entwicklung. Wenn du eine SQL-Exception mit "Method not supported" bekommst dann liegts daran dass ich noch nicht weit genug bin mit der implementierung ;-)

@Waldi:
So wie es aussieht will er eine MySQL-Datenbank benutzen die bei mittlerweile fast jedem Webspave dabei ist. Und diese Datenbanken sind nur via localhost zugänglich.

Gruß
Alex
 

Waldi

Bekanntes Mitglied
Ok in Ordnung. Wie wird denn das Problem mit der Firewall gelöst? Im Admin sagen er soll den JDBC Port aufmachen oder via SSH probieren weil das meist automatisch erlaubt ist. Aber so ganz schwarz ohne das das einer Checkt ?? Geht so was??
 
T

tuxedo

Gast
Aaaaalso...
Erstmal muss man wissen um was für eine Firewall es sich handelt. Firmenfirewalls bzw. Proxys erlauben meist nur Port 80 für surfen und Port 21 für FTP. Hinzu kommt dann oft noch Port 443 für sichere HTTP-Verbindungen (https). Das war's dann erstmal mit offenen Ports für ausgehende Verbindungen.
Port 22 für SSH ist in den wohl seltensten Fällen "automatisch" offen. Wohl gemerkt: Ich spreche jetzt von Firewalls und Proxys wie man sie i.d.R. in Firmen antrifft.

Wenn man durch so ein "Gebilde" auf eine DB zugreifen will, ist man mit SSH meist "aufgeschmissen. Zumal man erstmal einen SSH-Server außerhalb der Firewall haben muss.

Für JDBC gibt es keinen Port. Jede Datenbank wird anders angesprochen. Bei MySQL ist es der Port 3306. Und ob der Admin einem Port 3306 aufmacht ist fraglich (In seinen Augen: weniger offene Ports = besserer Schutz).

Wenn man einen SSH-Server außerhalb der Firewall besitzt und die Firewall oder der Proxy Port 443 für sichere HTTP-Verbindungen zulässt, dann kann man den SSH-Port 22, der ja normalerweise nicht durch so eine Firewall durch geht, auf Port 443 umlegen. Dann kommt man immerhin mal schon auf den SSH. Und damit kann man dann beliebige Ports tunneln und sich auch Port 3306 eines im Internet stehenden MySQL-Servers durch den SSH-Tunnel zu sich hinter die Firewall holen.

So, hat man aber nicht die Möglichkeit des eigenen SSH-Servers und lässt sich der Admin auch nicht überreden einen entsprechenden Port aufzumachen, dann bleibt nur noch der Weg über das was eh schon erlaubt ist: Nämlich ausgehende HTTP-Verbindungen über Port 80.

Und da setzt mein jPMdbc an. Was du brauchst:
Einen Webserver der mind. PHP4 beherrscht und der Zugriff auf die MySQL-Datenbank hat. Auf den Webserver legst du dann ein kleines PHP-Script welches dem Treiber beiliegt. Und jPMdbc, ein JDBC-Treiber, kann dann über dieses Script auf die Datenbank zugreifen.

So, noch fragen?
 

Waldi

Bekanntes Mitglied
Nein. Vielen Dank für die ausführliche Erklärung. Sowas ist sehr interessant und für den einen oder anderen bestimmt gut zu gebrauchen.
 

CeNoRiDeR

Aktives Mitglied
Hey Alex0801,

also das hört sich doch schonmal super an!

Der Admin bei uns wird bestimmt keinen Port für mich öffnen, und SSH wär auch schlecht zu realisieren (kein Server).
Ich werde deine Möglichkeit mit dem PHP heut Abend direkt mal ausprobieren!!!

Bei Fragen meld ich mich hier einfach wieder :)

Gruß
 

CeNoRiDeR

Aktives Mitglied
Hey Alex ich bekomm beim ausführen deines Beispiels folgende Meldung:

java.lang.UnsupportedClassVersionError: de/root1/jpmdbc/jdbc/interfaces/IProgressListener (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
Exception in thread "main"

folgender Code:
Code:
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Enumeration;

import de.root1.jpmdbc.jdbc.interfaces.IProgressProvider;
import de.root1.jpmdbc.testing.ProgressPrinter;

/**
*
* A Sample for connecting to a MySQL database behind a webserver
*
* @author Copyright (c) 2007 by Alexander Christian
*/
public class DBOverPHP {

public static void main(String[] args) throws SQLException {


// Connection via proxy is possible ...
System.setProperty("http.proxySet", "true");
System.setProperty("proxyHost", "MEIN_Proxy");
System.setProperty("proxyPort", "MEIN_PORT");
System.setProperty("http.proxyUser", ""MEIN_USER");
System.setProperty("http.proxyPassword", "MEIN_PW");

// if we don't use localhost at port 3306 for the db-connection ,
// we can set it here individually
System.setProperty("jpmdbc.dbhost", "myDbHostname");
System.setProperty("jpmdbc.dbport", "3306");


try
{
Class.forName( "de.root1.jpmdbc.Driver" );

// show some jdbc-info
for ( Enumeration e = DriverManager.getDrivers(); e.hasMoreElements(); ){
System.out.println( e.nextElement().getClass().getName() );
}
DriverManager.setLogWriter( new PrintWriter(System.out) );

// Create the connection-object
Connection con = DriverManager.getConnection("jdbc:jpmdbc:http://www.xyz.de:80/jpmdbc.php?MEINE_DB", "MEIN_DB_USER", "MEIN_DB_USER_PW");

// Create a statement
Statement s = con.createStatement();

// Optional: We want to track the current progress
ProgressPrinter progressPrinter = new ProgressPrinter(); // so we need a class that implements de.root1.jpmdbc.jdbc.interfaces.IProgressListener
IProgressProvider progressProvider = (IProgressProvider) s; // then we need the progressprovider
progressProvider.setProgressListener(progressPrinter); // to register our progress-listener

ResultSet rs = s.executeQuery("SELECT * FROM Aktien;"); // make a selection

while(rs.next()){
System.out.println("name="+rs.getString("name")+" security="+rs.getShort("security"));
}

}
catch ( ClassNotFoundException e ) {
e.printStackTrace();
}
}

}


hab deinen Treiber: jPMdbc_0.0.1e.jar runtergeladen und eingebunden sowie das php file auf meinen Server gespielt...
 
T

tuxedo

Gast
Wie gesagt: Der Treiber ist noch nicht fertig. Aber die Grundsätzlichen Dinge gehen schon. Prepared Statements bereite ich gerade vor (*g* ein Wortspiel ;-) ).

Wenn du Fragen hast: Benutz doch am besten das Forum (Discussion forums) auf der jPMdbc Projektseite.

- Alex
 
T

tuxedo

Gast
Hmm, welche Java-Version hast du benutzt?
Der Treiber ist mit Java5 Update 11 compiliert.

- Alex

[update]

Hab die 0.0.1f als ZIP mal online gestellt.
 

CeNoRiDeR

Aktives Mitglied
Habs...lag an der Java Version...man brauch 1.5!

Hey super es funktioniert!!! Mit deiner erlaubnis werde ich das in mein Programm einbauen :)

Vielen Dank!!!
 
T

tuxedo

Gast
Der Treiber ist mit Lesser GPL lizensiert. D.h. du darfst den Treiber als Bibliothek linken. Solltest du den Treiber-Quellcode als festen Bestandteil deines Programms/JARs machen, dann musst du dein Programm auch zu LGPL oder GPL machen.

Weitere Infos zur Lizenz gibts hier:
-> http://de.wikipedia.org/wiki/GNU_Lesser_General_Public_License
-> http://www.gnu.de/lgpl-ger.html

Die rechtsgültige Fassung der Lizenz findest du hier: http://www.gnu.org/licenses/lgpl.html

P.S. Dass man Java 5 brauchst steht auch auf der Projektseite ;-)
P.P.S. Ach ja: Immer mal wieder reinschauen und die neue Version ziehen. Das Ding ist ja noch nicht bug-frei
 
G

Guest

Gast
CeNoRiDeR hat gesagt.:
Hey Alex ich bekomm beim ausführen deines Beispiels folgende Meldung:

java.lang.UnsupportedClassVersionError: de/root1/jpmdbc/jdbc/interfaces/IProgressListener (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
Exception in thread "main"

folgender Code:
Code:
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Enumeration;

import de.root1.jpmdbc.jdbc.interfaces.IProgressProvider;
import de.root1.jpmdbc.testing.ProgressPrinter;

/**
*
* A Sample for connecting to a MySQL database behind a webserver
*
* @author Copyright (c) 2007 by Alexander Christian
*/
public class DBOverPHP {

public static void main(String[] args) throws SQLException {


// Connection via proxy is possible ...
System.setProperty("http.proxySet", "true");
System.setProperty("proxyHost", "MEIN_Proxy");
System.setProperty("proxyPort", "MEIN_PORT");
System.setProperty("http.proxyUser", ""MEIN_USER");
System.setProperty("http.proxyPassword", "MEIN_PW");

// if we don't use localhost at port 3306 for the db-connection ,
// we can set it here individually
System.setProperty("jpmdbc.dbhost", "myDbHostname");
System.setProperty("jpmdbc.dbport", "3306");


try
{
Class.forName( "de.root1.jpmdbc.Driver" );

// show some jdbc-info
for ( Enumeration e = DriverManager.getDrivers(); e.hasMoreElements(); ){
System.out.println( e.nextElement().getClass().getName() );
}
DriverManager.setLogWriter( new PrintWriter(System.out) );

// Create the connection-object
Connection con = DriverManager.getConnection("jdbc:jpmdbc:http://www.xyz.de:80/jpmdbc.php?MEINE_DB", "MEIN_DB_USER", "MEIN_DB_USER_PW");

// Create a statement
Statement s = con.createStatement();

// Optional: We want to track the current progress
ProgressPrinter progressPrinter = new ProgressPrinter(); // so we need a class that implements de.root1.jpmdbc.jdbc.interfaces.IProgressListener
IProgressProvider progressProvider = (IProgressProvider) s; // then we need the progressprovider
progressProvider.setProgressListener(progressPrinter); // to register our progress-listener

ResultSet rs = s.executeQuery("SELECT * FROM Aktien;"); // make a selection

while(rs.next()){
System.out.println("name="+rs.getString("name")+" security="+rs.getShort("security"));
}

}
catch ( ClassNotFoundException e ) {
e.printStackTrace();
}
}

}


hab deinen Treiber: jPMdbc_0.0.1e.jar runtergeladen und eingebunden sowie das php file auf meinen Server gespielt...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Ich dreh durch mit JDBC & ODBC! Datenbankprogrammierung 26
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
D Asynchrone Aufrufe mit jdbc Datenbankprogrammierung 5
Edin JDBC Hilfe Datenbankprogrammierung 2
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Husamoli345 JSF-JDBC Verbindung Crud Datenbankprogrammierung 15
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
J JDBC anschaulich präsentieren Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
ralfb1105 Oracle JDBC Debugging Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
B MySQL JDBC Kommentarfilter Datenbankprogrammierung 4
Aruetiise MySQL Name JDBC Drive finden Datenbankprogrammierung 4
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
Thallius MySQL Merkwürdiges JDBC Verhalten bei VPN Verbindung. Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
F MySQL JDBC Problem Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
looparda SQLite Active JDBC Abstraktion Datenbankprogrammierung 2
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
S JDBC mit Postgres DB connecten Datenbankprogrammierung 3
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
D JDBC - Verständnisfrage Datenbankprogrammierung 2
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
L Conversion-Error bei JDBC Date Literals Datenbankprogrammierung 3
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
U JDBC prepaird Statements Datenbankprogrammierung 4
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
C Dateipfad des jdbc Treibers Datenbankprogrammierung 2
G JDBC Connect nur über SID fehlerfrei möglich Datenbankprogrammierung 2
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T JDBC Fehler Datenbankprogrammierung 2
J JDBC via Singleton Datenbankprogrammierung 12
Z PostgreSQL JDBC mit Postgresql Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
K JDBC via Netzwerk Datenbankprogrammierung 4
B JDBC Connection Fehler Datenbankprogrammierung 8
K JDBC- In Java "stored procedure" erstellen für DB2,OracleSql ... Datenbankprogrammierung 3
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
B JDBC-Connection: Data source name too long Datenbankprogrammierung 3
D JDBC insert mit select abfrage Datenbankprogrammierung 5
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
crashfinger jdbc-connection mit jre7 funktioniert nicht Datenbankprogrammierung 5
0 JDBC Oracle Verbindungsaufbau Datenbankprogrammierung 6
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
B JDBC MySQL Statement Datenbankprogrammierung 3
F Oracle Oracle JDBC Anbindung unter Glassfish 3.1.2 Datenbankprogrammierung 3
V PostgreSQL JDBC Treiber fehlt Datenbankprogrammierung 6
Y JDBC - Datenbankabfrage Webserver Datenbankprogrammierung 4
C JDBC Datenbank funktioniert nicht Datenbankprogrammierung 7
C JDBC , JDO oder JPA Datenbankprogrammierung 17
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
P JDBC Verbindung zur DB klappt nicht Datenbankprogrammierung 6
J Java - JDBC Verbindung zur Datenbank nicht möglich Datenbankprogrammierung 10
K JDBC Buch kaufen? Datenbankprogrammierung 3
K Hibernate vs. JDBC Datenbankprogrammierung 4
K JDBC Driver not found Datenbankprogrammierung 10
GianaSisters Per JDBC auf Microsoft SQL 2005 Datenbankprogrammierung 24
S ich brauche tipps für JDBC Datenbankprogrammierung 4
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
J jdbc-dataSource in Klassen nutzen Datenbankprogrammierung 2
H Rechnen in Datenbanken - JDBC Mittel der Wahl? Datenbankprogrammierung 32
K MySQL JDBC - Access Datenbank - unbekannter TabellenName Datenbankprogrammierung 4
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
J MySQL Verbindung über JDBC scheitert immer Datenbankprogrammierung 2
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
S MSSQL JDBC "Driver class not found" Datenbankprogrammierung 9
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
ruutaiokwu jdbc connection als singleton Datenbankprogrammierung 11
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9
G JDBC Exception Datenbankprogrammierung 3
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
F Fehlerhandling bei JDBC Datenbankprogrammierung 9
T JDBC und Arrays Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben