In der Hochschul-Serverlandschaft ist es häufig nicht möglich, sich mit der Datenbank direkt zu verbinden. Teilweise wird sogar ein Browserzugriff nach außen gesperrt. Wenn in der Firewall ein SSH Zugang eingerichtet ist, kann man sich mit einem SSH-Tunnel behelfen. Dieser kann sogar über mehrere Zwischenrechner "hüpfen".
Ausgangspunkt ist immer der Clientrechner. Mit SSH Tunneln können Sie den Browser Port oder den Datenbank Port erreichbar machen. Dank SSH ist diese Kommunikation verschlüsselt.
Browser-Port tunneln
Wenn der Applikations- oder Webserver nicht aus dem Internet erreichbar ist, können Sie den Browser Port mit ssh tunneln. Sie können einen Proxy im Browser einrichten, der Ihrem Client eine feste IP von einem Zwischenrechner gibt.
Sie können aber auch direkt den Tomcat Port, z.B. 8080 tunneln.
Browser Port unter Windows tunneln
Mit dem Programm putty kann man einen SSH-Tunnel aufbauen und den Browser durch diesen Tunnel leiten. Bitte wie folgt vorgehen:
Putty installieren und ein Profil anlegen,
Hostname z.B. super-ics.de, ssh-Port=22.
Im Menü Connection -> ssh -> Tunnels
bei "Source Port" den Wert "9999" eintragen
bei den Ankreuzfeldern "Local", "Remote" und "Dynamic" den Wert "Dynamic" ankreuzen
bei der Zeile darunter "Auto" wählen, nicht IPV4 oder IPV6
Mit Putty anmelden und das Terminal Fenster geöffnet halten
Dann den Browser Proxy konfigurieren, z.B. Firefox:
Menü Einstellungen->Reiter Netzwerk -> Verbindung -> einstellen
Manuelle Proxy Konfiguration -> bei SOCKS Host "localhost" und Port "9999" eintragen
SOCKS v5 ankreuzen
Browser Port unter Linux tunneln
In der Shell den Befehl
ssh www.super-ics.de -D 127.0.0.1:9999
eingeben. Der Rest zum Browser-Proxy wie oben unter 2.
Datenbank Port tunneln
Die Postgres-Datenbank auf dem Zielrechner läuft in der Regel auf Port 5432. Der Port ist in der Regel von außen nicht erreichbar. Wenn Sie Datenbank-Clients wie die sqlWorkbench oder Kettle/Spoon nutzen wollen, müssen Sie den Datenbank Port tunneln.
Erzeugen Sie ggf. eine neue Session, indem Sie auf der obersten Seite "Sessions" den Host Name, Port, Protocol=ssh eintragen.
Geben Sie dann bei saved sessions einen neuen Namen, und drücken Sie sicherheitshalber "Save".
Geben Sie im Menüpunkt "Connection" bei "Auto-Login username" den Namen "superx" an.
Geben Sie im Menüpunkt "SSH"->"Tunnels" unten im Menü "Add new forwarded Ports"
bei "Source Port" z.B. "9998" ein.
Bei "Destination" geben Sie "localhost:5432" ein (wenn 5432 der Port ist, auf dem Postgres läuft).
Lassen Sie "Local" angekreuzt, und drücken Sie dann darüber "Add")
Dann speichern Sie die Session auf der obersten Seite "Sessions"
Dann drücken Sie unten "Open" und loggen sich ein.
Datenbank-Port unter Linux tunneln
Geben Sie einfach in der Shell ein:
ssh superx@<
In diesem Moment ist der Tunnel eingerichtet. Sie können ihn nun nutzen, wenn Sie mit Ihrem JDBC- oder ODBC-Client auf den Port localhost:9998 zugreifen.
Z.B. für die sqlWorkbench unter Postgres im Dialog "Connect" die URL
jdbc:postgresql://localhost:9998/superx
Der Tunnel wird geschlossen wenn Sie sich ausloggen. Sie müssen übrigens nicht den Hostnamen des Client-Rechners in die pg_hba.conf eintragen, für Postgres verhält sich der Tunnel so, als ob vom Rechner "localhost" auf den Server zugegriffen wird. Auch in der Firewall des DB-Servers muss nur der SSH-Port freigeschaltet sein, nicht der Datenbank-Port.
Bei Problemen ist ggf. im SSH-Server das Port-Forwarding aus Sicherheitsgründen ausgeschlossen.
Datenbank Port mit Zwischenrechner
SSH ermöglicht ein Tunneln des Datenbank Ports sogar wenn kein SSH Zugriff direkt auf dem DB-Server möglich ist. Nehmen wir an es gibt drei "Instanzen":
Ein Clientrechner irgendwo im Internet
Ein Zwischenrechner mit einer eigenen SSH-Kennung. Für unser Beispiel nennen wir dies myuser@myjumphost
Ein Applikationsserver, der nur vom Zwischenrechner erreichbar ist, z.B. myappuser@myappserver
Ein DB-Server, der nur vom Applikationsserver erreichbar ist, und auch nur auf dem DB-Port, z.B. Hostname mydbserver
Dann würde man auf dem Clientrechner einen Tunnel wie folgt aufbauen:
Danach können Sie sich mit der DB auf dem Port 9998 verbinden, z.B. mit der sqlWorkbench. Auch die Passworteingabe können Sie ausschalten.
Aktuell haben wir nur unter Linux mit Openssh getestet, wenn Sie unter Windows Openssh oder Cygwin installieren sollte das auch klappen.
Datenbank-Clients
sqlWorkbench
Die SQLWorkbench von Thomas Kellerer ist ein hervorragendes Administrations- und Entwicklungswerkzeug, sie arbeitet mit dem jdbc-Treiber jeweils von Postgres oder Informix. Beim ersten Aufruf der Workbench können Sie Profile für Treiber und Datenbanken eingeben. Musterprofile für viele gängige Datenbanksysteme liegen vor. Leider ist der Informix-Treiber nicht dabei, deshalb muss dieser "von Hand" registriert werden. Gehen Sie dazu über File->Connect in das Feld "Manage Drivers". Dort können Sie einen Namen vergeben und die jdbc-Parameter übertragen. Die folgende Abbildung zeigt ein Beispiel:
Der Dialog zur Einrichtung von Datenbanktreibern am Beispiel Informix.
Die Parameter entsprechen denen, die Sie für das SuperX-Servlet in db.properties definieren.
Der Informix-Treiber ifxjdbc*.jar muss lokal gespeichert sein.
Im Dialog File -> Connect können Sie dann eine Datenquelle eintragen, und die Verbindungsparameter vervollständigen (Username, Passwort).
Achtung bei Postgres: Beim Verbinden mit Postgres Datenbanken müssen Sie im Verbindungsprofil das Häkchen bei "Autocommit" setzen - sonst werden Datenbankänderungen nicht automatisch committed. Autocommit sollten Sie immer einschalten, es sei denn Sie wollen bewußt nicht committen..
Außerdem gilt: Damit die Workbench richtig funktioniert müssen Sie den zum DB-Server passenden JDBC-Treiber einbinden, z.B. von https://jdbc.postgresql.org/ einbinden (im Dialog Datenbank verbinden -> Manage Drivers).
Wenn Sie keine direkte Datenbankverbindung haben können Sie sich ggf. mit Tunneln behelfen.
Interessant ist der Datenbank-Explorer (Tools -> Database Explorer), der es ermöglicht, die Datenbank nach Tabellen / Prozeduren etc. zu durchsuchen. Wenn eine Tabelle ausgewählt ist, kann sie auch über die Registerkarte "Data" editiert werden. Achten Sie darauf, dass Sie das Feld Max. Rows auf einen sinnvollen Wert setzen, z.B. 2000. Die SQLWorkbench ist auch für die Arbeit mit Tabellen ohne Primärschlüssel geeignet, weil jede Äderung intern als Update formuliert wird. Der Nachteil ist, dass nicht mehrere Zellen über Zwischenablage geändert / eingefügt werden können.
Sehr praktisch für die Entwicklung von SQL-Abfragen ist die Möglichkeit, zu jeder Tabelle einen select-String zu formulieren.
Markieren Sie die Tabelle im Database Explorer, und gehen Sie über das Kontextmenü auf Show table data, und wählen Sie ein Editorfenster aus. Der Select-String wird dann angezeigt.
Seit den Versionen 93 lassen sich bei Informix auch Felder vom Typ text anzeigen und editieren. Das Tool bietet außerdem eine Makrofunktion, und in neueren Versionen auch ETL-Funktionen über einen "Data Pumper", was es natürlich für SuperX besonders interessant macht. Weitere Tipps und Hilfen erhalten Sie im (gelungenen, aber englischen) Benutzerhandbuch der Workbench.