it-swarm.com.de

Ist eine MySQL-Datenbank eine praktikable Alternative zu LDAP?

(Entschuldigung, wenn ich die falsche Frage stelle oder am falschen Ort.)

Wir betreiben IT für unseren Verein (alle Freiwilligen). Wir haben einen Server mit Mitgliedsdatenbank in OpenLDAP, Mailserver, FTP und eine Reihe von hausgemachten Webanwendungen.

Das meiste davon ist in Ordnung, mit Ausnahme der OpenLDAP-Mitgliedsdatenbank. Die Leute, die es eingerichtet haben, sind schon lange weg und die aktuelle IT-Gruppe ist nicht wirklich in der Lage, Änderungen vorzunehmen.

Also habe ich darüber nachgedacht, die Mitgliedsdatenbank von OpenLDAP in eine MySQL-Datenbank zu verschieben. Dies scheint möglich, unser E-Mail- und FTP-Server unterstützt SQL-Quellen und wir können unsere Webanwendungen entsprechend ändern. Aber ich kann mich immer noch nicht entscheiden, ob dies einen Nachteil hat. Daher meine Fragen:

  • Was sind die Vorteile eines LDAP gegenüber einer SQL-Datenbank? (Für einfache Benutzerdatenbanken)
  • Gibt es Gründe, MySQL nicht als Benutzerdatenbank zu verwenden?

Ich konnte hier keine vergleichbare Frage finden. Und Informationen, die ich extern finde, führen mich zu Seiten, die älter als 10 Jahre sind.

7
Roberto

Dies ist ein weit gefasstes Thema ohne einfache Antwort, da es von vielen Faktoren abhängt.

Einige Vorteile von (Open) LDAP als Benutzerdatenbank:

  • LDAP verfügt über eine inhärente Baumstruktur, die die Strukturierung großer Organisationen erleichtern kann. Es ist auch einfacher, ein Datenfeld für einen Datensatz zu haben, das wirklich eine Liste von Dingen ist (wie "der Benutzer ist Mitglied dieser Gruppen"), als dies in SQL-Datenbanken zu tun (Hinweis: beides ist in SQL absolut möglich, nur komplizierter). .
  • Es ist einfacher, LDAP als zentrale Benutzerdatenbank für mehrere Systeme zu verwenden. Dies ist weniger ein Problem für Dinge wie Mail oder FTP, die auch Linux PAM als Authentifizierungsquelle verwenden könnten, oder für selbst entwickelte Systeme, die Sie steuern. Insbesondere wenn Sie Webanwendungen von Drittanbietern hinzufügen, hat jedes System häufig seine eigenen eigene Benutzerdatenbank mit inkompatiblen Schemas, die keine Daten gemeinsam nutzen können. In diesem Fall können Sie häufig mindestens mit LDAP synchronisieren und/oder authentifizieren.
  • LDAP-Objektklassen für Datensätze machen es einfach, dieselbe Datenbank für viele verschiedene Systeme mit unterschiedlichen Anforderungen zu verwenden. Fügen Sie dem Datensatz einfach eine Objektklasse hinzu, und Sie erhalten eine ganze Reihe klassenspezifischer Felder, die bei anderen Datensätzen nicht vorhanden sind und dies auch tun würden Für jeden Datensatz in SQL müssen viele leere Felder vorhanden sein.
  • LDAP kann ein Black-Box-Authentifizierungssystem sein. Dies bedeutet, dass Sie eine App haben können, die nur einen Benutzernamen und ein Passwort an LDAP sendet und fragt: "Ist diese Kombination gültig?" und eine Ja/Nein-Antwort erhalten. Mit SQL muss die App tatsächlich die Datenbank lesen und die Überprüfung selbst durchführen.

Leider ist die Verwaltung von LDAP im Vergleich zu einer einfachen SQL-Datenbank wesentlich aufwändiger. Wenn alle Ihre Systeme vollständig mit derselben SQL-Benutzerdatenbank arbeiten können, gibt es keinen wirklichen Grund, warum Sie benötigen. stattdessen LDAP zu haben. Auf der anderen Seite würde ich sehr lange und gründlich darüber nachdenken, ob es nicht einfacher ist, sich hinzusetzen und LDAP zu verstehen, bevor man es herausreißt und durch etwas anderes ersetzt. Diese Art von Änderungen sieht zu Beginn in der Regel einfach aus, aber auf dem Weg dorthin treten immer wieder Probleme auf, die Sie nicht berücksichtigt haben und die die Dinge viel schwieriger machen als erwartet.

