Zugriff auf mysql-Datenbank

Spezielle Fragen zu PostgreSQL, MySQL, SQLite, SQL ...
Antworten
Werner
Foriker
Beiträge: 8
Registriert: Sa 17. Okt 2020, 00:01
Kontaktdaten:

Zugriff auf mysql-Datenbank

Beitrag von Werner » Sa 17. Okt 2020, 11:53

Hallo an alle,

ich arbeite seit kurzem mit Gambas 3.
Dazu hätte ich mal eine Frage zum Mysql-Datenbankzugriff über einen internen Server.
Der schematische Aufbau sieht folgendermaßen aus: Arbeitsrechner -> interner Server -> externer Server (Mysql-Datenbank beim Webhoster)
Folgendes habe ich bis jetzt ausprobiert: Zugriff auf die Datenbank funktioniert

Code: Alles auswählen

Public $con As New Connection
Public Procedure Connect()
  $con.Type = "mysql"
  $con.Host = "öffentliche IP-Adresse"
  $con.Port = "3306"
  $con.Name = "Name der Datenbank"
  $con.Login = "Benutzer"
  $con.Password = "Passwort"
End
Mit dem internen Server verbinde ich mich so:

Code: Alles auswählen

Public sVerbindung As Socket
Public Sub Button1_Click()
  sVerbindung = New Socket
  sVerbindung.Connect("192.168.35.10", "3128")
End
Wie kann ich eine Datenbankverbindung über die interne Verbindung herstellen?

Gruß Werner

Benutzeravatar
tionov
Site Admin
Beiträge: 363
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von tionov » So 18. Okt 2020, 11:50

Du kannst Mysql auf deinem eigenen Computer AFAIK entweder über den Socket oder TCP/IP ansprechen.

Für ersteres nimmt man als Hostname den Pfad zur Socket-Datei und für zweiteres Hostname (und eventuell Port). Es sollte also so gehen:

Socket:
gambas code
Public Procedure Connect()
  $con.Type = "mysql"
  $con.Host = "/pfad/zum/socket" ' z. B. /var/run/mysqld/mysqld.sock
  $con.Name = "Name der Datenbank"
  $con.Login = "Benutzer"
  $con.Password = "Passwort"
End
TCP/IP:
gambas code
Public Procedure Connect()
  $con.Type = "mysql"
  $con.Host = "localhost"
  $con.Name = "Name der Datenbank"
  $con.Login = "Benutzer"
  $con.Password = "Passwort"
End
Socket ist schneller.

Siehe http://gambaswiki.org/wiki/comp/gb.db/_connection/host
Alles Gute,

tionov

Werner
Foriker
Beiträge: 8
Registriert: Sa 17. Okt 2020, 00:01
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von Werner » Mo 19. Okt 2020, 17:40

Hallo tionov,

danke für die Antwort.
Das Problem bei meiner mysql Datenbank ist die, ich greife nicht lokal auf die Datenbank zu, sondern über das Internet bei meinem Webhoster.
Ich möchte nur der Mysql-Verbidung sagen, benutze den internen Server zur Weiterleitung.
So z.B als Proxyserver.
Ist das überhaupt so machbar???


Gruß Werner

Benutzeravatar
tionov
Site Admin
Beiträge: 363
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von tionov » Mo 19. Okt 2020, 18:09

Ach so, ok das hatte ich nicht verstanden/richtig gelesen (immer zu schnell ...). Jetzt sehe ich auch: 3128 ist ja der Port des Squid Proxy. Aber das ist ein Http Proxy, der kann keine anderen Protokolle.

So was lässt sich schon machen, dann aber über SSH-Tunnel oder eventuell auch einen SOCKS Proxy auf dem internen Server. Im Falle von DB-Zugriffen solltest du unbedingt die Verbindung verschlüsseln.

Ich verstehe jetzt aber nicht, warum du nicht den direkten Weg gehst (Arbeitsrechner -> externer Server). Hat das was mit einer Firewall zu tun?
Alles Gute,

tionov

