What is LDAP 'or-operator'?

Forstå LDAP-filtre: En Komplet Guide

27/09/2021

Rating: 4.21 (12150 votes)

At navigere og søge i store katalogtjenester som Active Directory kan være en kompleks opgave uden de rette værktøjer. Her kommer LDAP-filtre ind i billedet. Et LDAP-filter er en streng, der definerer specifikke kriterier for at finde objekter i et LDAP-katalog. Uanset om du er systemadministrator, udvikler eller blot nysgerrig, er en solid forståelse af LDAP-filtres syntaks afgørende for effektivt at kunne forespørge og administrere data. Denne artikel vil guide dig gennem alt fra de grundlæggende principper til avancerede teknikker, så du kan konstruere præcise og effektive søgninger.

Can LDAP filters be combined using Boolean operators?
Filters can be combined using boolean operators when there are multiple search conditions: For example, to select objects with cn equal to Jon and sn (surname/last name) equal to Brian: The LDAP filter specification assigns special meaning to the following characters:
Indholdsfortegnelse

Grundlæggende Syntaks for LDAP-filtre

Kernen i et LDAP-filter er dets syntaks. Hvert filter består af et eller flere kriterier, som er omsluttet af parenteser. Den grundlæggende struktur for et simpelt søgekriterium er (attribut=værdi). Her er 'attribut' navnet på det felt, du vil søge i (f.eks. cn for Common Name), og 'værdi' er den data, du leder efter.

For eksempel, hvis du vil finde en bruger med det almindelige navn 'Jens Jensen', vil dit filter se således ud:

(cn=Jens Jensen)

Det er vigtigt at bemærke, at hele filterudtrykket altid skal være omsluttet af et ydre sæt parenteser. Hvis du kombinerer flere kriterier, bruges en speciel notation kendt som 'polsk notation' eller præfiksnotation, hvor den logiske operator placeres før operanderne (kriterierne).

Logiske Operatorer: Kombinering af Kriterier

Når du har brug for at specificere mere end ét kriterium, kan du kombinere dem ved hjælp af logiske operatorer. De tre primære operatorer er AND, OR og NOT.

AND (&)

AND-operatoren bruges, når alle specificerede betingelser skal være opfyldt. Syntaksen er (&(kriterium1)(kriterium2)...). Forestil dig, at du vil finde alle brugere i 'Salg'-afdelingen, som også har efternavnet 'Hansen'. Filteret ville være:

(&(department=Salg)(sn=Hansen))

OR (|)

OR-operatoren bruges, når mindst én af de specificerede betingelser skal være opfyldt. Syntaksen er (|(kriterium1)(kriterium2)...). Hvis du for eksempel vil finde alle objekter, der enten er en bruger eller en computer, kan du bruge:

(|(objectClass=user)(objectClass=computer))

NOT (!)

NOT-operatoren bruges til at negere et kriterium, dvs. at finde objekter, hvor betingelsen ikke er opfyldt. Syntaksen er (!(kriterium)). Hvis du vil finde alle brugere, undtagen en bruger ved navn 'admin', vil filteret se således ud:

(&(objectClass=user)(!(sAMAccountName=admin)))

Disse operatorer kan også indlejres for at skabe komplekse forespørgsler. For eksempel, for at finde alle brugere i 'IT'- eller 'Support'-afdelingen, som ikke har en deaktiveret konto:

