LDAP-запросы через URL - PullRequest
       4

LDAP-запросы через URL

5 голосов
/ 04 февраля 2011

Я пытаюсь сделать запросы LDAP через Visual Basic. У меня нет доступа администратора к Active Directory, но я могу просматривать все объекты пользователя. Я не знаю, какие ограничения существуют при поиске в каталоге через LDAP: // запросы.

В приложении Excel, которое я создаю, у меня есть столбец для ввода идентификаторов пользователей. Когда пользователь вводит идентификатор пользователя, я бы хотел, чтобы другие столбцы автоматически заполнялись на основе серверной информации, связанной с этим пользователем (например, адрес электронной почты)

Допустим, c.Value - это значение идентификатора пользователя, которое было введено в электронную таблицу:

strUser = "CN=" & <em>c.Value</em> & ",OU=User Accounts,<em>OU=Area</em>,OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk/"<br/>
Set objUser = GetObject("LDAP://" & strUser)

Проблема в том, что если OU = Area известна, поиск успешен. Тем не менее, я бы хотел, чтобы запрос проверял все OU области для идентификатора пользователя. Насколько я могу судить, они не проводятся и не отражаются в центральном месте. Можно ли использовать подстановочные знаки в таком запросе?

Есть ли у кого-нибудь другие идеи или предложения относительно альтернативных способов решения этой проблемы?

Спасибо,

Tom

Ответы [ 2 ]

5 голосов
/ 04 февраля 2011

Прежде чем я отвечу на ваш вопрос, вот некоторые базовые знания об Active Directory.

  • Пользовательские объекты в Active Directory содержат ряд атрибутов.
  • CN является одним из атрибутов объекта пользователя. Оно не всегда совпадает с вашим логином.
  • samAccountName - это строка с именем входа до Windows 2000. Это, вероятно, то, что вы ищете.
  • объекты хранятся иерархически. Пользовательский объект может быть помещен в OU или контейнер

Чтобы выполнить запрос LDAP, вам необходимо использовать объект подключения ADO. Вам необходимо передать строку запроса LDAP объекту подключения ADO. Строка запроса LDAP состоит из четырех частей.

  • Корневой путь, с которого мы начинаем поиск.
  • Фильтр LDAP
  • Возвращенные атрибуты
  • Область поиска

Строка запроса LDAP, которую вы должны использовать, должна выглядеть примерно так:

<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=yourusername));adspath;subtree
  • Корневой путь в приведенном выше примере - <LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>. Это означает, что начать поиск на этом уровне
  • Поскольку вы ищете пользователя, фильтр LDAP имеет значение (&(objectClass=user)(samAccountName=yourusername)). Конечно, вам нужно заменить yourusername на что-то другое внутри вашего кода. Если вы действительно хотите выполнить поиск по CN, измените его на CN здесь
  • Возвращенные атрибуты - это специальный атрибут adspath, который позволяет связывать этот объект позже
  • Я предполагаю, что вы пытаетесь найти все объекты пользователя в одном домене. Итак, ваш поиск должен быть subtree

Вот полный пример, который, я думаю, должен выполнять вашу работу

userName = "harvey"
ldapStr = "<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=" & userName & "));adspath;subtree

Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
Set rs = conn.Execute(ldapStr)

While Not rs.EOF
   wscript.echo rs.Fields(0)
   rs.MoveNext
Wend
0 голосов
/ 04 февраля 2011

Возможно, вы видите права доступа анонимного стиля. Таким образом, вы можете прочитать некоторые атрибуты по умолчанию. Что вы хотите сделать, так это убедиться, что вы аутентифицированы как пользователь с достаточными правами для чтения интересующих вас данных.

Если идентификатор пользователя действительно является именем пользователя Pre-Windows 2000 (имя пользователя sAMAccountName), найдите полный DN пользователя, у которого sAMAccountName = c.Value.

Кстати, очень хорошо, что CN = - это не короткое имя, а скорее какая-то версия имен и фамилий людей, которая является шаблоном ADUC MMC по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...