LDAP: синтаксис запроса

Я практически забыл все, что когда-либо знал о запросах к AD, и теперь мне нужно получить список пользователей в одном конкретном отделе (DAAS). Я определил, что существует организационное подразделение под названием DAAS. Я просто не могу понять, как ограничить список этой OU.

Эта строка работает, но возвращает всю организацию;

strQueryDL = "<LDAP://" & strDefaultNamingContext & ">;(&(objectCategory=person)(objectClass=user));distinguishedName;subtree"

Эта строка не работает;

strQueryDL = "<LDAP://" & strDefaultNamingContext & ">;(&(objectCategory=person)(objectClass=user)(OU=DAAS));distinguishedName;subtree"

Эта строка тоже не работает;

strQueryDL = "<LDAP://OU=DAAS" & strDefaultNamingContext & ">;(&(objectCategory=person)(objectClass=user));distinguishedName;subtree"

Какое место в этой строке занимает этот проклятый OU?

Спасибо! ОКРУГ КОЛУМБИЯ


person DaveInAZ    schedule 30.01.2019    source источник


Ответы (2)


Записи не обязательно должны содержать атрибут OU только потому, что он находится где-то в их DN. От них требуется только, чтобы в них было значение RDN. Если это не имеет смысла, см. ниже‹\a>.

Вы можете узнать DN всех поддеревьев, чье dn начинается с ou=daas с помощью

strQueryDL = "<LDAP://" & strDefaultNamingContext & ">;(&(objectCategory=organizationalunit)(OU=DAAS));distinguishedName;subtree"

Получив это, вы можете использовать это DN, где у вас есть strDefaultNamingContext.

Существует также расширяемая форма поиска, которая может указать, что поиск должен выполняться по DN, а не по атрибутам, но я не знаю, работает ли она в AD. Если это работает в AD, эта форма будет выглядеть так:

strQueryDL = "<LDAP://" & strDefaultNamingContext & ">;(&(objectCategory=person)(objectClass=user)(OU:dn:=DAAS));distinguishedName;subtree"

DN состоит из набора компонентов DN. Каждый компонент представляет собой пару значений атрибутов, соединенных с помощью =. Вы можете соединять компоненты на одном уровне с помощью +, но обычно вы просто связываете их с помощью ,. Компоненты одного уровня неупорядочены. Бит от начала DN до , является RDN и должен быть представлен в записи. Все остальное в DN является высшим DN. Если запись не является записью верхнего уровня в своем дереве, вышестоящее DN должно быть представлено собственной записью, но ни одно из этих значений не должно быть в подчиненных записях.

Что именно все это означает, это еще один вопрос, и его задавали раньше несколько раз, и я просматриваю разные, чтобы выяснить, какой из них имеет лучший ответ ... или мне следует отправить ответ. Как только я закончу этот поиск, я заменю этот текст ссылкой.

person Ed Grimm    schedule 31.01.2019
comment
Спасибо! Я не понимаю первое предложение (оно было слишком длинным), но строка поиска, которую вы мне дали, сработала. На самом деле это дало мне 8 результатов, поэтому мне пришлось выяснить, какой из них использовать, но я добился своего. Сюрпризом стало то, что в DAAS есть User OU, но в Users есть и DAAS OU. Сценарий, который я нашел в другом месте, показал мне это. - person DaveInAZ; 31.01.2019

Вы были на правильном пути с последним, но, вероятно, просто пропустили запятую после OU (если OU находится в корне домена).

Но если вы уже знаете distinguishedName организационной единицы, вы можете просто использовать ее напрямую. Дело в том, что строка должна выглядеть примерно так (при условии, что DN OU равен domain.com/DAAS):

strQueryDL = "<LDAP://OU=DAAS,DC=domain,DC=com>;(&(objectCategory=person)(objectClass=user));distinguishedName;subtree"

Ответ Эда Гримма показывает вам, как найти саму OU, что поможет вам получить DN OU, если вы его еще не знаете.

person Gabriel Luci    schedule 31.01.2019
comment
Спасибо! Вы, конечно, были правы насчет пропущенной запятой, но просто исправить ее было недостаточно. Мне не хватало необходимой информации для построения строки поиска. Ответ Эда Гримма касался этого. Итак, я смог преодолеть это препятствие. - person DaveInAZ; 31.01.2019