(&(|(department=IT)(department=Support))(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

Sammenligningsoperatorer og Søgekriterier

Ud over simpel lighed (=) understøtter LDAP en række andre sammenligningsoperatorer, der giver mere fleksibilitet i dine søgninger.

What are some examples of LDAP search filters?
The following table lists some examples of LDAP search filters. All objects. All user objects but "andy". All objects with a surname that starts with "sm". All contacts with a surname equal to "Smith" or "Johnson". These search filters use one of the following formats. or The ADSI search filters are used in two ways.

Tabel over Sammenligningsoperatorer

OperatorBetydningEksempel
=Lig med(sn=Jensen)
>=Større end eller lig med(logonCount>=100)
<=Mindre end eller lig med(pwdLastSet<=133000000000000000)
~=Omtrent lig med (ofte behandlet som = i AD)(displayName~=Hansen)
=*Tilstedeværelse (attributten eksisterer)(mail=*)
!(=*)Fravær (attributten eksisterer ikke)(!(proxyAddresses=*))

Brug af Wildcards og Specialtegn

Wildcards er ekstremt nyttige til at søge efter delvise strenge. Stjernen (*) er det primære wildcard-tegn i LDAP-filtre.

  • Slutter med: For at finde alle med et efternavn, der ender på 'sen', brug (sn=*sen).
  • Starter med: For at finde alle med et fornavn, der starter med 'Kar', brug (givenName=Kar*).
  • Indeholder: For at finde alle, hvis titel indeholder ordet 'Manager', brug (title=*Manager*).

Nogle tegn har en speciel betydning i LDAP-filtre (f.eks. *, (, ), \). Hvis du har brug for at søge efter disse tegn som en del af en værdi, skal de "escapes" ved at bruge en backslash (\) efterfulgt af tegnets to-cifrede hexadecimale ASCII-kode.

Eksempel: For at finde et objekt, hvis navn er 'Salg (DK)', skal filteret være:

(cn=Salg \28DK\29)

Avancerede Søgninger: Bitwise Operatorer

Nogle attributter, især i Active Directory, er bitfelter, hvor hver bit repræsenterer en bestemt indstilling eller flag. Et almindeligt eksempel er userAccountControl-attributten. For at søge baseret på specifikke bits kan du bruge en speciel syntaks med matchende regler (Matching Rule OIDs).

Syntaksen er: (attribut:matching-rule-OID:=værdi)

  • LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803): Finder objekter, hvor alle bits i den angivne værdi er sat i attributten.
  • LDAP_MATCHING_RULE_BIT_OR (1.2.840.113556.1.4.804): Finder objekter, hvor mindst én af bitsene i den angivne værdi er sat i attributten.

Eksempel: For at finde alle deaktiverede brugerkonti er flaget ADS_UF_ACCOUNTDISABLE, som har værdien 2. Filteret bliver:

(userAccountControl:1.2.840.113556.1.4.803:=2)

For at finde alle brugere, hvis adgangskode aldrig udløber (værdi 65536):

(userAccountControl:1.2.840.113556.1.4.803:=65536)

Disse bitwise-søgninger er meget kraftfulde til at filtrere på komplekse statusattributter uden at skulle kende den samlede værdi af hele feltet.

Praktiske Eksempler på LDAP-filtre

Her er en samling af nyttige filtre til almindelige administrative opgaver i Active Directory.

How do LDAP filters work?
LDAP filters consist of one or more criteria. If one than more criterion exist in one filter definition, they can be concatenated by logical AND or OR operators. The logical operators are always placed in front of the operands (i.e. the criteria). This is the so-called ' Polish Notation '.
  • Find alle brugere i en bestemt gruppe (inklusive indlejrede grupper):
    (&(objectCategory=Person)(sAMAccountName=*)(memberOf:1.2.840.113556.1.4.1941:=cn=Gruppenavn,ou=Grupper,dc=domæne,dc=com))
    Denne syntaks bruger den specielle 'in-chain' matchende regel til at gennemgå indlejret gruppemedlemskab.
  • Find alle aktive brugere (ikke deaktiverede):
    (&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
  • Find alle brugere, der skal ændre adgangskode ved næste login:
    (&(objectCategory=person)(objectClass=user)(pwdLastSet=0))
  • Find alle computere, der ikke er deaktiverede:
    (&(objectCategory=computer)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
  • Find alle sikkerhedsgrupper (ikke distributionsgrupper):
    (&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648))
  • Find alle grupper uden medlemmer:
    (&(objectCategory=group)(!(member=*)))

Ofte Stillede Spørgsmål (FAQ)

Hvad er forskellen på objectClass og objectCategory?

Selvom de kan virke ens, er der en vigtig forskel. objectClass er en flerværdi-attribut, der beskriver alle klasser, et objekt tilhører (f.eks. top, person, organizationalPerson, user). objectCategory er en enkeltværdi-attribut, som er indekseret og peger på den mest specifikke klasse. I Active Directory-miljøer er det næsten altid mere effektivt at bruge objectCategory i dine filtre, da det giver hurtigere søgninger. For eksempel er (objectCategory=person) hurtigere end (objectClass=user).

Hvorfor virker mit filter med wildcards på 'memberOf' ikke?

Attributter som 'memberOf' og 'distinguishedName' har en speciel syntaks (DN-String). LDAP-standarden tillader ikke brug af wildcards på attributter af denne type. I stedet for at forsøge noget som (memberOf=*CN=Salg*), skal du bruge den fulde Distinguished Name (DN) for gruppen. Hvis du har brug for at finde medlemmer af indlejrede grupper, skal du bruge den specielle 'in-chain' operator som vist i eksemplerne ovenfor.

Er der forskel på store og små bogstaver i LDAP-filtre?

For de fleste streng-attributter i Active Directory er der ikke forskel på store og små bogstaver. En søgning på (sn=Jensen) vil finde 'Jensen', 'jensen' og 'JENSEN'. Dog kan der være undtagelser, især i andre LDAP-implementeringer eller for specifikke attribut-typer som binære værdier. For booleske attributter skal du bruge 'TRUE' eller 'FALSE' med store bogstaver.

Hvordan finder jeg objekter, der er blevet ændret for nylig?

Du kan bruge attributten whenChanged med en dato i Generalized Time-format (YYYYMMDDHHMMSS.0Z). For eksempel, for at finde alle objekter, der er ændret efter 1. juni 2024, ville filteret være:

(whenChanged>=20240601000000.0Z)

Dette er nyttigt til revisions- og synkroniseringsformål.

Hvis du vil læse andre artikler, der ligner Forstå LDAP-filtre: En Komplet Guide, kan du besøge kategorien Teknologi.

Go up