LDAP-Abfragen erstellen

Suchsyntax

Häufig ist der Wert des Attributs, nach dem gesucht wird, nicht exakt vorgegeben, oder es müssen mehrere Bedingungen erfüllt werden. In diesem Fall muss das oben genannte Suchbeispiel erweitert werden.

Wenn beispielsweise die Schreibweise von Meier unklar ist, könnte die Suche über den Platzhalter * durchgeführt werden: (sn=M*ier).

Der Platzhalter * ist der einzige vorgesehene Platzhalter. Weder das Fragezeichen, wie es aus der Windows-Kommandozeile bekannt ist, noch irgendeine Art von regulären Ausdrücken werden von LDAP verstanden.

Oft wird der Stern am Ende des gesuchten Werts eingesetzt. (sn=M*) würde beispielsweise alle Objekte finden, deren Nachnamen-Attribut einen Wert hat, der mit „M“ beginnt. Ob dabei nur Werte mit großem „M“ akzeptiert werden, hängt von der Art des Attributs ab. Für jeden Attributtyp im Verzeichnis kann im Active Directory festgelegt werden, ob Groß- und Kleinschreibung relevant ist. In den meisten Fällen wird sie nicht beachtet.

Auch am Anfang kann der Platzhalter gesetzt werden, beispielsweise um neben den Meiers auch die Ober- und Untermeiers zu finden. (sn=*meier). Allerdings muss hier davor gewarnt werden, dass diese Art besonders aufwendig ist und dementsprechende Laufzeiten mit sich bringt. Noch mehr rechnen muss der Server bei der Suche nach Teilstrings, beispielsweise alle Anwender mit einem „r“ im Namen (sn=*r*).

Besonders häufig wird nur nach dem Stern gesucht. In diesem Fall wird das Attribut auf Existenz überprüft. Um Speicherplatz zu sparen, werden Attribute, denen kein Wert zugeordnet ist, gar nicht angelegt. Diese Überprüfung kann im Gegensatz zur Teilstringsuche sehr effizient durchgeführt werden, muss also nicht gemieden werden. (initials=*) würde beispielsweise alle Anwender liefern, bei denen die besagte amerikanische Middle Initial eingetragen ist.

Mehrere Bedingungen

Die oben beschriebene Suche nach verschiedenen Schreibweisen von Meier hat einen Nachteil. Anstelle des Platzhalters kann eine beliebige Zeichenkette stehen. Es werden also neben Maier und Meier auch Anwender mit den Nachnamen Mrier und sogar Meinbier und Mier gefunden.

Besser ist es, explizit nach den einzelnen möglichen Schreibweisen zu suchen. Der Filter soll also nach Benutzern suchen, deren Nachname Meier oder Maier ist. Hierzu können mehrere Bedingungen über logische Operatoren verknüpft werden. Im vorliegenden Fall wird der Oder-Operator (|) benötigt. Er muss vor die einzelnen Bedingungen gestellt werden. Die einzelnen Vergleiche, die verknüpft werden sollen, müssen durch eine Klammer zusammengefasst werden.

(|(sn=Meier)(sn=Maier))

In Deutschland kommt der Name Meier ziemlich häufig vor. Um schnell den gewünschten zu finden, hilft da oft nur der Vorname. In diesem Fall müssen die Vergleiche durch ein logisches Und verknüpft werden

(&(givenName=Heinz)(sn=Meier))

Wenn nun die Schreibweise des Nachnamens unklar, aber der Vorname bekannt ist, dann wird sowohl der Und- als auch Oder-Operator benötigt:

(&(givenName=Heinz)(|(sn=Meier)(sn=Maier)))

Hier kommt eine ganze Menge von Klammern zum Einsatz, die zur Ordnung des Filters aber notwendig sind. Im Zweifelsfall sollten bei der Formulierung von LDAP lieber ein paar Klammern zu viel als zu wenig verwendet werden, um Fehlinterpretationen zu vermeiden.