Mit Xbase auf MySQL-DB im Internet zugreifen

Vom Front-End bis SOAP.

Moderator: Moderatoren

Antworten
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von Benz »

Hi,
gibt es eine Möglichkeit, mit der man mit Xbase direkt auf eine MySQL-Datenbank auf einem Webserver zugreifen kann?
Dabei soll aus- und einlesen möglich sein.
Geht sowas überhaupt?
Wenn ja, wie sicher ist das ganze?
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von georg »

Hallo, Benz -

Ja. Ja. Ja. Kommt drauf an.

Egal. ob Du mit ODBC oder z.B. mit Hector's MySQL API Wrapper arbeitest, es geht. Du brauchst die IP des Servers, den Namen der Datenbank, sowie Benutzername und Passwort.

Wenn die entsprechenden Berechtigungen vergeben sind, kannst Du lesen und schreiben wie mit einer lokalen MySQL-Datenbank.

Aus den vorhergehenden Sätzen kannst Du schliessen, dass es geht.

Es geht aber meistens NICHT. Normalerweise sind die MySQL-Server so konfiguriert, dass ein Zugriff auf den Server nur von "localhost" aus erfolgen kann. Ein PHP-Script, das auf die Datenbank zugreift, läuft aus Sicht des MySQL-Servers auf "localhost". Du wirst - je nach Hoster - eine Menge Überzeugungsarbeit leisten müssen, damit Du remote auf die Datenbank zugreifen kannst.

Und was die Sicherheit angeht, so liegt das an der Art der Verbindung.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von Benz »

na klasse :D danke für die Antwort schonmal! ;)

Angenommen bei mir würde es funktionieren, wie würde ich das dann machen? Kannst du mir ein kleines Beispiel geben?
Hab auch mit lokalen MySQL-Datenbanken noch nicht gearbeitet, bisher nur mit dbf.
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von Hans Zethofer »

würde mich auch brennend interessieren =D>
_____________
lg
Hans
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von georg »

Guten Morgen,


hier ein Beispiel mit Hector Peroza's MySQL-Wrapper:

Code: Alles auswählen

	oCon:= MySql():New()
	IF oCon:RealConnect(cHost,cUser,cPassword )
      oCon:SelectDb(cDataBase)
Falls der MySQL-Server auf einem anderen Port läuft, hier die Definition der Methode :RealConnect():

Code: Alles auswählen

INLINE METHOD RealConnect(host,User,Password, Db ,Port,Socket,Flag)
cHost ist die IP-Adresse des MySQL-Servers, cUser, cPassword und cDatabase dürften selbsterklärend sein.


Falls Ihr den MySQL-Server selbst administriert:

Code: Alles auswählen

GRANT ALL PRIVILEGES FOR MeineDatenbank.* TO 'user'@'%' IDENTIFIED BY 'password';
MeineDatenbank ist der Name der Datenbank, bitte nicht in Anführungsstriche setzen. user ist der Benutzername, bitte ein einfache (!) Anführungsstriche setzen, und '%' bedeutet, dass von jeder IP-Adresse aus zugegriffen werden kann. In diesem Fall sollte 'password' (bitte auch in einfache(!) Anführungsstriche setzen) entsprechend komplex sein.


Da ich gerade auf dem Sprung in den Gottesdienst bin, folgt ein Beispiel für SQLExpress heute nachmittag.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von brandelh »

MySQL antwortet über eine TCP/IP Adresse auf einem Standardport (irgendwas um 3300) ...
Wenn man also seinen ODBC Treiber (lokal) anweist auf die IP Adresse des Servers zuzugreifen, sollte der danach suchen.
Die Firewall des Servers muss diesen Zugriff natürlich zulassen ... was meist verboten ist, weil sonst JEDER versucht den MySQL Server zu übernehmen ...
Über Verschlüsselung sollte man auch nachdenken, es geht ja übers Internet ...
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von georg »

Hallo,


hier kommt der Programm-Code, den ich mit SQLExpress verwende:

