2012-06-13 2 views
0

Я использую следующий запрос, чтобы найти группы каждого пользователя является членом:Обобщить LDAP запроса для групп

(&(objectClass=group)(|(member=cn=UID,OU=ServiceAccounts,OU=MC,DC=ads,DC=myCompany,DC=com,DC=au)(member=cn=UID,OU=BTLY,OU=Sites,OU=MC,DC=ads,DC=myCompany,DC=com,DC=au)))

Этого запрос работы и выполняется с использованием следующего Base DN:

OU=MC,DC=ads,DC=myCompany,DC=com,DC=au

у меня есть несколько проблем с запросом:

  • Мне не нравится использовать оператор OR для поиска пользователей учетной записи службы и пользователей BTLY.
  • Я не хочу жестко кодировать сайт BTLY, есть и другие.

В идеале, я бы хотел, чтобы запрос как:

(&(objectClass=group)(|(member=cn=UID,OU=MC,DC=ads,DC=myCompany,DC=com,DC=au))

Таким образом, я не забочусь учетная запись пользователя, является ли учетная запись службы, ни какой сайт принадлежит учетная запись к. К сожалению, этот запрос не работает.

Может кто-нибудь, пожалуйста, помогите мне обобщить запрос LDAP? Я немного новичок, поэтому, скорее всего, я пропустил что-то совершенно очевидное!

Спасибо!


Благодарим за ответ. То, что вы сказали, имеет смысл, но это, к сожалению, мне не помогает. Мы используем GlassFish (сервер приложений Java) и настроили его на локальный сервер AD. Как правило, человек может сказать GlassFish, как получить пользователь, например

(&(objectCategory=user)(CN=UID))

и GlassFish подберет все группы (возможно, с помощью атрибута memberOf).

На этот раз мы используем другой сервер AD, на котором размещается другой каталог пользователей. GlassFish не может извлекать группы самостоятельно. Итак, есть поле, где мы можем предоставить GlassFish собственный запрос для поиска групп. В этом поле я поставил запрос, который я опубликовал, который работает, но является уродливым и многословным.

То, что я хотел бы быть в состоянии сделать это:

(&(objectClass=group)(member=cn=UID))

, но это не работает.

Есть ли все равно для этого?

Thanks, Muel.

ответ

0

Мое предположение заключается в том, что использование этой техники невозможно. Вы должны были бы использовать подстановочные здесь:

(&(objectCategory=group)(member=CN=UID,*)) 

и это не приемлемо для атрибутов DN (например, тем, что хранится в свойстве «член»):

http://msdn.microsoft.com/en-us/library/ms676930(v=vs.85).aspx

Мое предложение здесь было бы: используйте некоторый инструмент для генерации «уродливого» запроса для вас (используя синтаксис, упомянутый выше) и «подайте» ваш инструмент с конечным результатом. Не вижу никакого варианта, извините ...

+0

Удивительно, я пробовал подстановочный знак вчера без успеха. Я также попытался использовать подзапрос, который тоже не работает. С тех пор я читал, что LDAP не поддерживает такие запросы. Спасибо за ссылку MS, хорошо читать что-то окончательное! Я оставлю этот вопрос открытым лишь немного дольше на offshance .... :) – Muel

0

Я просто попытаюсь переформулировать ваш вопрос, но это для текста для комментария.

Вы пытаетесь найти все группы, в которых пользователь CN=UID относится к началу деятельности с нуля. OU=MC,DC=ads,DC=myCompany,DC=com,DC=au.

Это можно сделать, восстановив атрибут memberOf самого пользователя. Единственная проблема (возможно, не в вашем случае) заключается в том, что первичная группа отсутствует в этом списке DN, это закодированное приложение, используя атрибут primaryGroupId.

так

(&(objectCategory=user)(CN=UID)) 

будет делать тест задания:

ldifde -f t.ldf -D "OU=MC,DC=ads,DC=myCompany,DC=com,DC=au" -r "(&(objectCategory=user)(CN=UID))" -l memberof 

Примечание: samAccountName или userPrincipalName атрибуты вы можете положиться на уникальность вступления в Актив-каталог, который не является случай CN (администратор может его изменить)

Смежные вопросы