12
Sven

Können Sie eine MySQL-Datenbank als gemeinsame Quelle für Benutzerkonten verwenden? Ja auf jeden Fall. Ich habe ein solches System montiert und es funktioniert ziemlich gut mit mehreren Anwendungen.

Was sind die Nachteile der Verwendung einer MySQL-Datenbank anstelle von LDAP?

a) Sie müssen alle Anwendungen anpassen, um Ihre Datenbank zu verwenden.

Es ist normalerweise nicht viel Arbeit, die Anwendung an anzupassen. Oft können Sie es einfach lösen, indem Sie eine Ansicht erstellen, die die Spaltennamen anpasst. Manchmal müssen Sie möglicherweise etwas Code hinzufügen, um ein anderes Kennwort-Hashing-Format zu berücksichtigen, oder um ein Authentifizierungs-Plugin zu erstellen.

Sie müssen dies jedoch tun für jede einzelne Anwendung. Und wenn Sie morgen aufgefordert werden, eine neue Webanwendung zu installieren (z. B. wenn jemand beschließt, ein Wordpress Blog) hinzuzufügen, müssen Sie die Anwendung erneut studieren und sehen, wie Sie sie anpassen können.

'Jeder' unterstützt die Authentifizierung gegen LDAP. Dies ist der de facto Standard, und Sie finden Plugins für die LDAP-Authentifizierung für jede Anwendung mit einer anständigen Größe (und für diejenigen, die dies nicht tun, es gibt einen klaren Grund, dies umzusetzen). Es gibt einige (sehr wenige) Alternativen, und sie werden nur wenig für die Authentifizierung verwendet.

Beachten Sie außerdem, dass es möglicherweise schwieriger ist, eine Benutzertabelle aus einer anderen Engine (MySQL) zusätzlich zu unterstützen, wenn eine Anwendung zufällig ein anderes Datenbankmodul verwendet (vorausgesetzt, es gibt eine neue Entwicklung, die die Verwendung von PostgreSQL erfordert).

Natürlich können Sie die Anpassung selbst nur tun, wenn es sich um Ihre eigene Entwicklung oder Open Source handelt. Vergessen Sie, Microsoft Windows dazu zu bringen, ein solches benutzerdefiniertes Schema zu unterstützen!

b) Sicherheitszentralisierung

Die Verwendung eines zentralen Authentifizierungsservers bietet mehrere Vorteile:

Wenn Sie einen zentralen Server haben und jemand versucht, das Kennwort für Benutzer john zu erzwingen, besteht eine übliche Einrichtung darin, den Benutzer für einige Zeit zu blockieren (oder bis er manuell entsperrt wird). Wenn Sie ein Dutzend Dienste haben, selbst wenn alle einige Drosselungsmaßnahmen hätten (Hinweis: wahrscheinlich nicht), würde jeder von ihnen getrennt, und durch den Angriff auf mehrere Dienste hätte ein Angreifer tatsächlich N Versuche mal die Anzahl der Dienste . Sie müssten diese Metadaten in der gemeinsam genutzten Datenbank und allen Diensten koordinieren, um sie zu überprüfen und auf dieselbe Weise zu implementieren (mehr Code zum Hinzufügen zu den Anwendungen, Mail- und FTP-Servern ...).

Zweitens zentrale Protokollierung. Wenn Sie die Authentifizierung für einen einzelnen Dienst durchführen, können Sie ein einzelnes Authentifizierungsprotokoll erstellen, anstatt es auf mehrere Stellen aufzuteilen.

Drittens ist es ein einzelner Punkt für Updates. Sie möchten sich von MD5-Hashes entfernen, um pdkdf2 oder Argon2 zu verwenden? Sie müssen nur den Authentifizierungsserver aktualisieren, um ihn zu unterstützen. Andernfalls müssten Sie jeden Dienst erhalten, um dieses neue Format zu unterstützen.

