Подтвердить что ты не робот

Запрос LDAP для Active Directory по имени и домену SAMAccountName

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

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

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

Ответ 1

Сначала измените свой фильтр поиска, чтобы искать только пользователей, а не контактов:

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

Вы можете перечислить все домены леса, подключившись к разделу конфигурации и перечислив все записи в контейнере разделов. Извините, у меня сейчас нет кода на С#, но вот код 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

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

Пользователи, чье имя входа (Pre-Windows 2000) равно John

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

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

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

Включенные пользователи

(&(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))

Ответ 3

лучший способ поиска пользователей (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 не настолько легким, как предполагалось.

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

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

Ответ 4

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

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

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

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

Ответ 5

Вы должны выполнить поиск в домене:

http://msdn.microsoft.com/en-us/library/ms677934(VS.85).aspx Таким образом, в основном вы должны привязываться к домену для поиска внутри этого домена.

Ответ 6

Если вы используете .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 + ")";