Personalizando tu Esquema de Directorio LDAP

Parte Uno: Comprendiendo los Atributos LDAP

Michael Donnelly

N.del T. : El presente articulo de Michael Donnelly en http://www.ldapman.org es traducido al castellano con el ánimo de ayudar a los que quieren aprender acerca de LDAP. La traducción no está sujeta a garantía de ningún tipo y el original pertenece a Michael Donnelly. El traductor Pere Benavent pone la traducción bajo licencia GFDL GNU Free Documentation License .

Una de las razones detrás de la popularidad de los directorios LDAP (y una de las razones para el éxito continuado de LDAP) es su adaptabilidad para almacenar tipos de información tan diferentes . El esquema LDAP define y controla los tipos de datos que pueden ser almacenados para entradas individuales. Este articulo cubrirá en cuatro partes, unos de los pocos fundamentos que necesitarás para iniciar la personalización de tu esquema de servidor de directorio LDAP, para adecuarlo a tus necesidades.

Este es el tercero en una serie de articulos para sendmail.net acerca del tema LDAP. La serie como un todo, te llevará desde "simplemente echa un vistazo" a traves del proceso completo de desplegar un conjunto basado en LDAP de aplicaciones y servicios habilitadas para directorio. Un archivo de otros articulos de interés en ésta serie se puede encontrar en http://www.ldapman.org/articles/.
 

¿ Qué es un Esquema de Directorio LDAP ?

En un directorio LDAP, el esquema es la colección de atributos definidos, clases de objetos definidas, y ACIs para controlar dónde es almacenado cada dato.

Cualquier base de datos, sin tener en cuenta su complejidad o tecnología subyacente, tiene un esquema. En términos simples, un esquema es el modelo de los datos, el diseño en lo tocante a cómo los datos se almacenan, qué tipos de datos son rastreados, y las relaciones entre datos almacenados en varias entradas.

Cuando configuras tu directorio LDAP, la información para cualquier entrada dada se almacena en una serie de atributos . Tu puedes crear nuevos tipos de valores que serán almacenados en el directorio.

Colectivamente, a todos los atributos que pueden ser utilizados para un tipo específico de objeto se les llama Clases de Objetos (Object Class, en ingles) . Como con los atributos, puedes definir nuevas clases de objetos para adecuarlas a tus necesidades. Dentro de cada clase de objetos, puedes designar que algunos atributos son requeridos, y otros que son meramente opcionales.

(Para aquellos con un bagaje en bases de datos tradicionales, puede ser útil pensarlo de ésta manera: los campos son similares a los atributos, las tablas son similares a las clases de objetos.)

Además, puedes diseñar tu direcotrio LDAP para que puedas almacenar objetos similares juntos en la misma rama del directorio LDAP.
 

Comprendiendo los Atributos LDAP

Simplemente recuerda, un atributo es un contenedor que se puede utilizar para almacenar un solo tipo de información dentro de tu diretorio. Por ejemplo, cuando describes tu coche, tu puedes seguir el rastro de sus atributos incluyendo color, marca, modelo, año, matricula y el estado, la provincia o el pais que emitió la licencia.

Cada uno de esos atributos describe un atributo individual de tu coche. En general, querras separar datos separadamente donde sea posible. (Te has dado cuenta como la información de la matricula está troceada separadamente?)

La personalización del esquema permite al administrador designar tantos tipos de atributos como necesite. Si quieres registrar comida favorita, cumpleaños, fecha del alquiler, o cualquier otra cosa -- todo lo que tienes que hacer es añadir los atributos aporpiados al fichero de configuración de tu servidor de directorio.

Cuando se define un atributo, especificarás cada uno de los siguientes aspectos. Cubriremos cada una de esos items en detalle.
 

Qué es un Nombre (Name)?
El nombre de tu atributo es directo en concepto, pero hay algunas directrices estilísticas que querras utilizar para crear los tuyos propios.

Para principiantes, antes de crear un atributo nuevo escribe lo que quieres para comprobar si hay un atributo estándar designado para ese proposito. Enlaces a sites listando atributos bien definidos y clases de objetos (object classes) se pueden encontrar en: http://www.ldapman.org/schema-references

Asumiendo que un atributo existente no existía ya, necesitarás añadirlo tú mismo. Para empezar, cada atributo necesita un nombre. Tu nombre de atributo debería ser elegido para que se eviten potenciales conflictos con atributos que puedan ser "oficialmente designados" en el futuro. Puedes querer utilizar tu nombre de empresa u organización para comenzar tu nombre de atributo. Por ejemplo, en Gizmo, Inc., registran los ID de pases de parking dados a cada empleado. Cuando define su esquema, el administrador LDAP de Gizmo puede elegir el nombre de atributo "gizmoNumeroDePaseDeParking". Puede ser razonablemente cierto que estos atributos nunca entraran en conflicto con los "oficialmente designados" utilizados en un momento posterior.

Nótese que las mayúsculas en "gizmoNumeroDePaseDeParking". Esto es puramente estético, pero verás los atributos (y las clases de objetos -object classes-) típicamente listados en este formato. La primera palabra está siempre en minúsculas, y la primera inicial de cada palabra siguiente está en mayúsculas. Tu nombre de atributo debería ser bastante largo para ser razonablemente autodescriptivo, y puede ser compuesrta de letras a-z, números 0-9, y el caracter guión (dash). (El carácter inicial debe ser una letra.) Los espacios, subrayados, y carácteres especiales no están permitidos.
 

Descripción:

Una definición de una frase del proposito de uso del atributo.

Identificadores de Objecto (Object Identifiers):

