Autor Beitrag
mats
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Mi 27.06.18 07:41 
Hallo zusammen,

ich bin neu hier, also angemeldet, aber ich kenne die Seite natürlich.
Ich will eine Verbindung von meinem Programm (mit Lazarus) auf eine MySQL-Datenbank. Als Vorlage benutzte ich (wiki.freepascal.org/MySQLDatabases/de). Das klappt auch gut - aber nur local mit MySQL-Version 5.5 (installiert mit xampp). Aber, auf meinem Server von 1&1 (mit CentOS) läuft MySQL 5.1. Und ich bekomme immer nur die Fehlermeldung: MySQL51Connection1: Server connect failed. Local habe ich TMySQL55Connection, und im Internet mit TMySQL51Connection benutzt.

Kann mir da jemand helfen, oder, hat jemand eine bessere Idee? Bin für jede Anregung dankbar...

mats
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 134
Erhaltene Danke: 25

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Mi 27.06.18 09:12 
Hallo,

höchstwahrscheinlich ist die MySQL Datenbank auf deinem Server so konfiguriert, dass kein Externer zugriff darauf zugelassen wird. Aus sicherheitstechnischer Sicht, wäre alles andere auch eine Katastrophe.

Auf Anhieb fallen mir folgende Gründe ein aus denen das Problematisch wäre:


  • Soviel ich weiß kommuniziert MySQL unverschlüsselt, wenn du also nicht selbst dafür sorgst, dass die Kommunikation verschlüsselt wird (z.B. einen SSH Tunnel nutzen), dann könnten deine Anfragen und damit deine Daten abgehört werden.
  • Werden direkt Querys über das Netz geschickt, bietet dies eine Angriffsfläche für SQL-Injections.
  • Ist die Datenbank direkt erreichbar, können Exploits per Internet ausgenutzt werden. Das könnte im schlimmsten Fall zur Übernahme deines Webspace durch dritte führen. Ahnliche Lücken wie diese könnten wieder auftreten.


Du kannst, sofern der Provider es zulässt, natürlich die Sicherheitseinstellungen auf deinem Server so ändern, dass du auch von außen auf die Datenbank zugreifen kannst. Die saubere Lösung wäre es aber einen Webdienst zu implementieren, der ebenfalls auf dem Server läuft, und die Datenbankzugriffe macht. Deine Anwendungen sollte die Entsprechenden Informationen über den Webdienst erfragen/schreiben.
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 708
Erhaltene Danke: 110



BeitragVerfasst: Mi 27.06.18 17:13 
Man könnte die Verbindung tunneln, z.B. so:
github.com/millsoft/php-mysql-tunnel

ub60
mats Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Do 28.06.18 07:50 
Hallo,

danke für die schnellen Meldungen. Doch wie es immer so ist, werfen Antworten oft neue Fragen auf.

an doublecross: 1. Ich habe volle Root-Rechte auf meinem kleinen Server. Ich kann die Einstellungen bezüglich des Zugriffs (nur local o. von jeglichem Host) auf dem MySQL-Server ändern.
2. Welcher Webservice wäre das, den ich zur Kommunikation mit dem MySQL-Server benutzen könnte?
3. Für diese Domain, auf der ich die Webpräsenz für mein Lazarusprogramm schreiben/veröffentlichen will, habe ich ein Starter SSL-Zertifikat. Kann mir das etwas nützen, und wie?

an ub60: Ich habe mir das PHP-Script angesehen, aber ich verstehe es nicht ganz. Kommt noch!? Vielleicht habe ich etwas übersehen, aber ich weiß nicht Wie und Wo ich es auf dem Server installieren (?) soll und wie es arbeitet?


mats
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 134
Erhaltene Danke: 25

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Do 28.06.18 13:03 
Hi,

user profile iconmats hat folgendes geschrieben Zum zitierten Posting springen:
2. Welcher Webservice wäre das, den ich zur Kommunikation mit dem MySQL-Server benutzen könnte?


im idealfall ein selbst entwickelter. Dann hast du nicht nur die volle kontrolle über die Authentifizierung, sondern kannst auch exakt Schnittstellen Funktionen zur Verfügung stellen die du brauchst.

Angenommen du hast ein Programm das eine Kundenliste Anzeigen soll. Dann ruft diesen eine von dir in deinem Webservice Implementierte Funktion "GetKundenliste" auf. Die Funktion kann dann, da sie ja auf dem Server läuft ein "SELECT * FROM Kunden ORDER BY LastName, FirstName" auf der für sie lokalen DB machen. So kann dir dann keiner per SQL-Injection irgendetwas unterjubeln. Zurückgeliefert wird dann die Liste, welche deine Clientanwendung dann wieder anzeigen kann.

Das ist relativ viel Aufwand, bringt aber mehr Sicherheit und abstrahiert dir den Datenbankzugriff. Dein Client muss also gar nicht wissen, wie die Datenbank aufgebaut ist und wenn es dir irgendwann mal in den Kopf kommt statt MySql auf eine andere Datenbank oder sogar ein ganz anderes Speichersystem (verstreut in der Cloud oder so) umzustellen, musst du nur den Webservice anpassen, der Client merkt davon gar nichts, solange die Schnitstelle nicht verändert wird.

Anders herum kannst du auch einen zweiten Client, vielleicht für Linux oder als HandyApp entwickeln, welche die Daten genauso vom Server erfragt, hier musst du dann die ganzen DB zugriffe nicht erneut einbauen.

Unter Sicherheitsaspekten ist dies meiner Meinung nach die beste Lösung, da du eine passende (keine Funktionen die du nicht brauchst) Schnittstelle hast die du selbst härten kannst.


Alternativ kannst du dir natürlich wirklich Externen zugriff (Suche bei Google MYSQL REMOTE ACCESS) auf deine MySql Datenbank geben, öffnest dadurch nur eine entsprechend größere Angriffsfläche.