Code: Alles auswählen

   cServer := "mein-server-im-internet.de"
   cUser := "das-bin-ich"
   cPWD := "ganz-geheim"
   cDBName := "den-sollte-man-kennen"

   oConM := SQLConnection():new()
   cLine := "Driver={" + SQLUGetDriverName("MY", oConM)
   cLine += "};"
   cLine += "server=$SERVER;"
   cLine += "database=$DATABASE;"
   cLine += "uid=$USER;"
   cLine += "password=$PASSWORD;"
   cLine := StrTran(cLine, "$SERVER", cServer)
   cLine := StrTran(cLine, "$USER", cUser)
   cLine := StrTran(cLine, "$PASSWORD", cPWD)
   cLine := StrTran(cLine, "$DATABASE", cDBName)
   IF !oConM:driverConnect(NIL, cLine)
      ConfirmBox(, "Irgendein Parameter stimmt nicht.", "Fataler Fehler", XBPMB_OK, XBPMB_CRITICAL)
      QUIT
   ENDIF
Die Funktion SQLUGetDriverName() habe ich hier irgendwann mal als Quellcode gepostet, sie liest aus den installierten ODBC-Treibern den ersten (!) aus, dessen Name mit dem übergebenen Literal matcht. Ansonsten verwende ich keine DSN, sondern arbeite mit einem sogenannten Verbindungsstring, daher auch die Methode :driverConnect().
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von Fischkopp »

Bei mir steht das auch demnächst an :roll:
Hat mitlerweile mal jemand eine `sichere` Verbindung aufgebaut ?
Muß ja machbar sein, z.B. mit Putty oder ggf. auch direkt mit SSH, das ist ja meistens schon vorgesehen/installiert, oder ?
Grüße aus Berlin

Reiner
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von brandelh »

Eine SICHERE Verbindung ist z.B. über ein VPN möglich.
Oder man geht über eine HTTPS WebServerVerbindung (dann muss man aber auf der Serverseite einen Dienst bauen, der eigene Anfragen an den SQL Server übersetzt und das Ergebnis zurückliefert.
Den TCPIP Port selbst würde ich nicht ins Internet hängen ;-)
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von georg »

Hallo, Reiner -


es geht vieles.

Grundsätzlich ist ein MySQL-Server so konfiguriert, dass er nur lokale Anfragen entgegennimmt. Für einen Zugriff aus dem Internet musst Du ihn explizit freischalten (/etc/mysql/my.cnf unter Debian) (den Neustart nicht vergessen) und auch die Benutzerberechtigungen im Sinne von

Code: Alles auswählen

GRANT ALL PRIVILEGES ON datenbank.* to 'user'@'%'
freigeben.

Ergänzung: Du musst auch prüfen, ob die Firewall externen Zugriff über den Port zulässt. Wird iptables eingesetzt:

Code: Alles auswählen

iptables --list-rules
Das könnte dann so aussehen:
-A INPUT -p tcp -m tcp --dport 3306 -j REJECT
Den Zugriff auf Port 3306 gibst Du so frei:

Code: Alles auswählen

iptables -A INPUT -p tcp -m tcp --dport 3306 ACCEPT

Alternativ (setzt voraus, dass Du SSH-Zugang zu dem Rechner hast) kannst Du eine Sitzung in putty definieren. Bei Connections -> SSH -> Tunnels fügst Du einen forwarded Port ein. Der Source Port sollte standardmässig 3306 sein (es sei denn, der Server lauscht auf einem anderen Port), und als Zielport kannst Du einstellen, was Dir beliebt. Wenn auf dem Rechner auch MySQL läuft, würde ich NICHT 3306 als Destination verwenden. Das Ganze als putty-Sitzung speichern.

Bevor Du die MySQL-Verbindung benötigst, startest Du die putty-Sitzung, meldest Dich an und startest die MySQL-Verbindung. Denk dran, dass Du bei einem abweichenden Destination-Port die Verbindung über diesen Port herstellst.

Das funktioniert, ich mache das hier quasi jeden Tag.

