Chcę napisać zapytanie LDAP, które sprawdza, czy użytkownik (sAMAccountName) jest członkiem określonej grupy. Czy można to zrobić, aby uzyskać 0 lub 1 rekordów wyników?
Wydaje mi się, że mogę pobrać wszystkie grupy dla użytkownika i przetestować każdą pod kątem dopasowania, ale zastanawiałem się, czy mogę spakować je do jednego wyrażenia LDAP.
Jakieś pomysły?
Dzięki
Odpowiedzi:
Tutaj powinno być możliwe utworzenie zapytania z tym filtrem:
a kiedy uruchomisz to na serwerze LDAP, jeśli otrzymasz wynik, Twój użytkownik „yourUserName” jest rzeczywiście członkiem grupy „CN = YourGroup, OU = Users, DC = YourDomain, DC = com
Spróbuj i zobacz, czy to działa!
Jeśli używasz C # / VB.Net i System.DirectoryServices, ten fragment powinien załatwić sprawę:
Uwaga: to przetestuje tylko bezpośrednie członkostwo w grupach, a nie członkostwo w tak zwanej „grupie podstawowej” (zwykle „cn = Użytkownicy”) w Twojej domenie. Nie obsługuje zagnieżdżonych członkostw, np. Użytkownik A jest członkiem grupy A, która jest członkiem grupy B - fakt, że użytkownik A jest w rzeczywistości członkiem grupy B, również nie jest tu odzwierciedlany.
Marc
źródło
Jeśli używasz OpenLDAP (tj. Slapd), który jest powszechny na serwerach Linux, musisz włączyć nakładkę memberof, aby móc dopasować ją do filtru przy użyciu atrybutu (memberOf = XXX).
Ponadto, gdy włączysz nakładkę, nie zaktualizuje ona atrybutów memberOf dla istniejących grup (będziesz musiał usunąć istniejące grupy i dodać je ponownie). Jeśli włączyłeś nakładkę na początku, gdy baza danych była pusta, powinno być OK.
źródło
Dodałbym jeszcze jedną rzecz do odpowiedzi Marca: atrybut memberOf nie może zawierać symboli wieloznacznych, więc nie można powiedzieć czegoś w rodzaju „memberof = CN = SPS *” i oczekiwać, że znajdzie wszystkie grupy zaczynające się od „SPS”.
źródło
Musisz ustawić swoją bazę zapytania na nazwę wyróżniającą danego użytkownika, a następnie ustawić filtr na nazwę wyróżniającą grupy, do której się zastanawiasz, czy jest członkiem. Aby sprawdzić, czy jdoe jest członkiem grupy biurowej, zapytanie będzie wyglądać mniej więcej tak:
Jeśli chcesz zobaczyć WSZYSTKIE grupy, do których należy, po prostu poproś o atrybut „memberof” w wyszukiwaniu, na przykład:
źródło