
Я написал код для извлечения информации о пользователях с сервера Active Directory. Предположим, что сервер Active Directory имеет узлы, каждый из которых является другой установкой Active Directory в другом географическом местоположении. Например: один сервер AD в США и другой в Австралии с корневым сервером AD в США, причем первые два являются узлами.
Будут ли работать фильтрующие запросы, которые я пишу для поиска пользователей по географическим местоположениям, если я запущу их на корневом сервере AD? Запрос, который я использую, это
(|(objectClass=user)(objectClass=person)(objectClass=inetOrgPerson))
Я не могу на самом деле проверить этот сценарий, но мне нужно знать, что здесь произойдет.
решение1
AD — это распределенная и многопользовательская база данных. В общем, вы можете запросить любой контроллер домена о пользователе и получить тот же ответ в любом из контроллеров домена (узлов).
В AD вы можете настроить репликацию изменений данных между серверами, так что если пользователь изменит какой-то атрибут в Австралии, и вы запросите какие-то данные на сервере в Нью-Йорке, возможно, вы получите разные ответы. Администратор домена может рассказать вам о репликации времени в домене.
После того, как репликация произойдет, у вас будет та же информация в любом из DC. Обычно время репликации составляет около минут, но в некоторых случаях оно установлено только 1 или 2 раза в день.
Надеюсь, я ответил на ваш вопрос.
решение2
Ваша терминология WRT Active Directory не точна. Есть две проблемы, которые я вижу для вас:
- Запрос ближайшей копии AD
- Понимание поведения запросов в многодоменной среде
Глобальный каталог поддерживает подмножество содержимого всех доменов в лесу. Если вы используете термин «узел» для обозначения разрозненных доменов, запросы к глобальному каталогу позволят вам запросить все домены в лесу в одном запросе (предполагая, что атрибуты, которые вы ищете, являются частью подмножества, реплицированного в GC).
Расположение физически близкого DC достигается с помощью комбинации DNS и LDAP-запросов. Поиск в Google по запросу "dns ldap find nearest domain controller" возвращает несколько хороших первых шагов (Поиск ближайшего контроллера домена через LDAP).
Если вы разрабатываете на Windows, вы можете получить местоположение контроллера домена «бесплатно» с помощью API ADSI.
решение3
Здесь не совсем понятно, что вы подразумеваете под термином «узел».
- Один домен Active Directory с несколькими географически распределенными контроллерами домена?
- Единый домен с организационными единицами, содержащими пользователей и компьютеры для каждого географического местоположения?
- Несколько доменов, представляющих различные региональные офисы компании?
Пока вы запрашиваете контроллеры доменатого же домена, вы получите тот же ответна тот же запросни от одного из них (за исключением проблем репликации).
Но если у вас несколько доменов или вы хотите запросить определенные поддеревья (OU) заданного домена, вы получите разные ответы.
решение4
ru уверен, что вы хотите оператор "ИЛИ" "|" в запросе, это не имеет смысла. Также вы приравниваете узлы к доменам?
также ниже приведен пример, в котором вам не нужен код для тестирования.
dsquery * domainroot -filter (|(objectClass=user)(objectClass=person)(objectClass=inetOrgPerson))" -attr *
но как я уже сказал, оператор «ИЛИ» не имеет смысла.
странно, я нашел ошибку в коде ответа serverfaults, будет странно, если после этого она исчезнет