2011-05-18 629 views
6

¿Cómo se filtra una consulta LDAP de Active Directory a grupos que contienen el usuario autenticado/encuadernado (o cualquier usuario)? Esto funciona bien:¿Cómo se filtra una consulta LDAP para grupos que contienen un usuario específico?

(&(objectClass=group)(member=*)) 
>>> lots of results 

Pero no puede ir más detalle:

(&(objectClass=group)(member=*S*)) 
>>> nothing 

El MSDN menciona el uso de un filtro de la siguiente manera:

(member:1.2.840.113556.1.4.1941:=(cn=user1,cn=users,DC=x)) 

Pero incluso ignorando el loca hyper magic number involucrado en eso, siempre obtengo 0 resultados cuando trato de filtrar con eso (incluso reemplazando cn=user1,cn=users,DC=x con mi propio distinguishedName, incluso re colocándolo con *).

+0

La página de MSDN Filtro de búsqueda Sintaxis vinculado en @ respuesta de JPBlanc abajo * listas * el número mágico hiper loco, pero no lo hace * explican * se . La * explicación * es que es un nodo en el estándar oscuro [OID] (https://en.wikipedia.org/wiki/Object_identifier) ​​administrado por ISO y ITU-T, de los cuales LDAP es [uno de los pocos] usos destacados] (https://en.wikipedia.org/wiki/Object_identifier#Usage). Consulte http://www.oid-info.com/cgi-bin/display?tree=1.2.840.113556.1.4.1941 para obtener un desglose estructural de la importancia de cada número. –

Respuesta

6

Se necesita el DN completo del usuario es decir

(&(member=CN=Your Name,OU=Your OU,DC=company,DC=com)(objectClass=group)) 

tomar en cuenta que no puede utilizar * en éste

+3

"Siempre obtengo 0 resultados cuando trato de filtrar con eso (** incluso reemplazando' cn = usuario1, cn = usuarios, DC = x' con mi propio distinguishedName ** " –

3

Así que el número loco magia hiper involucrado en la búsqueda recursiva se explica en Search Filter Syntax.

de encontrar en una sola búsqueda (de forma recursiva) todos los grupos que "usuario1" es miembro de:

  • Establecer la base hasta el contenedor de grupos DN; por ejemplo DN raíz (dc = dom, dc = fr)
  • establecer el ámbito en subárbol
  • Utilice el siguiente filtro: (member:1.2.840.113556.1.4.1941:=cn=user1,cn=users,DC=x)

explicita mediante Ldifde.exe la herramienta de línea de comandos incluido en Windows Server se da:

ldifde -f user1Grps.ldf -d "dc=societe,dc=local" -r "(member:1.2.840.113556.1.4.1941:=cn=user1,ou=Monou,dc=societe,dc=local)" 

Si está ejecutando eso en un servidor W2K8 o W2K8 R2, tenga cuidado de ejecutar como administrador.

Si está programando en C# se puede utilizar:

/* Retreiving a principal context 
*/ 
Console.WriteLine("Retreiving a principal context"); 
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "WM2008R2ENT:389", "dc=dom,dc=fr", "jpb", "PWD"); 


/* Look for all the groups a user belongs to 
*/ 
UserPrincipal aUser = UserPrincipal.FindByIdentity(domainContext, "user1"); 
PrincipalSearchResult<Principal> a = aUser.GetAuthorizationGroups(); 

foreach (GroupPrincipal gTmp in a) 
{ 
    Console.WriteLine(gTmp.Name);  
} 
Cuestiones relacionadas