2010-11-08 73 views
5

Uno de los nuevos requisitos para nuestra aplicación de base de datos es sincronizar el contenido de la tabla de usuarios con los usuarios en Active Directory. Así que, básicamente, necesito conectarme al servidor de Active Directory y recuperar una lista de nombres de usuario, desde dentro de un procedimiento plsql.Obtener lista de usuarios LDAP usando PLSQL

Lo que he logrado hasta ahora es conectarme al servidor de directorio activo, usar mis propias credenciales y consultar algunos atributos.

Ejemplo:

ldap_password := '****'; 
ldap_user  := 'cn=me,OU=Users,OU=mygroup,DC=mytown,DC=mycompany,DC=com'; 
ldap_base  := 'OU=Users,OU=mygroup,DC=mytown,DC=mycompany,DC=com'; 
search_filter := '(&(objectClass=Person)!((sn=him)(cn=me)))'; 
res_attrs(1) := 'displayName'; 
res_attrs(2) := 'cn'; 
res_attrs(3) := 'telephoneNumber'; 

Parece que sólo puedo consultar mis propios atributos o de otra persona, si ya sé que otra persona que es.

  • ¿Cómo obtengo una lista de nombres de usuario?
  • ¿Es esto posible usando cualquier cuenta o requiere una cuenta con los privilegios adecuados?

Respuesta

3

Rene, Puede hacer todas las búsquedas en el directorio activo a través de los componentes LDAP de Oracle que parece que ya ha mencionado. Si bien no soy un experto en LDAP/AD, creo que puede necesitar derechos para realizar estas acciones o, mejor aún, obtener una ID/contraseña creada que tenga los derechos (de esta manera puede mantener su id/psw fuera del sistema y permitir ya sea un pswrd o pswrd inexpugnable que es compatible con los administradores de AD. Sé que siempre he tenido acceso de consulta completo a AD, no estoy seguro si así es como estoy configurado o la funcionalidad lista para usar.

Pero mira @ este sitio http://www.oracle-base.com/articles/9i/LDAPFromPLSQL9i.php

como el artículo demuestra, recomendaría pelar volver a su searchFilter (conseguir más entonces reducir gradualmente hacia abajo hasta que se adapte a sus necesidades)

  • l_attrs (1): = '*'; - recuperar todos los atributos l_retval: = DBMS_LDAP.search_s (LD => l_session, base => l_ldap_base, alcance => DBMS_LDAP.SCOPE_SUBTREE, filtro => 'objectClass = *', attrs => l_attrs, attronly => 0, res => l_message);
+0

Gracias, ya he visto estos ejemplos. Mi pregunta no es cómo obtener algunos valores de un servidor LDAP en general, sino cómo crear una consulta para obtener una lista de usuarios (si es posible) – Rene

1

El Directorio Activo tiene alrededor de 4 atributos para nombrar.

  • sAMAccountName (alias nombre Pre-Windows2000) es un nombre corto de 20 caracteres que debe ser único dentro de cada dominio.
  • userPrinicipalName, normalmente [email protected], pero resulta que AD respetará casi cualquier cadena. (Sé que esto experimentalmente, ya que una vez restablecido de forma accidental 2000 de 6000 dichos valores en un dominio de AD en ejecución.
  • displayName, lo que se muestra en ADUC (dsa.msc usuarios de Active Directory y equipos)
  • La parte CN= del DN. Con ADUC, el CN ​​suele ser el Nombre para mostrar. Sin embargo, también puede ser cualquier cosa legal en un nombre de LDAP.

Entonces, ¿qué nombre está buscando?Básicamente consulta cualquiera de esos atributos en la lista y mira lo que obtienes.

En cuanto a ver otros objetos, sí, necesitaría una cuenta con derechos suficientes para ver esos atributos para los usuarios.

4

Tengo mi script funcionando. La configuración del alcance me impidió ver todos los datos. DBMS_LDAP.SCOPE_SUBTREE

Cuestiones relacionadas