[MySQL] Wie sicher ist das Benutzersystem?

Operator_Jon

Erfahrenes Mitglied
Hallo alle miteinander!

Ich habe bislang immer viel mit MySQL gearbeitet, jedoch immer nur als "Ein-Benutzer-Vehikel" per PHP. Jetzt stehe ich vor einem Projekt das erfordert aus einer lokalen C++ Anwendung heraus Daten aus dem Web zu empfangen. Die Applikation soll ca alle 5 Sekunden auf den Inhalt zugreifen und Ihn auf Veränderungen prüfen. Die Applikation wird an durchaus 1000 und mehr Menschen verteilt die diese Informationen immer in nahezu Echtzeit empfangen sollen.

Ich habe mit bereits einige Modelle überlegt:
- Eine Website zwischenschalten und die Daten per HTTP empfangen
- Webservice (kommt leider Serverseitig nicht in Frage)
- Direktzugriff auf Online Datenbank (MySQL in diesem Fall)

Ich glaube am zuverlässigsten und schnellsten wäre wohl eine MySQL Datenbank, was mich dabei jedoch stört ist der Direktzugriff darauf. Daher nun meine Fragen:
Wie sicher ist das Benutzersystem der MySQL Datenbank? Kann ich einfach einen Benutzer anlegen welcher nur Lese (SELECT) Zugriff hat und alles ist ok? Gibt es da weitere Fallstricke zu beachten? Ich habe dabei immer im Hinterkopf das meine DLL mit dem Klartextpasswort gehackt werden kann!

Und falls sich jemand damit auskennt:
Wäre es gut für die Performance wenn ich Amazon AWS RDS nutzen würde?

Vielen Dank für eure Mühe im Vorraus!

Schönen Gruß,
Jonathan
 
Zuletzt bearbeitet:
Hi,

alle Fragen kann ich dir nicht beantworten, aber ich gehe jetzt mal ein paar Sachen der Reihe nach durch:

Eine Website zwischenschalten und die Daten per HTTP empfangen
Kommt darauf an, wie du den Service weiterverwenden willst. Willst du eine API bauen, die auch andere Programme dann verwenden können? Dann ja. Ansonsten würde ich dir davon abraten. Die Last zum Ausliefern der Daten steigt, und auch der Traffic erhöht sich merklich.

Wie sicher ist das Benutzersystem der MySQL Datenbank?
Prinzipiell sehr sicher, kommt natürlich darauf an, welche Rechte deine Benutzer bekommen, wie sicher das Passwort ist, ob SSL verwendet wird und so weiter.

Kann ich einfach einen Benutzer anlegen welcher nur Lese (SELECT) Zugriff hat[...]?
Ja, das geht. Wie genau, kann ich dir jetzt nicht mit einem SQL-Schnipsel zeigen, ich mach das immer per phpmyadmin ;) Du kannst sogar die Rechte so fein einstellen, dass du auf einzelne Tabellen oder Spalten die Rechte beschränkst.

Gibt es da weitere Fallstricke zu beachten?
Würde dafür sorgen, dass die Verbindung zur Datenbank per SSL verschlüsselt wird und du keine 0815-Passwörter auslieferst.

[...]das meine DLL mit dem Klartextpasswort gehackt werden kann[...]
Sorge dafür, dass jeder Benutzer sein eigenes Passwort für den Zugriff bekommt. Wenn du dein Projekt als DLL verteilst, dann kannst du ja noch eine Funktion hinzufügen, die die Zugangsdaten für den Server dann setzt. Somit kannst du dann nachträglich auch einzelne User aussperren oder erweiterte Rechte geben.

Gruß
BK
 
Hi Bratkartoffel,

vielen Dank für diese Antworten!
Eine API ist nicht geplant, die Software die auf diese Daten Zugriff hat ist von mir entwickelt und die Daten sollen für niemand anderen verfügbar sein außer meiner eigenen Software.

Ich ersehe aus deiner Antwort das ich scheinbar noch meine alte Denke angesetzt habe, nämlich ein einziges Passwort und einen einzigen Benutzer für den Zugriff zu nutzen. Ich bin garnicht auf die Idee gekommen, für jeden Benutzer einen Account in der DB selbst anzulegen, ich hatte daran gedacht den Benutzer per DB-Tabelle zu verifizieren :-( !

Das ist schonmal eine super Möglichkeit der ich weiter nachrecherchieren werde :) . Ich wollte nur klären ob der Direktzugriff auf eine MySQL Datenbank in sich selbst erstmal Risiken birgt.

Danke nochmal, das hat mir schon sehr geholfen!
 
Hi,

