Active Directory Cookbook by

Discussion

Många attribut i Active Directory består av bitflaggor. En bitflagga används ofta för att koda egenskaper om ett objekt i ett endaattribut. Till exempel är attributet groupType för group-objekt en bitflagga som används för att bestämma gruppens omfattning och typ.

Attributet userAccountControl för user– och computer-objekt används för att beskriva en hel rad egenskaper, inklusive kontostatus (dvs, aktiverad eller inaktiverad), kontolåsning, lösenord inte nödvändigt, smartkortsautentisering krävs osv.

Attributen searchFlags och systemFlags för attributeSchema-objekt definierar bland annat om ett attribut konstrueras, indexeras och inkluderas som en del av Ambiguous Name Resolution (ANR).

För att söka mot dessa typer av attribut måste du använda bitwisesearch-filter. Det finns två typer av bitvisa sökfilter som du kan använda, ett som representerar ett logiskt OR och ett som representerar logisktAND. Detta implementeras i ett sökfilter som en matchningsregel. En matchningsregel är helt enkelt ett sätt att informera LDAP-servern (i det här fallet en domänkontrollant) om att behandla en del av filtret annorlunda. Här är ett exempel på hur en matchningsregel ser ut:

(userAccountControl:1.2.840.113556.1.4.803:=514)

formatet är(attributename:MatchingRuleOID:=value).Som jag nämnde finns det två bitvisa matchningsregler som definieras av OID:er. Den logiska AND-matchningsregeln OID är1.2.840.113556.1.4.803 och den logiska OR-matchningsregeln OID är1.2.840.113556.1.4.804. Dessa OID:er instruerar servern att utföra särskild behandling av filtret. Ett logiskt OR-filter ger framgång om någon bit som anges i value lagras i attributename. Alternativt kommer det logiska AND-filtret att ge resultat om alla bitar som anges i value matchar värdet i attributename. Kanske kan ett exempel hjälpa till att klargöra detta.

För att skapa ett normalt användarkonto måste du sättauserAccountControl till 514. Siffran 514 beräknades genom att lägga till flaggan för det normala användarkontot på 512 tillsammans med flaggan för det inaktiverade kontot på 2 (512 + 2 = 514). Om du använder följande logiska OR-matchningsregel mot värdet 514, som visas här:

(useraccountcontrol:1.2.840.113556.1.4.804:=514)

så skulle alla normala användarkonton (flagga 512) ELLER inaktiverade konton (flagga 2) returneras. Detta skulle inkludera aktiverade användarkonton (från flagga 512), inaktiverade datorkonton (från flagga 2) och inaktiverade användarkonton (från flagga 2). I fallet userAccountControl kan flagga 2 gälla både användar- och datorkonton och därför skulle båda ingå i de returnerade posterna.

Ett sätt att se fördelarna med bitvisa matchningsregler är att de gör det möjligt att kombinera ett antal jämförelser till ett enda filter. Det kan faktiskt hjälpa att tänka att det tidigare OR-filtret som jag just visade också kan skrivas med två uttryck:

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

Som tidigare kommer detta att matcha userAccountControlattribut som innehåller antingen flaggorna 2 eller 512.

För logiskt AND gäller liknande principer. Istället för att alla bitar i flaggan är möjliga att matcha måste ALLA bitar i flaggan matcha för att det ska bli en framgång. Om vi ändrade vårt userAccountControl exempel till att använda logisk AND skulle det se ut så här:

(useraccountcontrol:1.2.840.113556.1.4.803:=514)

I det här fallet skulle endast normala användarkonton som också är inaktiverade returneras. Samma filter kan skrivas om med operatorn & i stället för | enligt följande:

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

En viktig finess att notera är att när du bara jämför ett enda bitflaggvärde skulle matchningsregeln logiskt OR och logiskt AND ge samma resultat. Så om vi vill hitta alla normala användarkonton kan vi söka på den enskilda bitflaggan 512 genom att använda något av följande:

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

Lämna ett svar

Din e-postadress kommer inte publiceras.