2009-02-03 1 views
19

Как вы выполняете запрос хранилища LDAP с помощью sAMAccountName и домена? Что такое свойство домена, указанное в терминах Active Directory или LDAP?Запрос LDAP для Active Directory по имени sAMAccountName и домену

Это то, что у меня есть для фильтра. Я хотел бы иметь возможность добавлять в домене:

(&(objectCategory=Person)(sAMAccountName=BTYNDALL)) 

ответ

18

Во-первых, изменить ваш фильтр поиска, чтобы смотреть только для пользователей и не контактов:

(&(objectCategory=person)(objectClass=user)(sAMAccountName=BTYNDALL)) 

Вы можете перечислить все домены леса путем подключения к перегородке конфигурации и перечисления всех записей в разделах контейнер. К сожалению у меня нет кода C# прямо сейчас, но вот некоторые VBScript код, который я использовал в прошлом:

Set objRootDSE = GetObject("LDAP://RootDSE") 
AdComm.Properties("Sort on") = "name" 
AdComm.CommandText = "<LDAP://cn=Partitions," & _ 
    objRootDSE.Get("ConfigurationNamingContext") & ">;" & _ 
     "(&(objectcategory=crossRef)(systemFlags=3));" & _ 
      "name,nCName,dnsRoot;onelevel" 
set AdRs = AdComm.Execute 

Из того, что вы можете получить имя и dnsRoot каждого раздела:

AdRs.MoveFirst 
With AdRs 
    While Not .EOF 
    dnsRoot = .Fields("dnsRoot") 

    Set objOption = Document.createElement("OPTION") 
    objOption.Text = dnsRoot(0) 
    objOption.Value = "LDAP://" & dnsRoot(0) & "/" & .Fields("nCName").Value 
    Domain.Add(objOption) 
    .MoveNext 
    Wend 
End With 
+2

Операции «С» и «Пока» выглядят отвратительными. Я думаю, что написал это давным-давно, и мне не нужно было обновлять его, так как он просто работал ... – Dscoduc

+0

+1 и ответ. Это то, что я искал. Благодарю. – BuddyJoe

+0

Спасибо, я рад, что это помогло ... – Dscoduc

3

Если вы используете .NET, используйте класс DirectorySearcher. Вы можете передать свой домен в виде строки в конструктор.

// if you domain is domain.com... 
string username = "user" 
string domain = "LDAP://DC=domain,DC=com"; 
DirectorySearcher search = new DirectorySearcher(domain); 
search.Filter = "(SAMAccountName=" + username + ")"; 
+0

Так позволяет сказать, что мой Войти является COMPANY \ BTYNDALL как я просто предположим, что строка LDAP будет LDAP: // DC = компания, DC = com, потому что в моем случае это было бы неправильно, последним DC является DC = net. Есть ли способ поиска «коротких доменов» в AD и получения более длинного LDAP? – BuddyJoe

+0

или мне просто нужно создать таблицу поиска в моем приложении? – BuddyJoe

+0

См. Мой ответ ниже ... – Dscoduc

5

«Домен» не является свойством объекта LDAP. Это больше похоже на имя базы данных объекта хранится в

Таким образом, вы должны подключиться к правой базе данных. (В терминах LDAP: «привязка к домену/серверу каталогов») для того, чтобы выполните поиск в этой базе данных.

После того как вы успешно связались, ваш запрос в текущей форме - это все, что вам нужно.

BTW: Выбор "ObjectCategory=Person" более "ObjectClass=user" был хорошим решением. В AD первое является «индексированным свойством» с отличной производительностью, последнее не индексируется и немного медленнее.

+2

Для запросов пользователей в AD мне нравится использовать sAMAccountType = 805306368, поскольку это сужает ваш поиск и быстро – benPearce

7

наилучший способ поиска для пользователей: Адрес: (sAMAccountType=805306368).

Или для пользователей с ограниченными физическими возможностями:

(&(sAMAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=2))

Или для активных пользователей:

(&(sAMAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

Я нахожу LDAP как не так свет он должен был быть.

Также ресурс для common LDAP queries - попытка найти их самостоятельно, и вы будете драгоценным временем и определенно совершаете ошибки.

Что касается доменов: это невозможно в одном запросе, поскольку домен является частью пользователя distinguisedName (DN), который в Microsoft AD не может быть найден путем частичного согласования.

12

Вы можете использовать следующие запросы

пользователей, чей вход в систему Имя (Pre-Windows 2000) равно Джон

(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(sAMAccountName=**John**)) 

Все пользователи

(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)) 

Enabled Пользователи

(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(!userAccountControl:1.2.840.113556.1.4.803:=2)) 

Пользователи инвалидов

(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(userAccountControl:1.2.840.113556.1.4.803:=2)) 

LockedOut Пользователи

(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(lockouttime>=1)) 
+0

Удивительная ссылка +1 – BuddyJoe

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