Active Directory Cookbook by
Dyskusja
Wiele atrybutów w Active Directory składa się z flag bitowych. Flaga bitowa jest często używana do kodowania właściwości o obiekcie w pojedynczym atrybucie. Na przykład atrybut groupType
na obiektachgroup
jest flagą bitową, która jest używana do określenia zakresu i typu grupy.
Atrybut userAccountControl
na obiektachuser
i computer
jest używany do opisania całej serii właściwości, w tym accountstatus (tzn, włączone lub wyłączone), blokada konta, niewymagane hasło, wymagane uwierzytelnienie za pomocą karty inteligentnej itp.
Atrybuty searchFlags
i systemFlags
na obiektach attributeSchema
definiują między innymi, czy atrybut jest konstruowany, indeksowany i włączany jako część Rozdzielczości Nazw Niejednoznacznych (ANR).
Aby wyszukiwać w tego typu atrybutach, musisz użyć filtrów wyszukiwania bitowego. Istnieją dwa typy filtrów wyszukiwania bitowego, których można użyć, jeden, który reprezentuje logiczne OR i jeden, który reprezentuje logiczneAND. Jest to zaimplementowane w filtrze wyszukiwania jako reguła dopasowania. Reguła dopasowania jest po prostu sposobem informowania serwera LDAP (w tym przypadku kontrolera domeny), aby traktował część filtru w inny sposób. Oto przykład tego, jak wygląda reguła dopasowania:
(userAccountControl:1.2.840.113556.1.4.803:=514)
Format jest następujący(attributename
:MatchingRuleOID
:=value
).Jak już wspomniałem, istnieją dwie bitowe reguły dopasowania, które są zdefiniowane przez OID. Logiczna reguła dopasowania AND OID to1.2.840.113556.1.4.803, a logiczna reguła dopasowania OR OID to1.2.840.113556.1.4.804. Te OID instruują serwer do wykonania specjalnego przetwarzania na filtrze. Filtr logicznego OR zwróci sukces, jeśli jakikolwiek bit określony przez value
, jest przechowywany w attributename
. Alternatywnie, filtr logiczny AND zwróci sukces, jeśli wszystkie bity określone przez value
, pasują do wartościattributename
. Być może przykład pomoże to wyjaśnić.
Aby utworzyć normalne konto użytkownika, musisz ustawićuserAccountControl
na 514. Liczba 514 została obliczona przez dodanie flagi normalnego konta użytkownika o wartości 512 wraz z flagą konta niepełnosprawnego o wartości 2 (512 + 2 = 514). Jeśli użyjesz następującej logicznej reguły dopasowania OR względem wartości 514, jak pokazano tutaj:
(useraccountcontrol:1.2.840.113556.1.4.804:=514)
to zwrócone zostaną wszystkie normalne konta użytkowników (flaga 512) LUB konta wyłączone (flaga2). Obejmowałoby to włączone konta użytkowników (z flagi 512), wyłączone konta komputerów (z flagi 2) i wyłączone konta użytkowników (z flagi 2). W przypadkuuserAccountControl
, flaga 2 może odnosić się zarówno do kont użytkowników jak i komputerów, a zatem dlaczego oba te konta byłyby zawarte w zwróconych wpisach.
Jednym ze sposobów dostrzeżenia korzyści płynących z reguł dopasowywania bitowego jest to, że pozwalają one na połączenie kilku porównań w jeden filtr. W istocie, może pomóc myśl, że poprzedni filtr OR, który właśnie pokazałem, może być również napisany przy użyciu dwóch wyrażeń:
(|(useraccountcontrol:1.2.840.113556.1.4.804:=2) (useraccountcontrol:1.2.840.113556.1.4.804:=512))
Tak jak poprzednio, to dopasuje userAccountControl
atrybuty, które zawierają albo flagi 2 albo 512.
Dla logicznego AND, stosuje się podobne zasady. Zamiast każdego z bitów we fladze jako możliwego dopasowania, WSZYSTKIE bity we fladze muszą być dopasowane, aby zwrócić sukces. Gdybyśmy zmienili nasz przykładuserAccountControl
na logiczne AND, wyglądałby on następująco:
(useraccountcontrol:1.2.840.113556.1.4.803:=514)
W tym przypadku zwrócone zostałyby tylko normalne konta użytkowników, które są również wyłączone. Ten sam filtr może być przepisany przy użyciu operatora&
zamiast |
, jak w poniższym przykładzie:
(&(useraccountcontrol:1.2.840.113556.1.4.803:=2) (useraccountcontrol:1.2.840.113556.1.4.803:=512))
Ważną subtelnością, którą należy zauważyć jest to, że kiedy porównujemy tylko jedną wartość bitową flagi, logiczne OR i logiczne AND zwrócą ten sam wynik. Tak więc, jeśli chcielibyśmy znaleźć wszystkie normalne konta użytkowników, moglibyśmy szukać na pojedynczym bicie flagi 512 używając jednego z poniższych sposobów:
(useraccountcontrol:1.2.840.113556.1.4.803:=512)(useraccountcontrol:1.2.840.113556.1.4.804:=512)