Bei dieser Variante müssen die Berechtigungen auf dem MySQL-Server nur auf 'user'@'localhost' lauten.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von Fischkopp »

Hallo,
nun hab ich endlich einen Putty-Zugang zu meinem neuen Shop, alles schön, Danke für die Hilfe :)

Was mich stört, ist das separate Starten des Dienstes.
Man müßte eigentlich direkt aus einer Anwendung heraus Putty starten und auch wieder beenden, wäre doch viel eleganter.
Hat das schon jemand implementiert ?
Für einen Tip wäre ich dankbar :wink:
Grüße aus Berlin

Reiner
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Oder man geht über eine HTTPS WebServerVerbindung (dann muss man aber auf der Serverseite einen Dienst bauen, der eigene Anfragen an den SQL Server übersetzt und das Ergebnis zurückliefert.
womit wir bei der "libmySQL.dll" sind von der es wohl auch eine SSL Version gibt ...

frage mal den Hans Zethofer welches Problem er damals hatte und mit welche Version von "libmySQL.dll" er Erfolg hatte.
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von Tom »

Randinformation: Ich verwende die MySQL-Datenbank, die sich auf unserem gehosteten WebServer befindet, aus einer Xbase++-Applikation heraus vergleichsweise einfach. Die ODBC-Treiber für MySQL sind installiert (aufpassen - man muss auch auf einem 64-Bit-Rechner die 32-Bit-Version verwenden!), entsprechende DSNs sind eingerichtet (dort die Verbindungsdaten zum Server), die Verbindung erfolgt über Xb2.Net, mit den Tabellen gedealt wird per SQLexpress. Mit Verschlüsselung, denn der Hoster stellt ein Zertifikat für diesen Fall zur Verfügung.
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von georg »

Hallo,


das Problem ist die Absicherung des Web-Servers. Ein auf einem Server laufender MySQL-Server, der von überall Verbindungen annimmt, stellt ein Sicherheitsrisiko dar. Es hat wohl auch seinen Grund, warum MySQL standardmässig nur den Zugriff von localhost erlaubt.

Für den Standard-Anwender, der nicht im Genuss einer festen IP-Adresse ist, stellt die Verbindung über putty die meines Erachtens sicherste (!) Option dar. Sicherheit ist nicht immer billig, und auch sicher nicht immer besonders bequem.

Bei der Verwendung von putty muss der MySQL-Server auch nicht so konfiguriert werden, dass er Zugriffe aus dem Netz gestattet, sondern er lässt weiterhin nur Zugriff von localhost zu.

Hat man als Anwender auf seiner Seite eine feste IP-Adresse, kann man über iptables Regeln festlegen, die einen Zugriff auf den MySQL-Port nur von der vorgegebenen IP-Adresse zulassen, und alle anderen Zugriffe ablehnt.

Das könnte dann so aussehen:

iptables -A INPUT -s 1.1.1.1/32 -p tcp -m tcp --port 3306 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --port 3306 -j REJECT --reject-with icmp-port-unreachable

Die erste Regel kann beliebig oft wiederholt werden, wenn mehr als eine IP-Adresse zugelassen werden sollen, wobei in meinem Beispiel die 1.1.1.1 als Platzhalter für die eigentliche IP-Adresse dient.

Die zweite Regel dient dazu, alle anderen Verbindungsversuche auf den Port 3306 in einer Art abzulehnen, die den Schluss zulässt, dass dort kein MySQL-Server auf dem Port verfügbar ist.

Wer sich noch nicht mit iptables beschäftigt hat, sollte das tun, ehe man sich selbst aus dem Server aussperrt - und man sollte mittels iptables-save und iptables-restore sicherstellen, dass die Regeln nach einem Neustart des Systems weiterhin Gültigkeit haben.

Nach diesen Änderungen kann man den Zugriff auf den MySQL-Server für Clients aus dem Netz freigeben.

Ganz klar: das geht nur mit einem eigenen Server (d.h. man hat root-Zugriff), Webspace ist da etwas ganz anderes!


Ein zweites Thema ist die Verbindung zwischen dem Client und dem MySQL-Server. Bei Verwendung von putty läuft das Ganze über eine SSL-Verbindung, ist also implizit verschlüsselt (d.h. weder der MySQL-Client noch der MySQL-Server müssen für SSL konfiguriert werden).

Ansonsten kann man auch mit selbst erstellten Zertifikaten die Verbindung über SSL laufen lassen, wenn das erforderlich ist. Entsprechende Anleitungen zum Erstellen des Zertifikates und dem Einbinden findet man schnell bei Google, und das Ganze auch in Deutsch.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von brandelh »

Tom hat geschrieben:Randinformation: Ich verwende die MySQL-Datenbank ... wird per SQLexpress. Mit Verschlüsselung, denn der Hoster stellt ein Zertifikat für diesen Fall zur Verfügung.
Wer genau kümmert sich um die Verschlüsselung, auf dem WebServer muss man das sicher beim MySQL Server eintragen, aber auf der lokalen Maschiene beim ODBC Treiber ?
Gruß
Hubert
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von Fischkopp »

Hallo,
danke für die ausfühlichen Hinweise.

Ich habe/nutze (noch) keine Zusatz-Tools à la SQLexpress oder XB2net , ODBC brauche ich zur Zeit ja nicht,
da ich die SQL-Zugriffe alle per API realiert habe und das in Verbindung mit Putty auch gut + sauschnell funktioniert :)

