active-directory - query - ldap search for group
Consulta LDAP de Active Directory por sAMAccountName y dominio (6)
"Dominio" no es propiedad de un objeto LDAP. Es más como el nombre de la base de datos en la que está almacenado el objeto.
Por lo tanto, debe conectarse a la base de datos correcta (en términos de LDAP: "enlazar al servidor de dominio / directorio" ) para realizar una búsqueda en esa base de datos.
Una vez que se haya enlazado correctamente, su consulta en su forma actual es todo lo que necesita.
Por cierto: Elegir "ObjectCategory=Person"
sobre "ObjectClass=user"
fue una buena decisión. En AD, el primero es una "propiedad indexada" con excelente desempeño, este último no está indexado y es un poco más lento.
¿Cómo se hace una consulta de una tienda LDAP por sAMAccountName y Domain? ¿Cuál es la propiedad de "dominio" nombrada en términos de Active Directory o LDAP?
Esto es lo que tengo para el filtro hasta ahora. Me gustaría poder agregar en el dominio:
(&(objectCategory=Person)(sAMAccountName=BTYNDALL))
Debes realizar tu búsqueda en el dominio:
http://msdn.microsoft.com/en-us/library/ms677934(VS.85).aspx Por lo tanto, básicamente, debe vincularse a un dominio para buscar dentro de este dominio.
Si usa .NET, use la clase DirectorySearcher . Puede pasar su dominio como una cadena al constructor.
// 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 + ")";
Primero, modifique su filtro de búsqueda para buscar solo usuarios y no contactos:
(&(objectCategory=person)(objectClass=user)(sAMAccountName=BTYNDALL))
Puede enumerar todos los dominios de un bosque conectándose a la partición de configuración y enumerando todas las entradas en el contenedor de particiones. Lo siento, no tengo ningún código de C # en este momento, pero aquí hay un código de vbscript que he usado en el pasado:
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
De eso puedes recuperar el nombre y el dnsRoot de cada partición:
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
La mejor forma de buscar usuarios es (sAMAccountType=805306368)
.
O para usuarios con discapacidades:
(&(sAMAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=2))
O para usuarios activos:
(&(sAMAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
Considero que LDAP no es tan liviano como se suponía que era.
También es un recurso para consultas LDAP comunes , tratando de encontrarlas usted mismo y tendrá un tiempo precioso y definitivamente cometerá errores.
En cuanto a los dominios: no es posible en una sola consulta porque el dominio forma parte del nombre distinguisedName
el usuario ( DN
) que, en Microsoft AD, no se puede buscar mediante la coincidencia parcial.
Puede usar las siguientes consultas
Usuarios cuyo nombre de inicio de sesión (Pre-Windows 2000) es igual a John
(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(sAMAccountName=**John**))
Todos los usuarios
(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370))
Usuarios habilitados
(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(!userAccountControl:1.2.840.113556.1.4.803:=2))
Usuarios discapacitados
(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(userAccountControl:1.2.840.113556.1.4.803:=2))
Usuarios de LockedOut
(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(lockouttime>=1))