nun ja, wenn dein Server bisher nur lokal erreichbar ist (sprich: 127.0.0.1 oder localhost, die Standardeinstellung in der my.cnf), dann musst du ihn hierfür auch auf der Netzwerkkarte hören lassen.
Hierbei könnte es natürlich sein, dass jemand über einen Exploit im MySQL-Server dann unberechtigt Zugriff darauf erlangt da er ja die komplette Verbindung und die Pakete selbst zusammen-zimmern kann.

Dies ist möglich, aber ich würd sagen ein eher marginales Sicherheitsproblem solange du den MySQL-Server aktuell hältst ;) Ich selbst hab zwei "offen" im Internet und bisher hats noch keine Probleme / Einbrüche gegeben.

Gruß
BK
 
Ok, Danke für deine Erfahrungen :)
Ich werde den Server ohnehin vermutlich bei Strato hosten lassen, ich vertraue denen mal das die alles aktuell halten und mir beim Thema Sicherheit etwas helfen ;-)

Danke nochmal, Thema erledigt :)
 
Als weitere Sicherung könnte man die Verbindung noch über SSL absichern und den Server so konfigurieren das dieser ein Client-Zertifikat verlangt ... in kombination mit DB-Accounts ein sehr sicheres System.
Das ganze läuft dann in dem Sinne dreifach ab :

1) Aufbau SSL-Verbindung : der Client fordert vom Server das Zertifikat an um eine SSL-Verbindung aufzubauen
2) Der Client versucht sich mit seinen User-Daten einzuloggen
3) Der Server prüft User-/Passwort-Kobination
4) Nur wenn diese Prüfung ok ist wird vom Server ein Zertifikat vom Client angefordert
5) Der Server prüft ob das Zertifikat zu diesem Account gehört *analog zu SSH mit Key-Files*
6) Server baut durch Client-Zertifikat gesicherte Verbindung auf , getunnelt durch SSL-Kanal vom Client zum Server ..

Eine sehr sichere Verbindungs-Art ... erfordert allerdings auch einiges an Overhead.

*Ich weis nicht ob der Verbindungsaufbau genau so stimmt ... aber ich bin der Meinung das im Zusammenhang mit OpenSSL mal so gelesen zu haben*
 
Hi,

ein Clientzertifikat würd ich jetz in die Kategorie "überflüssig" einordnen. Wenn du die Verbindung via Passwort absicherst, dann brauchst du das nicht extra. Quasi entweder das eine, oder das andere.

Gruß
BK
 
Hi

und was ist dann mit dem Mit-"hören" auf der Leitung und Abfangen der Zugangsdaten?
Zertifikat am Client sichert auch dagegen, Passwort nicht.

Das Ganze natürlich nur theoretisch.
Ob sich wer für die zu erwartenden Daten die Mühe macht...
 
Diese Sicherungen sind bei MySQL eigentlich nur nötig, wenn man einen MySQL-Nutzer hat der von überall auf den MySQL-Dienst zugreifen darf. So ein Nutzer ist nicht zu empfehlen. Wenn man so etwas braucht, sollte man den Zugriff auf eine IP beschränken, nicht auf die ganze Welt. Selbst wenn dann jemand Zugangsdaten mitlesen könnte, käme er nicht auf den Server da er nicht die selbe IP hat. Eine Sicherung mit Zertifikaten ist imho nur in hochgesicherten Umgebungen notwendig, z.B. wo Personendaten gespeichert werden die nicht verbreitet werden dürften. Wenn deine Applikation also immer hinter einer festen IP steckt, dann belass es bei der IP-Beschränkung.
 
Und genau das wird vermutlich das Problem von TO sein : das sein Dienst eben von dyn-IPs abgefragt wird. Nich jeder verfügt über eine static-IP *DSL-Privatkunden schon garnicht* ... und auch mittelständische Unternehmen sind meist nur über dyn-IP angebunden. Größere Unternehmen , Uni's und alles was mit Glasfaser angebunden ist wird sicherlich einen vom Provider fest zugeteilten IP-Bereich haben ... aber IP-Sicherung ist in Zeiten wo IPv4-Adressen immer knapper werden und IPv6 erst im kommen ist noch nicht sicher genug. Auch lassen sich Ethernet-Pakete so fälschen das sie trotz anderer Quelle die benötigte IP aufweisen *und dabei rede ich jetzt nicht von Proxies* ... und das Ergebnis trotzdem an die maskierte IP weitergeleitet wird.

Alles in allem würde ich schon sagen das mindestens SSL verwendet werden sollte bei dem was TO vorhat.
Für User deren Daten aber höheren Schutz erfordern oder solche mit erhöten Rechten würde ich dann schon ein Client-Zertifikat verlangen. Oder das ganze über eine andere Schnittstelle realisieren.
 

Neue Beiträge

Zurück