Werner
Foriker
Beiträge: 8
Registriert: Sa 17. Okt 2020, 00:01
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von Werner » Mo 19. Okt 2020, 21:14

Kein Problem, passiert in der Eile.. :D

Normal könnte man direkt zugreifen, richtig.
Mein Ziel ist es, dies auch über einen Proxy hinzubekommen.
Nur habe ich noch keine richtigen Infos gefunden, wie man so etwas umsetzt.
Hättest du vielleicht einen guten Tip???

Gruß Werner

Benutzeravatar
tionov
Site Admin
Beiträge: 363
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von tionov » Mo 19. Okt 2020, 22:28

Werner hat geschrieben:
Mo 19. Okt 2020, 21:14
Mein Ziel ist es, dies auch über einen Proxy hinzubekommen.
Nur habe ich noch keine richtigen Infos gefunden, wie man so etwas umsetzt.
Hättest du vielleicht einen guten Tip???
Ein Socks Proxy auf dem Zwischenserver.

https://wiki.debian.org/SOCKS

Ich verwandte zuletzt hpsockd. Eine Klammerwüste zu konfigurieren, aber wenn er läuft, läuft er. Da musst du dich aber selber durchkämpfen, weil ich mir jedesmal, wenn ich ihn mir ansehe, die Sache wieder neu draufschaffen muss.

Und man kann auch OpenSSH zum Socks Server machen:
https://debian-administration.org/artic ... with_SOCKS

SSH hat den Vorteil, dass der Tunnel gleich verschlüsselt ist.
Alles Gute,

tionov

Werner
Foriker
Beiträge: 8
Registriert: Sa 17. Okt 2020, 00:01
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von Werner » Do 22. Okt 2020, 19:17

Hallo tionov,

ich kann doch z.B bei ubuntu in den Systemeinstellungen, einen Proxyserver eintragen.
Wie kann ich gambas dazu bringen, dass er den hinterlegten Proxy verwendet?

Gruß Werner

Benutzeravatar
tionov
Site Admin
Beiträge: 363
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von tionov » Do 22. Okt 2020, 20:58

Hups, ich hoffe, ich habe dich nicht in die falsche Richtung geschickt. Ich denke, Gambas verwendet die mysql-client Libraries des Systems und die können keinen Proxy, AFAICS:

https://stackoverflow.com/questions/874 ... roxy-socks

Da steht, es geht nur über SSH (Stackoverflow solte natürlich immer mit Vorsicht genossen werden ...), also wirst du nur mittels eines SSH-Tunnels durch den Server kommen.
Alles Gute,

tionov

Werner
Foriker
Beiträge: 8
Registriert: Sa 17. Okt 2020, 00:01
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von Werner » Sa 24. Okt 2020, 16:43

Hallo tionov,
jup, am Anfang habe ich schon gedacht, wo will er mich denn hinschicken..., aber kein Problem :D :D
Schade, dass man es doch nicht so ohne weiteres umsetzen kann.

Mir ist nicht ganz klar, wie ich von Gambio aus, der mysql-connection sage, verbinde dich z.B. über den SSH-Tunnel.
Man bräuchte eine Funktion, der man die mysql-connect übergeben kann.
Müsste man sich dafür vielleicht ein eigenes Modul schreiben... ???

Gruß Werner

Benutzeravatar
tionov
Site Admin
Beiträge: 363
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von tionov » So 25. Okt 2020, 12:09

Ein SSH Tunnel muss existieren, bevor du die Connection zur Datenbank startest.

Wenn er auf dem lokalen Computer gestartet ist, bietet er auf dem lokalen Computer einen Port an, den kannst du in der Gambas DB-Connection definieren. Du definierst also host: 'localhost', port: $der_lokale_Port_des_SSH-Tunnels.

Der Tunnel selbst sorgt dafür, dass alle Daten, die am lokalen Port eingegeben werden, auf dem entfernten Rechner an den dortigen (eingestellten, hier 3306) Port ausgegeben werden und vice versa.

Wie du einen SSH-Tunnel aufbaust, erkläre ich hier nicht, dazu gibt es genügend Seiten im Netz.