Viertens größere Isolation. Wenn die gesamte Authentifizierung über den zentralen Server erfolgt, sollte diese so konfiguriert werden, dass nur er die vertraulichen Daten lesen kann, und Sie können sich darauf konzentrieren, dass sie sicher sind. Wenn jedoch jeder Dienst die Benutzerkennwörter überprüfen muss, haben Sie eine viel größere Oberfläche: Eine SQL-Injection-Schwachstelle auf any von ihnen würde das Dumping der Liste der Benutzer und Hashes ermöglichen (und das bin ich bereits vorausgesetzt, es wurde schreibgeschützt gemacht, andernfalls können sie sie möglicherweise sogar ändern oder gefälschte Benutzer einfügen).


Bitte beachten Sie, dass Sie (b) lösen können, indem Sie einen zentralen Server haben, der überhaupt kein LDAP verwendet. Angesichts von (a) ist es jedoch sinnvoll, das LDAP-Protokoll weiterhin zur Authentifizierung zu verwenden.

Es gibt keinen Grund, warum ein LDAP-Server, der hauptsächlich zur Authentifizierung verwendet wird, keine MySQL-Datenbank zum Speichern verwenden kann. Tatsächlich ist LDAP viel leistungsfähiger als die typische Verwendung (weshalb es so entmutigend aussieht). Mir ist jedoch keine Implementierung bekannt, die dies tut.

Ich empfehle, Ihren aktuellen LDAP-Server beizubehalten und bei Bedarf eine Schnittstelle zu erstellen, auf der die häufigsten Aktionen ausgeführt werden können (es gibt mehrere LDAP-Frontends, von denen eines möglicherweise die Anforderungen Ihrer IT-Gruppe abdeckt?).

Wenn Sie Ihren Anmeldevorgang für benutzerdefinierte Webanwendungen ändern möchten, würde ich sie dazu bringen, eine Single Sign-On-Lösung wie SAML zu unterstützen, aber ich würde trotzdem das LDAP-Backend verwenden lassen, das mit Ihrem FTP, Ihrer E-Mail-Adresse und Ihrer E-Mail-Adresse geteilt wird Sonstige Dienstleistungen.

4
Ángel

Ich wollte nur etwas hinzufügen, auf das in den anderen Antworten (noch) nicht hingewiesen wurde: Beim Vergleich von LDAP und SQL werden Äpfel und Orangen verglichen, da sie sich auf verschiedenen Ebenen im Stapel befinden.

  • LDAP = unterstützt Verzeichnisdienste über IP
  • SQL = generische Datenbankverwaltung, die natürlich auch die Benutzerverwaltung umfassen kann

Sie können LDAP mithilfe von SQL-Datenbanken implementieren. Denken Sie jedoch daran, dass diese verschiedene Funktionen unterstützen. (Tatsächlich verwenden die meisten LDAP-Lösungen wahrscheinlich hinter den Kulissen SQL oder eine andere Datenbank.)

LDAP ist ein Industriestandard für Verzeichnisdienste. Es ist möglich, dass viele Ihrer Downstream-Dienste für die Authentifizierung, Autorisierung usw. auf den LDAP-Dienst angewiesen sind. In diesem Fall müssten Sie weiterhin eine LDAP-kompatible Schicht auf Ihrer neuen SQL-Datenbank erstellen.

Gleichzeitig ist es möglich, dass Ihre anderen Anwendungen diese LDAP-Kompatibilität nicht benötigen und die Migration auf Ihre eigene SQL-Benutzerverwaltung möglicherweise einfacher ist. Aber selbst in diesem Fall vermute ich, dass Sie möglicherweise Ihre eigene Benutzerverwaltungslogik in den Anwendungen benötigen (es sei denn, sie unterstützen OAuth oder ähnliches).

Ich würde empfehlen, zunächst Ihre anderen IT-Anwendungen zu überprüfen, um festzustellen, wie eng sie mit dem LDAP-Dienst für Anmelde- und Autorisierungsdienste verbunden sind, und dann zu entscheiden, wie einfach oder schmerzhaft die Migration auf eine benutzerdefinierte SQL-Datenbanklösung wäre.

3
Suman