Назад | Перейти на главную страницу

Какой объектный класс подходит для объектов контроллера домена?

Работая над приложением, которое запрашивает в AD информацию о пользователях, я продолжал получать контроллеры домена как часть своих результатов.

Использование C # DirectorySearcher со следующим фильтром:

"(objectClass=User)"

Покопавшись, я заметил, что для наших контроллеров домена атрибут objectClass имеет значение:

top; person; organizationalPerson; user; computer

Это показалось мне странным. Однако у меня нет системы отсчета, и я не смог найти какую-либо конкретную документацию по этому поводу.

Может кто-нибудь посоветовать, правильно ли это выглядит, если нет, то что это должно быть. Также приветствуются любые документы / передовые методы / стандарты, касающиеся этого.

Технически вам нужно фильтровать по 2 значениям. Первый, objectCategory=Computer потому что контроллеры домена - это компьютер, как и любой другой, и, во-вторых, вам нужно фильтровать флаги на userAccountControl атрибут ищет серверы с ADS_UF_SERVER_TRUST_ACCOUNT флаг.

ADS_UF_SERVER_TRUST_ACCOUNT 0x1000 или 8192 в десятичной системе. Делая binary and для атрибутов активного каталога выполняется с помощью 1.2.840.113556.1.4.803 оператор. Итак, ваш запрос в конечном итоге будет выглядеть так:

(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))

Другой запрос для объектов контроллера домена, который может работать лучше, - (& (objectCategory = computer) (primaryGroupId = 516)). 521 для контроллеров домена только для чтения. Или для обоих: (& (objectCategory = компьютер) (| (primaryGroupId = 516) (primaryGroupId = 521)))

Вероятно, это не очень заметно в небольших доменах, однако в доменах с большим количеством компьютерных объектов запросы userAccountControl: могут занять очень много времени.

Если вы выполняете запрос для объекта сервера, который отображается на сайтах и ​​службах Active Directory, это будет: (objectCategory = server), а в основе должен быть контекст именования конфигурации.