Active Directory Cookbook by

Diskussion

Mange attributter i Active Directory er sammensat af bitflag. Et bitflag bruges ofte til at indkode egenskaber om et objekt i en enkeltattribut. F.eks. er groupType-attributten på group-objekter et bitflag, der bruges til at bestemme gruppens omfang og type.

Attributten userAccountControluser– og computer-objekter bruges til at beskrive en hel række egenskaber, herunder kontostatus (dvs, aktiveret eller deaktiveret), kontolåsning, password ikke påkrævet, smartcard-godkendelse påkrævet osv.

Attributterne searchFlags og systemFlagsattributeSchema-objekter definerer bl.a., om en attribut er konstrueret, indekseret og inkluderet som en del af Ambiguous Name Resolution (ANR).

For at søge på disse typer attributter skal du bruge bitwisesearch-filtre. Der er to typer bitvise søgefiltre, du kan bruge, et der repræsenterer en logisk OR og et der repræsenterer logiskAND. Dette implementeres i et søgefilter som en matchningsregel. En matchningsregel er simpelthen en måde at informere LDAP-serveren (i dette tilfælde en domænecontroller) om at behandle en del af filteret forskelligt. Her er et eksempel på, hvordan en matchningsregel ser ud:

(userAccountControl:1.2.840.113556.1.4.803:=514)

formatet er(attributename:MatchingRuleOID:=value).Som nævnt er der to bitvise matchningsregler, som er defineret af OID’er. Den logiske AND-matchingsregel OID er1.2.840.113556.1.4.803 og den logiske OR-matchingsregel OID er1.2.840.113556.1.4.804. Disse OID’er giver serveren besked om at foretage en særlig behandling af filteret. Et logisk OR-filter giver en succes, hvis en bit, der er angivet med value, er gemt i attributename. Alternativt vil det logiske AND-filter returnere en succes, hvis alle de bits, der er angivet ved value, svarer til værdien i attributename. Måske kan et eksempel hjælpe med at tydeliggøre dette.

For at oprette en normal brugerkonto skal du indstilleuserAccountControl til 514. Tallet 514 blev beregnet ved at lægge flag for normal brugerkonto på 512 sammen med flag for deaktiveret konto på 2 (512 + 2 = 514). Hvis du bruger følgende logiske OR-matchingsregel i forhold til 514-værdien, som vist her:

(useraccountcontrol:1.2.840.113556.1.4.804:=514)

så vil alle normale brugerkonti (flag 512) ELLER deaktiverede konti (flag 2) blive returneret. Dette vil omfatte aktiverede brugerkonti (fraflag 512), deaktiverede computerkonti (fra flag 2) og deaktiverede brugerkonti (fra flag 2). I tilfælde af userAccountControl kan flag 2 gælde for både bruger- og computerkonti, og derfor vil begge dele blive inkluderet i de returnerede poster.

En måde at se fordelene ved bitvise matchningsregler på er, at de giver dig mulighed for at kombinere en række sammenligninger i et enkelt filter. Det kan faktisk hjælpe at tænke på, at det tidligere OR-filter, som jeg lige viste, også kunne skrives ved hjælp af to udtryk:

(|(useraccountcontrol:1.2.840.113556.1.4.804:=2) (useraccountcontrol:1.2.840.113556.1.4.804:=512))

Som før vil dette matche userAccountControlattributter, der indeholder enten 2 eller 512-flagene.

For logisk AND gælder lignende principper. I stedet for at alle bits i flaget kan være et muligt match, skal ALLE bits i flaget være matchet, for at det giver et positivt resultat. Hvis vi ændrede vores eksempel userAccountControl til at bruge logisk AND, ville det se således ud:

(useraccountcontrol:1.2.840.113556.1.4.803:=514)

I dette tilfælde ville kun normale brugerkonti, der også er deaktiveret, blive returneret. Det samme filter kan omskrives ved at bruge operatoren& i stedet for | som i følgende:

(&(useraccountcontrol:1.2.840.113556.1.4.803:=2) (useraccountcontrol:1.2.840.113556.1.4.803:=512))

En vigtig detalje er, at når du kun sammenligner en enkelt bit-flag-værdi, vil den logiske OR- og logiske AND-matchende regel give det samme resultat. Så hvis vi ønskede at finde alle normale brugerkonti, kunne vi søge på det enkelte bitflag på 512 ved hjælp af en af følgende:

(useraccountcontrol:1.2.840.113556.1.4.803:=512)(useraccountcontrol:1.2.840.113556.1.4.804:=512)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.