Ist eine MySQL-Datenbank eine praktikable Alternative zu LDAP?

7

(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 Benutzerdatenbank)
  • 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.

Roberto
quelle
7
Wenn Sie zu SQL gehen, machen Sie es aus Liebe zu Ghu zumindest zu PostgreSQL ...
Shadur
Loggen sich Ihre Mitglieder irgendwo ein? Außerdem ist es nicht sehr schwer, mit Apache DS
Neil McGuigan
Ich werde PostgreSQL in Betracht ziehen! Und ja, Mitglieder melden sich zentral für die Webanwendungen an und natürlich für FTP und E-Mail.
Roberto
7
Klingt so, als ob LDAP das ist, was Sie wollen. Das ist ziemlich genau das, wofür es entwickelt wurde. Wenn Sie lernen, wie man LDAP lernt, wie Sie PostgreSQL verwalten, ein Benutzerzugriffsschema entwerfen, es implementieren und alle Ihre Apps neu schreiben, um es zu verwenden, erhalten Sie eine deutlich bessere Laufleistung als beim Erlernen von LDAP als beim Installieren einer SQL-Datenbank.
Shadur

Antworten:

12

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 eigentliche Verwaltung von LDAP im Vergleich zu einer einfachen SQL-Datenbank viel aufwändiger. Wenn alle Ihre Systeme vollständig mit derselben SQL-Benutzerdatenbank arbeiten können, gibt es keinen wirklichen Grund, warum Sie stattdessen LDAP benötigen . Andererseits 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.

Sven
quelle
3
Verwendet LDAP-Software normalerweise nicht eine SQL-Datenbank des einen oder anderen Strips als Backend?
Shadur
2
@Shadur: Normalerweise verwenden OpenLDAP und 389DS eine Berkeley DB-Variante als Speicher-Backend (dies ist keine SQL-Datenbank, sondern ein Schlüsselwertspeicher), aber Sie können andere für spezielle Anforderungen konfigurieren. Apache DS macht etwas Ähnliches, aber ich weiß nicht, was MS für die AD LDAP-Komponente macht (meine Vermutung: Es ist auch nicht SQL).
Sven
@Shadur LDAP ist selbst eine Datenbank, nicht nur ein Protokoll (genauso wie SQL als Datenbank betrachtet wird, nicht nur als Datenbankabfragesprache). Die meisten LDAP-Anbieter entwickeln Software als Datenbankanbieter, daher ist es für die meisten nicht sinnvoll, LDAP zusätzlich zu SQL zu implementieren. Das ist so, als würde man MySQL über Postgresql implementieren. (Ich habe früher für Nokia-Siemens gearbeitet und Abonnentendatenbanken entwickelt, die sowohl DAP als auch LDAP unterstützen. Der Datenspeicher besteht aus fest zugeordneten Festplatten, auf denen rohe C-Strukturen gespeichert sind.)
slebetman
@siebetman Ich stehe korrigiert. Vielen Dank.
Shadur
4

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, eine Anwendung anzupassen . Oft können Sie es einfach lösen, indem Sie eine Ansicht erstellen, die die Spaltennamen anpasst. Manchmal müssen Sie möglicherweise ein bisschen Code hinzufügen, um ein anderes Kennwort-Hashing-Format zu berücksichtigen, oder um ein Authentifizierungs-Plugin zu erstellen.

Sie müssen dies jedoch für jede einzelne Anwendung tun . 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 in jeder Anwendung mit einer angemessenen Größe (und für diejenigen, die dies nicht tun, gibt es einen klaren Grund, dies zu implementieren). 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 den Benutzer zu erzwingen john, besteht eine übliche Einrichtung darin, den Benutzer für einige Zeit (oder bis zur manuellen Freigabe) zu blockieren. 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 einzelnen 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-Sicherheitsanfälligkeit auf einem dieser Dienste würde es ermöglichen, die Liste der Benutzer und Hashes zu sichern (und ich gehe bereits davon aus, dass sie schreibgeschützt ist). 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.

Engel
quelle
3

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.

Suman
quelle