Meine Frage war eigentlich nur, wie/ob man Putty per Script aus xBase heraus startet/stoppt.
Da komm ich mit der Putty-Doku nicht wirklich klar, gehen soll es ja :oops:
Grüße aus Berlin

Reiner
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von Tom »

Hallo, Hubert.
aber auf der lokalen Maschiene beim ODBC Treiber ?
Das übernimmt der lokale ODBC-Treiber für MySQL.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von brandelh »

Fischkopp hat geschrieben:...
Ich habe/nutze (noch) keine Zusatz-Tools à la SQLexpress oder XB2net , ODBC brauche ich zur Zeit ja nicht,
da ich die SQL-Zugriffe alle per API realiert habe und das in Verbindung mit Putty auch gut + sauschnell funktioniert :)
Meine Frage war eigentlich nur, wie/ob man Putty per Script aus xBase heraus startet/stoppt.
Da komm ich mit der Putty-Doku nicht wirklich klar, gehen soll es ja :oops:
das kommt davon wenn man einen anderen Thread zu einer eigenen Frage nutzt, statt einen eigenen aufzumachen ;-)

Meine Fragen und andere Antworten beziehen sich auf den Titel im Thread:

Mit Xbase auf MySQL-DB im Internet zugreifen

:D
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von georg »

Hallo, Reiner -


Passwort geht nicht: http://www.chiark.greenend.org.uk/~sgta ... y/faq.html, siehe Punkt A.2.8

Und die Behauptung, dass es doch geht: http://www.shanghaiwebhosting.com/web-h ... auto-login

Ich habe das Beispiel im zweiten Link mal ausprobiert, und kann bestätigen, dass es funktioniert.

Also:

- Sitzungsdaten definieren und speichern (wirst Du wohl sowieso getan haben)
- putty -load Sitzungsname -l User -pw Passwort
- fertig

Es gibt aber die Möglichkeit, die SSH Anmeldung nicht über Benutzername/Passwort, sondern über zwei Schlüssel durchzuführen, und das ist die bevorzugte Methode, wenn es um automatische Anmeldung geht. Bei der Google-Suche nach "putty automated login" habe ich einige Beiträge zu den Thema gefunden.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: Mit Xbase auf MySQL-DB im Internet zugreifen

Beitrag von Fischkopp »

Hallo nochmal

@Georg
gut, da werde ich mal meine Hausaufgaben machen, bei Erfolg werde ich berichten :)

@Hubert
genau das mache ich mit Putty :wink:

also erst mal schöne Ostern +
Grüße aus Berlin

Reiner
Antworten