LDAP - Le modèle d'information
Introduction au modèle d'information
Le modèle d'information du protocole LDAP définit le type de données
pouvant être stocké dans l'annuaire LDAP.
On appelle entrée (en anglais entry) l'élément de base de l'annuaire.
Chaque entrée de l'annuaire LDAP correspond à un objet abstrait ou réel (par exemple une personne,
un objet matériel, des paramètres, ...). Une entrée est contitués de plusieurs objets.
Un objet est constitué d'un ensemble de paires clés/valeurs appelées attributs
permettant de définir de façon unique les caractéristiques de l'objet à stocker.
Par analogie avec la terminologie objet on parle ainsi de classe d'objet pour désigner la structure d'un objet, c'est-à-dire l'ensemble des
attributs qu'il doit comporter. De cette façon un objet est une "instanciation" de la classe d'objet, c'est-à-dire
un ensemble d'attributs avec des valeurs particulières.
Voici un exemple d'entrée de l'annuaire :
type d'attribut |
valeur de l'attribut |
cn: |
Pillou Jean-Francois |
uid: |
jfpillou |
telephonenumber: |
06209937xx |
mail: |
webmaster@commentcamarche.net jeff@commentcamarche.net |
Le schéma de l'annuaire
Ainsi, on appelle schéma (plus exactement en anglais Directory Schema) l'ensemble des définitions d'objets et d'attributs qu'un serveur LDAP peut gérer
ainsi que leur syntaxe.
De cette façon, un annuaire peut uniquement comporter des entrées correspondant à une classe d'objet
définie dans le schéma. Le schéma est en effet lui-même stocké dans l'annuaire à un emplacement spécifique
(il s'agit pour être exact d'une instance de la classe subschema).
Grâce au schéma, l'annuaire peut garantir de façon autonome la validité des enregistrements et de leur syntaxe.
Lorsqu'une entrée est créée dans l'annuaire, celui-ci vérifie sa conformité à la classe
d'objet, on parle alors de schema checking.
Les attributs des entrées
Chaque entrée est constituée d'un ensemble d'attributs (paires clé/valeur)
permettant de caractériser l'objet que l'entrée définit. On distingue habituellement deux types
d'attributs :
- Les attributs utilisateurs (user attributes) sont les attributs caractérisant l'objet manipulé par les utilisateurs de l'annuaire
(nom, prénom, ...)
- Les attributs opérationnels (system attributes) sont des attributs auxquels seul le serveur peut accèder
afin de manipuler les données de l'annuaire (dates de modification, ...)
LDAP permet de définir des types d'attributs, c'est-à-dire des caractéristiques permettant
de le définir de façon précise. Chaque attribut possède de cette façon une syntaxe
qui lui est propre (la façon selon laquelle l'attribut doit être renseigné, c'est-à-dire le format des données)
mais aussi la manière selon laquelle la comparaison doit s'effectuer lors d'une recherche de l'annuaire (par exemple
définir si la recherche sera sensible à la casse, c'est-à-dire si la recherche devra différencier
minuscules et majuscules).
Voici les principales syntaxes d'attributs définies dans le protocole LDAP v3 :
syntaxe d'attribut |
description |
binary |
Attribut constitué d'une suite d'octets, c'est-à-dire d'un fichier binaire (image, vidéo, fichier, ...) |
boolean |
Attribut constitué d'un booléen (vrai ou faux) |
dn |
Pointeur vers un objet de l'annuaire repéré par son distinguished name |
Directory string |
Attribut constitué d'une chaîne de caractères au format UTF-8 |
integer |
Attribut constitué d'un entier |
telephoneNumber |
Numéro de téléphone |
Voici les principales règles de comparaison d'attributs définies par le standard LDAP v3 :
règle de comparaison LDAP |
règle de comparaison X500 |
description |
cis |
caseIgnoreMatch |
Attribut texte non sensible à la casse |
ces |
caseExactMatch |
Attribut texte sensible à la casse |
tel |
telephoneNumberMatch |
Attribut texte représentant un numéro de téléphone (les virgules et les espaces sont ignorés dans la recherche) |
int |
integerMatch |
Attribut entier (pour une comparaison numérique) |
dn |
distinguishedName |
Nom d'entrée. Permet de comparer deux entrées |
bin |
octetStreamMatch |
Attribut binaire. Permet de comparer octet par octet |
bin |
booleanMatch |
Attribut bolléen. Permet de comparer deux attributs booléens |
Les attributs prédéfinis
LDAP définit un ensemble de classes et d'attributs par défaut convenant
pour la grande majorité des applications. Ces attributs doivent impérativement
être implémentés par les serveurs d'annuaires LDAP v3.
Cela permet de garantir une certaine
homogénéité entre les différents annuaires.
Voici une petite liste non exhaustive des principaux attributs utilisateurs définis par le standard LDAP v3 :
Attribut |
Description |
aliasedObjectName |
DN de l'objet dont celui en cours est un alias |
authorityRevocationList |
Liste de certificats révoqués par l'autorité chargée de les réguler |
businessCategory |
Activité professionnelle d'une entreprise ou d'une personne |
c |
Code du pays en deux lettres (respectant le standard ISO 3166) |
caCertificate |
Certificat de l'autorité de régulation |
certificateRevocationList |
Liste des certificats révoqués par l'autorité de régulation |
cn |
Nom de l'objet (common name) |
description |
Description de l'objet |
distinguishedName |
Nom distingué (utilisé par d'autres attributs par héritage) |
facsimileTelephoneNumber |
Numéro de fax |
givenName |
Prénom de la personne |
houseIdentifier |
Identifiant d'un batiment |
initials |
Initiales d'une personne |
internationalSDNNumber |
Numéro ISDN |
l |
localité de l'objet (géographique) |
member |
Distinguished Name des membres |
name |
Nom (utilisé par d'autres attributs par héritage) |
o |
Nom de l'organisation |
objectClass |
Classe d'objets |
ou |
Unité organisationnelle (branche de l'organisation) |
owner |
Nom du propriétaire de l'objet |
postalAddress |
Adresse postale (sans le code postal) |
postalCode |
Code postal |
postalOfficeBox |
Boîte aux lettres (postale) |
presentationAddress |
Adresse réseau de la présentation de l'objet (généralement une URL vers la présentation en ligne) |
protocolInformation |
Attribut complémentaire à presentationAddress pour définir le protocole à utiliser |
registeredAddress |
Adresse postale pour des envois de courriers recommandés et de colis |
seeAlso |
DN d'objets complémentaires |
serialNumber |
Numéro de série de l'objet |
sn |
Nom de famille de la personne (surname) |
st |
Etat ou région (state) |
street |
Nom de la rue et assimiilé (boulevard, ...) |
telephoneNumber |
Numéro de téléphone |
telexNumber |
Numéro de télex |
title |
Titre de la personne (différent de fonction) |
uid |
Identifiant unique de l'objet |
userCertificate |
Certificat de l'utilisateur |
userPassword |
Mot de passe de l'utilisateur |
Voici une petite liste non exhaustive des principaux attributs opérationnels définis par le standard LDAP v3 :
Attribut |
Description |
attributeTypes |
Liste des attributs de l'annuaire. Cet opérateur opérationnel fait partie du schéma de l'annuaire décrit par l'objet subschema |
altServers |
Liste de serveurs LDAP alternatifs en cas de défaillance de celui-ci |
createTimestamp |
Contient la date de création d'un objet, et est ainsi présent dans tout objet. Son occurrence est unique et il ne peut être modifiée |
creatorsName |
Contient le DN de l'objet ayant servi à la création de l'objet, et est ainsi présent dans tout objet. Son occurrence est unique et il ne peut être modifié par un utilisateur |
matchingRules |
Contient l'ensemble des règles de comparaison. Cet opérateur opérationnel fait partie du schéma de l'annuaire décrit par l'objet subschema |
matchingRuleUse |
Contient l'ensemble des attributs utilisant chaque règle de comparaison. Cet opérateur opérationnel fait partie du schéma de l'annuaire décrit par l'objet subschema |
modifiersName |
Contient le DN de l'objet utilisé pour s'identifier lors de la modification. Il est présent dans tous les objets modifiés par la commande modify. Son occurrence est unique et il ne peut être modifié par un utilisateur |
modifyTimestamp |
Contient la date de la dernière modification de l'objet. Il est présent dans tous les objets modifiés par la commande modify. Son occurrence est unique et il ne peut être modifié par un utilisateur |
namingContexts |
Contient l'ensemble des contextes supportés par le serveur. Son occurrence est unique et il ne peut être modifié par un utilisateur |
objectClasses |
Contient l'ensemble des classes d'objets. Cet opérateur opérationnel fait partie du schéma de l'annuaire décrit par l'objet subschema |
subschemaSubentry |
Contient le DN de l'objet contenant le schéma de l'annuaire (subschema) |
supportedControl |
Contient l'ensemble des OID des contrôles supplémentaires ajoutés à l'annuaire |
supportedExtensions |
Contient l'ensemble des OID des extensions supplémentaires (fonctions utilisateurs) ajoutés à l'annuaire |
supportedLDAPVersion |
Contient les versions du protocole LDAP gérées par le serveur |
supportedSASLMechanisms |
Contient la liste des mécanismes SASL supportés par l'annuaire LDAP |
Les classes d'objets
Par analogie avec la terminologie objet on parle de classe d'objet pour désigner
la structure d'un objet, c'est-à-dire l'ensemble des attributs qu'il doit comporter.
De cette façon on dira qu'un objet est une "instanciation" de la classe d'objet, c'est-à-dire
un ensemble d'attributs avec des valeurs particulières.
Une classe d'objet est ainsi composée d'un ensemble d'attributs obligatoires (devant obligatoirement être
renseignés dans les objets qui en découlent) et éventuellement des attributs facultatifs.
On distingue plusieurs types de classes d'objets :
- Les classes abstraites sont des classes non instanciables. Il s'agit de classes pouvant être dérivées,
c'est-à-dire dont d'autres classes peuvent hériter. La classe d'objet de plus haut niveau étant la classe top
dont toute classe d'objet dérive
- Les classes structurelles sont des classes instanciables. Il est donc possible d'avoir des objets
- Les classes auxiliaires sont des classes permettant d'ajouter des attributs facultatifs à des classes
structurelles.
Une des caractéristiques intéressantes des classes d'objets LDAP est la possibilité d'utiliser
l'héritage.
Ainsi la classe de plus haut niveau est la classe top dont toutes les classes d'objets dérivent. Avec LDAP
seul l'héritage simple est autorisé (donc pas d'héritage multiple),
c'est-à-dire qu'une classe ne peut dériver que d'une seule classe, mais qu'une classe
peut avoir plusieurs filles.
L'exemple suivant montre le principe d'héritage LDAP avec quelques classes d'objets standards :
Les attributs sont caractérisés par :
- leur nom unique
- un Object Identifier (OID) qui permet de les identifier de façon unique
- une syntaxe et des règles de comparaison
- un indicateur d'usage
- un format ou une limite de taille
Il s'agit d'utiliser une série de paires clé/valeur permettant de repérer une entrée
de manière unique. Voici une série de clés généralement utilisées :
- uid (userid), il s'agit d'un identifiant unique obligatoire
- cn (common name), il s'agit du nom de la personne
- givenname, il s'agit du prénom de la personne
- sn (surname), il s'agit du nom de la personne
- o (organization), il s'agit de l'entreprise de la personne
- u (organization), il s'agit du service de l'entreprise dans laquelle la personne travaille
- mail, il s'agit de l'adresse de courrier électronique de la personne (bien évidemment)
- ...
Consulter les données
LDAP fournit un ensemble de neuf fonctions (appelées parfois procédures ou opérations) de base pour effectuer des requêtes
sur les données afin de rechercher, modifier, effacer des entrées dans les
répertoires.
Les opérations sont généralement classées en trois catégories :
- les fonctions d'interrogation: il s'agit des opérations permettant de rechercher ou comparer des entrées de l'annuaire (recherche, comparaison)
- les fonctions de mise à jour: il s'agit des opérations permettant de modifier des entrées de l'annuaire (ajout, suppression, modification, renommage)
- les fonctions de session: il s'agit des opérations permettant d'ouvrir une session (s'identifier), de la fermer ainsi que d'annuler une requête
Voici la liste des principales opérations que LDAP peut effectuer :
Opération |
Description |
Abandon |
Abandonne l'opération précédemment envoyées au serveur |
Add |
Ajoute une entrée au répertoire |
Bind |
Initie une nouvelle session sur le serveur LDAP |
Compare |
Compare les entrées d'un répertoire selon des critères |
Delete |
Supprime une entrée d'un répertoire |
Extended |
Effectue des opérations étendues |
Rename |
Modifie le nom d'une entrée |
Search |
Recherche des entrées d'un répertoire |
Unbind |
Termine une session sur le serveur LDAP |
Le format d'échange de données LDIF
LDAP fournit un format d'échange (LDIF, Lightweight Data Interchange Format) permettant d'importer et d'exporter les données
d'un annuaire avec un simple fichier texte. La majorité des serveurs LDAP supportent ce format, ce qui permet une grande interopérabilité
entre eux.
La syntaxe de ce format est la suivante :
[<id>]
dn: <distinguished name>
<attribut> : <valeur>
<attribut> : <valeur>
...
Dans ce fichier
id est facultatif, il s'agit d'un entier positif permettant d'identifier
l'entrée dans la base de données.
|
- chaque nouvelle entrée doit être séparée de la définition de l'entrée
précédente à l'aide d'un saut de ligne (ligne vide)
- Il est possible de définir un attribut sur plusieurs lignes en commençant les lignes suivantes
par un espace ou un tabulation
- Il est possible de définir plusieurs valeurs pour un attribut en répétant la chaîne
nom:valeur sur des lignes séparées
- lorsque la valeur contient un caractère spécial (non imprimable, un espace ou :), l'attribut
doit être suivi de :: puis de la valeur encodée en base64
|
Discussions pertinentes trouvées dans le forum