Administration des réseaux avec SNMP & LDAP

Modèle de données

Introduction

Le modèle de données de LDAP s’apparente très fortement au langage orienté objet.

Les informations d’un annuaire LDAP sont stockées sous forme d’une arborescence d’informations hiérarchiques (Directory Information Tree). A chaque nœud de cette arborescence, on retrouve l’instance d’un classe, qui elle-même va contenir un ensemble d’attributs représentent la donnée.


Figure 13 - Exemple de Directory Information Tree

Distinguished Name

Le Distinguished Name (DN) est un nom distinct qui permet d’identifier de façon unique une entrée de l’annuaire électronique. Si on en revient à notre comparaison avec les bases de données relationnelles, cette notion est très proche de la notion de Primary Key.


Figure 14 - Exemple de Distinguished Name

On pourrait, par exemple, prendre d’un étudiant dans une université (voir figure ci-dessus). Dans notre cas, le Distinguished Name est : dn: cn=Valentin GOT,ou=personnes,dc=esipe,dc=fr

Pour lire un Distinguished Name, il faut le lire en partant de la fin :

+ dc=esipe,dc=fr
|
+--+ ou=personnes
    |
    +-- cn=Valentin GOT

Comme on peut le voir, le séparateur utilisé pour différencier les différentes parties du DN est la virgule « , ». Il est facile de comparer le DN du protocole LDAP avec le chemin d’accès vers un fichier, qui lui aussi est unique, mais qui utilise un séparateur slash « / ». Toutes les entrées d'un DIT (même les nœuds intermédiaires) possèdent un DN.

Classe

LDAP possède déjà un certain nombre de classes et d’attributs pour représenter un utilisateur, une machine, … En plus des classes déjà proposés par LDAP, l’administrateur du serveur LDAP à la possibilité d’en créer de nouvelles pour qu’elles correspondent plus au modèle de données qu’il souhaite mettre en place.

Une classe, c’est :

De plus, une classe à la possibilité d'hériter d’une ou plusieurs autres classes (définies ou non par LDAP) à l’aide de l’attribut SUP.

Le format d’une classe tel qu’il est définit dans la RFC :ObjectClassDescription = "(" whsp
          numericoid whsp     ; ObjectClass identifier
          [ "NAME" qdescrs ]
          [ "DESC" qdstring ]
          [ "OBSOLETE" whsp ]
          [ "SUP" oids ]           ; Superior ObjectClasses
          [ ( "ABSTRACT" / "STRUCTURAL" / "AUXILIARY" ) whsp ] ; Default STRUCTURAL
          [ "MUST" oids ]        ; AttributeTypes
          [ "MAY" oids ]          ; AttributeTypes
whsp ")"

Classe représentant un groupe d'élèves à l'ESIPE :#group
objectclass ( 2.5.4.42.2.1
          NAME 'group'
          DESC 'ESIPE Group'
          SUP organizationalRole
          STRUCTURAL
          MUST (
                    esipeGroupName $
                    esipeGroupMember $
                    esipeGroupDelegate
          )
)

Attribut

Un attribut représente un élément d’une classe. De même que pour les classes, il possède un numéro d’identification unique (OID), un nom (NAME), une description (DESC) et peut hériter des propriétés d’un autre attribut (SUP).

Un attribut possède aussi un type (SYNTAX), précisant si cet attribut est une chaine de caractère, un entier, ... Ce type est défini par un OID.

De plus, un attribut peut :

Le format d’un attribut tel qu’il est définit dans la RFC :AttributeTypeDescription = "(" whsp
          numericoid whsp                                 ; AttributeType identifier
          [ "NAME" qdescrs ]                               ; Name used in AttributeType
          [ "DESC" qdstring ]                               ; Description
          [ "OBSOLETE" whsp ]
          [ "SUP" woid ]                                      ; Derived from this other
          [ "EQUALITY" woid ]                            ; Matching Rule name
          [ "ORDERING" woid ]                            ; Matching Rule name
          [ "SUBSTR" woid ]                                ; Matching Rule name
          [ "SYNTAX" whsp noidlen whsp ]         ; Syntax OID
          [ "SINGLE-VALUE" whsp ]                    ; Default multi-valued
          [ "COLLECTIVE" whsp ]                        ; Default not collective
          [ "NO-USER-MODIFICATION" whsp ]     ; Default user modifiable
          [ X-ORDERED whsp type ]                   ; Non-standard - default not X-ORDERED
          [ "USAGE" whsp AttributeUsage ]       ; Default userApplications
whsp ")"

Attribut représentant le nom d'un groupe d'élèves à l'ESIPE :#groupName
attributetype ( 2.5.4.42.1.1
          NAME 'esipeGroupName'
          DESC 'Group of person'
          EQUALITY caseIgnoreMatch
          SUBSTR caseIgnoreSubstringMatch
          SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{5}
)