Ich möchte eine LDAP-Abfrage schreiben, die testet, ob ein Benutzer (sAMAccountName) Mitglied einer bestimmten Gruppe ist. Ist das möglich, damit ich entweder 0 oder 1 Ergebnisdatensätze bekomme?
Ich denke, ich kann alle Gruppen für den Benutzer abrufen und jede für eine Übereinstimmung testen, aber ich habe mich gefragt, ob ich sie in einen LDAP-Ausdruck packen könnte.
Irgendwelche Ideen?
Vielen Dank
Antworten:
Mit diesem Filter sollten Sie hier eine Abfrage erstellen können:
Wenn Sie dies auf Ihrem LDAP-Server ausführen und ein Ergebnis erhalten, ist Ihr Benutzer "yourUserName" tatsächlich Mitglied der Gruppe "CN = YourGroup, OU = Users, DC = YourDomain, DC = com
Versuchen Sie zu sehen, ob dies funktioniert!
Wenn Sie C # / VB.Net und System.DirectoryServices verwenden, sollte dieses Snippet den folgenden Trick ausführen:
Achtung: Dies wird nur auf unmittelbare Gruppenmitgliedschaften getestet und nicht auf Mitgliedschaft in der sogenannten "primären Gruppe" (normalerweise "cn = Benutzer") in Ihrer Domain. Verschachtelte Mitgliedschaften werden nicht behandelt, z. B. Benutzer A ist Mitglied der Gruppe A, die Mitglied der Gruppe B ist. Die Tatsache, dass Benutzer A auch wirklich Mitglied der Gruppe B ist, wird hier nicht berücksichtigt.
Marc
quelle
Wenn Sie OpenLDAP (dh slapd) verwenden, das auf Linux-Servern üblich ist, müssen Sie das Mitglied der Überlagerung aktivieren, damit es mit dem Attribut (memberOf = XXX) mit einem Filter übereinstimmen kann.
Sobald Sie das Overlay aktiviert haben, werden die memberOf-Attribute für vorhandene Gruppen nicht aktualisiert (Sie müssen die vorhandenen Gruppen löschen und wieder hinzufügen). Wenn Sie das Overlay zu Beginn aktiviert haben und die Datenbank leer war, sollten Sie in Ordnung sein.
quelle
Ich würde noch etwas zu Marc's Antwort hinzufügen: Das memberOf-Attribut darf keine Platzhalter enthalten, daher können Sie nicht so etwas wie "memberof = CN = SPS *" sagen und erwarten, dass alle Gruppen gefunden werden, die mit "SPS" beginnen.
quelle
Sie müssen Ihre Abfragebasis auf den DN des betreffenden Benutzers und dann Ihren Filter auf den DN der Gruppe setzen, bei der Sie sich fragen, ob sie Mitglied sind. Um zu sehen, ob jdoe Mitglied der Bürogruppe ist, sieht Ihre Anfrage ungefähr so aus:
Wenn Sie ALLE Gruppen sehen möchten, in denen er Mitglied ist, fordern Sie bei Ihrer Suche einfach nur das Attribut 'memberof' an:
quelle