Los Identificadores de Objeto (Object Identifiers), o OIDs, son los números de referencia numérica utilizados por el mecanismo interno de base de datos del directorio LDAP . Los nombres de atributos están ahí para tí y para mí, pero los ordenadores son más eficientes cuando tratan con números. Si estás familiarizado con DNS, el concepto es bastante similar -- la mayoría de nosotros utilizamos nombres de máquinas como www.sendmail.net, pero los ordenadores traducen el nombre "amigable para el humano" en direcciones IP antes de tragarse el trabajo.

Cuando la gente en Gizmo especifica un nombre de atributo de "gizmoNumeroDePaseDeParking", el ordenador convierte el nombre en el correspondiente número OID para almacenar y recuperar, en este ejemplo el número OID podría ser 1.3.6.1.4.1.1234.

¿ Necesitas registrar por ti mismo número OID antes de que puedas crear atributos personalizados y clases de objetos (object classes) ? La respuesta depende de tu servidor de Directorio. Muchos de los servidores de directorios que disponibles solamente te permiten especificar un nombre alfanumérico para un número oid. Si Gizmo no había registrado un OID, ellos pueden tener asignado al atributo "gizmoNumeroDePaseDeParking" un OID de "gizmoNumeroDePaseDeParking-oid". Todavía es único, y de ese modo aún sirve para cumplir su proposito.

Puede que no necesites registrar tu propio OID, pero no obstante es una buena idea. Los atributos LDAP, las definiciones de sintáxis y las clases de objetos, todos utilizan OIDs. Así lo hacen SNMP y otros protocolos que soportan el esquema de identificación unificado ANSI.

Obtener tu propio OID es bastante fácil. Puedes ir a ANSI (American National Standards Institute) y pagar $1000 por un número, o puedes obtener un gratis de la Autoridad de Internet Asigadora de Números (IANA) en: http://www.iana.org/
 

Sintáxis:

Cuando configuras cada atributo, parte de la especificación incluye la sintaxis que deseas utilizar. Las sintaxis más comunes se listan aquí:
 
codigo nombre sintáctico Descripción
dn Distinguished Name Permite cualquier cadena alfanumérica. 
La coincidencia de patrones de campos de tipo DN está normalizada para equivalencia DN. Por ejemplo, 
"uid=ratboy,ou=accounts,dc=ldapman,dc=com" es equivalente a 
"uid=Ratboy, ou=Accounts, dc=LDAPman, dc=com"
cis Case Ignore String Permite cualquier cadena alfanumérica.  La información almacenada utilizando cis es guardada preservando las mayúsculas, pero las coincidencias se ejecutan ignorando las mayúsculas. Este es el uso comunmente más utilizado de escritura de sintáxis a causa de su  versatilidad.
ces Case Exact String Permite cadenas alfanuméricas.  Las coincidencias contra los atributos de formato cis distinguen entre mayúsculas y minúsculas.  Utilizado para atributos como contraseñas, dónde sólo desees coincidencia exacta de cadenas.
int Integer Solo se permite almacenar enteros en este atributo.
tel Telephone Number Como cis, pero cuando buscamos contra atributos de este tipo, la coincidencia ignora los espacios y los guiones. Esto permite que "510-555-1212" coincida con "510 555 1212".
bin binary Utilizado para almacenar datos binarios en un formato estandarizado.

Algunos directorios LDAP te permiten añadir sintáxis personalizadas al almacenamiento del directorio. Mientras que los detalles acerca de cómo hacer esto, están más allá del alcance de este articulo, mencionaré de paso cuando habras querido hacer esto. Cuando creas tu propia sintáxis, puedes programar el servidor de directorio para permitir solo ciertos caracteres en este atributo y puedes especificar como casa contra el atributo contra en el que es ejecutado.

Digamos que quieres almacenar códigos hexadecimales en tu directorio, y no quieres preocuparte demasiado del formato con que los códigos son almacenados. (Alguien puede introducir "00 A2 34 FF" mientras que otros pueden introducir "00a234ff", y una tercera persona puede introducir "00a2.34ff". Quieres que las busquedas de cualquiera de estos formatos aparezcan.) Para ajustarse a tus necesidades, querras definir una nueva sintáxis del tipo "hex" (COMPRUEBA ESTO!), permitiendo caracteres 0-9, A-F, espacios, y periodos. Las busquedas podrían ignorar las mayúsculas y normalizadas para eliminar todos los espacios y periodos. Presto! Misión conseguida. Para más información sobre la creación de sintáxis personalizada, por favor comprueba la documentación espacifica de tu servidor de Directorio.
 

Perdoneme, es usted soltero (single)?

Algunos (pero no todos) los servidores de Directorio permiten especificar que algunos atributos son "únicos". El uso del atributo "único" se hace cuando quieres garantizar que para un registro dado en tu directorio, hay como máximo un valor para ese tipo de atributo. Consideremos una entrada para Mike Jones. Puedes almacenar multiples entradas para su CN (uno para "Mike Jones", otro para "Michael Jones") pero cuando almacenas su servidor primario de correo quieres garantizare que como máximo hay un valor único.


Esto es todo por mi parte. En esta segunda parte de este articulo, hemos discutido acerca de las clases de objeto y como se construyen desde los atributos. En la parte tercera, utilizaremos la información de estas partes primera y segunda para diseñar unas pocas clases de objetos nuevas y personalizar tu esquema de diretorio LDAP.

Espero que hayas encontrado este articulo útil. Por favor, vuelve a www.sendmail.net para comprobar las partes segunda y tercera de este articulo.

Si tienes comentarios o preguntas, envia un correo a donnelly@ldapman.org.

michael donnelly
3 august 2000