Auf jeden Fall kannst du den Tunnel mit einem Shell-Befehl starten und den kannst du natürlich in ein Modul packen, in dem du auch die DB-Connection startest.
Alles Gute,

tionov

Werner
Foriker
Beiträge: 8
Registriert: Sa 17. Okt 2020, 00:01
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von Werner » Mo 26. Okt 2020, 14:37

Hallo tionov,
danke für deine Infos, ich werde mal versuchen mysql-Verbindungen über den SSH-Tunnel herzustellen.

Gruß Werner

Benutzeravatar
tionov
Site Admin
Beiträge: 363
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von tionov » Sa 31. Okt 2020, 09:04

Hi Werner,

und, hast du es hinbekommen?
Alles Gute,

tionov

Werner
Foriker
Beiträge: 8
Registriert: Sa 17. Okt 2020, 00:01
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von Werner » Di 3. Nov 2020, 21:17

Hallo tionov,

also hinbekommen habe ich es nur auf diese Art und Weise, nur zum Testen.
An meinem Rechner die Konsole gestartet und folgendes eingegeben:

Code: Alles auswählen

ssh benutzer@IP-Adresse
danach das Passwort eingeben und dann war ich auf der Konsole von meinem internen Server (Proxyserver). Jetzt wieder ein

Code: Alles auswählen

ssh benutzer@externe IP-Adresse
dann war ich mit dem Webhoster verbunden und kann dann die mysql Befehle ausführen.
Soweit so gut, aber zufrieden bin ich mit dieser Lösung nicht.
Ich hatte auch noch Sachen mit Tunnel ausprobiert, die aber nicht funktionierten, oder ich habe das Problem mit dem Tunnel noch nicht ganz verstanden... :?: :?:
Und wie ich dies im Gambas umsetze, ist mir auch noch nicht ganz klar.

Gruß Werner

Benutzeravatar
tionov
Site Admin
Beiträge: 363
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von tionov » Do 5. Nov 2020, 13:00

Na dann schau mal hier:

https://qastack.com.de/superuser/96489/ ... tiple-hops

Ein SSH Tunnel macht einen Port auf dem lokalen Computer (localhost) auf und sendet die Daten an den gewählten Port des entfernten Computers. Ein Programm spricht dann den lokalen Port an und bekommt aber die Antworten vom Serverdienst, der am Port des entfenten Computers lauscht. Für das Programm kommen also die Antworten von localhost, für das Programm sieht es genauso aus als liefe der Serverdienst auf dem lokalen Computer.

Also Freund, du machst dich da an eine relativ anspruchsvolle Aufgabe, da musst du dich schon reinpfriemeln und dazu gehört auch Netzwerktechnik.

Baue einfach mal an der Konsole einen SSH Tunnel, der localhost:3306 über deinen SSH-Account auf deinem Server mit Port 3306 auf dem entfernten Mysql-Server verbindet. Also einen SSH Tunnel über zwei Hops.

Danach sollte so was funktionieren:
shell code
 ~ » telnet localhost 3306
Trying 127.0.0.1...
Connected to name.des.fernen.servers.
Escape character is '^]'.
c
5.5.5-10.3.23-MariaDB-0+deb10u1p�>8@uPmT=���qGK%s9`Y|%AVmysql_native_password
^CConnection closed by foreign host.
Wenn du so weit bist, dass das klappt, kannst du dann überlegen, wie du das in dein Gambas-Programm übernimmst.
Alles Gute,

tionov

Werner
Foriker
Beiträge: 8
Registriert: Sa 17. Okt 2020, 00:01
Kontaktdaten:

Re: Zugriff auf mysql-Datenbank

Beitrag von Werner » Fr 6. Nov 2020, 15:29

Der Link ist echt gut, danke.
Werde mir die Sache mal in Ruhe anschauen.
Bin ich ja doch nicht der Einzige, der so etwas probiert... :D

Da hast du Recht, so einfach ist es nicht, eine Proxy-Weiterleitung zu programmieren.
Deswegen machen das auch die wenigsten.

Gruß Werner

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast