LDAP Objektklassen und Schemas

 Diese Seite drucken


Schema, Objektklassen und Verzeichniseinträge

LDAP-Objekte sind standardisiert, um die Zusammenarbeit mit anderen Verzeichnisdienst-Servern zu gewährleisten.
Ein LDAP-Schema definiert die Liste möglicher Typen von Einträgen (die man als Objektklassen bezeichnet) zusammen mit den mit ihnen verknüpften Attributen. Schema-Definitionen werden in Dateien gespeichert.

Jeder LDAP-Server hat ein oder mehrere bekannte Standard-Schemas, auf das man immer zurückgreifen kann. Das heißt, dass jeder, der einen LDAP-Client programmieren will, erwarten kann, dass der LDAP-Server bestimmte Standard-Objektklassen und Attribute hat.

Beispiel: Ich durchsuche einen LDAP-Server. Das Einzige, was ich über ihn weiß, ist, dass er öffentliche Suchanfragen nach Einträgen akzeptiert, die der Objektklasse inetOrgPerson entsprechen.
Damit weiß ich schon eine ganze Menge: Ich kann nach dem vollen Namen von Personen suchen (das Attribut cn), nach dem Nachnamen (das Attribut sn); mit Hilfe optionaler Attribute kann ich eventuell Einträge über die Email-Adresse (das optionale Attribut mail) oder den Vornamen (das optionale Attribut givenname) finden. Dabei ist es egal, was für eine Implementierung der LDAP-Server ist, ob Netscape, das LDAP-Interface eines Microsoft Exchange-Servers, openLDAP, Oracles Internet Directory oder eine Sun Directory Service.

Objektklassen sind hierarchisch angeordnet, wobei die Objektklasse top die Wurzel des Baums bildet. Objekte der ersten Ebene (Level) sind Child-Objekte dieser Klasse, und alle darunterliegenden Objektklassen sind deren Nachkommen. Child-Klassen enthalten automatisch alle Attribute ihrer übergeordneten Parent-Klasse.

Ein Verzeichniseintrag kann in mehreren Objektklassen vorhanden sein, wie der folgende Datensatz für James Bond zeigt:

dn: cn=James Bond, ou=MI6, dc=gov, dc=uk

objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson
Distinguished Name
(Schlüsselfeld)

Objektklassen für diesen Verzeichniseintrag.
sn: Bond
cn: James Bond
telephoneNumber: 020 7930 9007
userPassword: {crypt}gerührt-nicht geschüttelt
description: Agent 007 of Her Majesty's Secret Service MI6
 
Attribute der Objektklasse person.
ou: MI6
title: Commander
street: The Enquiries Desk
postOfficeBox: 3255
st: CT
postalCode: SW1P 1AE 
facsimileTelephoneNumber: 020 7930 9000
 
Attribute der Objektklasse organizationalPerson.
departmentNumber: 00
employeeType: permanent
givenName: James
initials: JB
jpegPhoto: james.jpg
audio: james.wav
homePhone: 020 7930 9007
pager: Opening the toy cabinet
preferredLanguage: English
userCertificate: certs/jb_cert.pem 
 
Attribute der Objektklasse inetOrgPerson.

Das in diesem Beispiel-Datensatz verwendete Datenformat ist als LDIF (LDAP Data Interchange Format) bekannt. Es ist als Folge von Attributen und (durch Doppelpunkte getrennten) Wertepaaren organisiert. So hat zum Beispiel das Attribut telephoneNumber den Wert 020 7930 9007. Die verschiedenen Attribute sind farblich hervorgehoben, um die Objektklasse zu zeigen, von der sie stammen.

Wo finde ich Schemas?

Der LDAP Schema Viewer stellt eine sehr praktische Schnittstelle für die Untersuchung von Standard-LDAP-Schema-Objekten zur Verfügung.

Es gibt zwei bei der IETF definierte Schemas, die in allen LDAP-Servern implementiert sein sollten: RFC 2307 'Network Information Service Schema' und draft-steinback-ldap-mailgroups-00.txt 'LDAP mailgroups Internet Draft'. Um Naming Information Service (NIS) zu unterstützen, müssen diese beiden Schemas im Directory Server existieren.

Die OpenLDAP-Distribution kommt von Haus aus mit einer Reihe von weiteren Schemaspezifikationen. Jede Spezifikation ist in einer Datei abgelegt, die mit Hilfe der include-Direktive in der slapd.conf implementiert werden kann. Diese Schema-Dateien liegen normalerweise im Verzeichnis /usr/local/etc/openldap/schema .

in OpenLDAP mitgelieferte Schema-Spezifikation Beschreibung
core.schema OpenLDAP core (required)
cosine.schema Cosine and Internet X.500 (useful)
inetorgperson.schema InetOrgPerson (useful)
misc.schema Assorted (experimental)
nadf.schema North American Directory Forum (FYI)
nis.schema Network Information Services (FYI)
openldap.schema OpenLDAP Project (experimental)


Schemas erweitern oder verändern: Warum und wie?

Eines der flexibelsten Features von LDAP ist die Tatsache, daß das Schema erweitert werden kann. Man kann Objektklassen und Attribute ganz nach Bedarf hinzufügen, um die jeweiligen Ansprüche erfüllen zu können: Wenn Sie es noch nicht getan haben, gehen Sie jetzt mal zur Website des LDAP Schema Viewer und schauen sich ein paar Schemas an - nur um mal eine Idee davon zu bekommen. Wenn man sich die verschiedenen Schemas im LDAP Schema Viewer ansieht, kann man sich vielleicht gar nicht vorstellen, warum man diese Standard-Schemas noch erweitern sollte. In der Objektklasse inetOrgPerson scheint es doch alle Attribute zu geben, die man braucht. Oder nicht?

Lassen Sie uns das an einem Beispiel aus der Realität überprüfen:
Der Systemadministrator an einer Universität X soll die Informationen aus einer Sun-NIS-Infrastruktur nach LDAP migrieren (Mehr über einen LDAP-NIS-Gateway gibt es auf der Website von PADL Software.). Dabei stellt er fest, dass es in inetOrgPerson kein Attribut für den zweiten Vornamen, Matrikelnummer und andere Namenszusätze (Mädchennamen, Adelstitel etc.) gibt. Die unter NIS vorhandenen Informationen sollen aber mitgenommen werden, und alle relevanten Personendaten zu einer Person sollen in einer einzigen Entry abgelegt werden. Was tun?
Der Systemadminstrator leitet eine neue Objektklasse aus inetOrgPerson ab; er nennt sie uniXPerson, und fügt dort die Attribute hinzu, die gebraucht werden.

Wie man an so eine Aufgabe herangeht, werden wir uns noch genauer anschauen. Soviel vorab:
Wie kommt man an ein Schema heran und wie verändert man es? Wenn der LDAP-Server LDAPv3-konform ist, kann man die Konfigurationsdateien (und dazu gehören die Schemas) manuell oder durch Programmieren und/ oder Tools ändern. Das geht deswegen so gut, weil ein Schema selbst als Entry auf dem Server abgelegt ist - man muss es nur auf eine ganz bestimmte Art und Weise abändern: Zunächst muss man sich als der Directory Server Manager authentifizieren können. Die Einstiegs-dn muss dann "cn=schema" sein, scope muss "base" und Filter auf "objectclass=subschema" . Dann können die Objektklassen oder Attribute geändert werden, wie unter LDAP mit den üblichen Operationen möglich. Das Format der Schemaeinträge ist allerdings gewöhnungsbedürftig. Ein gute Übersicht bietet der Artikel von Mark Wilcox unter http://developer.netscape.com/viewsource/index_frame.html?content=wilcox_schema.html, von dem das Beispiel stammt. Mit diesem Thema werden wir - wie gesagt - uns später noch im Detail auseinandersetzen, weil das Schema-Management auf einem LDAP-Server eine zentrale Rolle bei der Integration von LDAP in Organisationen spielt.

RFC-Nummer rfc2256 Autoren M. Wahl Stand Dezember 1997 Status PROPOSED STANDARD
Titel A Summary of the X.500(96) User Schema for use with LDAPv3
Inhalt Viele Schemas und Attribute wurden schon fpr X.500 definiert. Dieser RFC gibt einen Überblick über die Attributtyoen und Objektklassen, die ein LDAP-Server kennen sollte. Attribute wie beispielsweise cn (Common Name), description und postalAddress sind schon definiert. Ebenso existieren Objektklassen wie z.B. country, organizationalUnit, groupOfNames oder applicationEntry schon länger.
RFC-Nummer rfc2307 Autoren Network Working Group Stand März 1998 Status EXPERIMENTAL
Titel An Approach for Using LDAP as a Network Information Service

Inhalt This document describes an experimental mechanism for mapping entities related to TCP/IP and the UNIX system into X.500 [X500] entries so that they may be resolved with the Lightweight Directory Access Protocol [RFC2251]. A set of attribute types and object classes are proposed, along with specific guidelines for interpreting them.

The intention is to assist the deployment of LDAP as an organizational nameservice. No proposed solutions are intended as standards for the Internet. Rather, it is hoped that a general consensus will emerge as to the appropriate solution to such problems, leading eventually to the adoption of standards. The proposed mechanism has already been implemented with some success.

RFC-Nummer RCF2798 Autoren M. Smith
Stand April 2000 Status INFORMATIONAL
Titel Definition of the inetOrgPerson LDAP Object Class
Inhalt

While the X.500 standards define many useful attribute types [X520] and object classes [X521], they do not define a person object class that meets the requirements found in today's Internet and Intranet directory service deployments. We define a new object class called inetOrgPerson for use in LDAP and X.500 directory services that extends the X.521 standard organizationalPerson class to meet these needs.


  Petra Haberer  Version 1.0.1