MItglieder einer Gruppe werden in Active Directory an zwei Stellen hinterlegt. Die maßgebliche Stelle, die aktiv geändert wird, wenn man Mitglieder einer Gruppe hinzufügt oder sie löscht, ist das „member“-Attribut des Gruppenobjekts. Es ist mehrwertig und nimmt den DN (distinguishedName, gewissermaßen der „LDAP-Objektpfad“) des Mitglieds auf. Zusätzlich gibt es aber bei allen Mitgliedern auch das „memberOf“-Attribut, in dem hinterlegt ist, in welchen Gruppen das jeweilige Objekt Mitglied ist. Hierbei handelt es sich aber nur um einen sekundären Verweis – das Feld wird von Active Directory aktualisiert, wenn man die Mitglieder einer Gruppe ändert. Der Nutzen: Auf diese Weise kann man direkt beim Objekt nachschlagen, in welchen Gruppen es Mitglied ist, ohne dass man die Gruppen selbst abfragen muss.
Diesen Umstand kann man sich zunutze machen, wenn man zusätzliche Informationen über alle Mitglieder einer bestimmten Gruppe benötigt. Hilfreich ist hierbei ein Client, der benutzerdefinierte Suchabfragen an Active Directory stellen kann, z.B. mein Tool Carmen.
Im ersten Schritt besorgt man sich mit Carmen den DN der Gruppe, um die es geht. Dazu eignet sich eine Abfrage mit der Ambiguous Name Resolution, etwa so:
SELECT * FROM <so lassen> WHERE anr='Anzeigename-der-Gruppe'
Wichtig sind die einfachen Anführungsstriche (Apostrophe, oben auf der #-Taste) um das Suchkriterium. In dieser Abfrage reicht auch ein Teil (= der Anfang) des Namens, z.B. „Cons“ für „Consulting“. Den so erhaltenen DN (ohne das „LDAP://“) nutzt man nun in einer zweiten Abfrage. Diese sucht nach allen Objekten, die die betreffende Gruppe in ihrem „memberOf“-Attribut stehen haben. Von diesen Objekten lassen sich dann beliebige Felder ausgeben.
SELECT adsPath,givenName,sn FROM 'LDAP://DC=faq-o-matic,DC=net' WHERE memberOf='CN=Superhelden,OU=Benutzer,DC=faq-o-matic,DC=net'
Für einfachere Abfragen von Gruppenmitgliedern siehe auch unseren Artikel:
http://faq-o-matic.net/?p=838