In einer normalen AD-Umgebung kann jeder Benutzer Attribute aus dem AD auslesen. Dies ist allerdings nicht gerade wünschenswert, da so auch eventuell private Informationen allen Benutzern zugänglich sind. An Universitäten wäre zum Beispiel die Matrikelnummer ein solches schützenswertes Attribut.

Um das Verstecken eines solchen Attributs zu realisieren gibt es jetzt 2 Möglichkeiten:

Man nimmt ein bereits existierendes Attribut im AD und versteckt es, oder man erstellt sich ein eigenes Attribut Matrikelnummer. Hierbei ist zu beachten, dass so genannte „Base Schema Attributes“ gibt, die nicht versteckt werden können.

Ist das Attribut ein Base Schema Attribut?

  • Man öffnet ldp.exe (Start -> Ausführen -> ldp.exe)
  • Über Connection -> Bind verbindet man sich zu seiner Domäne
  • Mit View-> Tree -> BaseDN: CN=Schema,CN=Configuration,DC=Domain,DC=local bekommt man eine Liste der Attribute des ADs (hierbei ist Domain und local durch IHREDOMAIN und IHREENDUNG zu ersetzen)
  • Man navigiert zu dem gewünschten Attribut, zum Beispiel „Employee-ID“
  • Ein Doppelklick zeigt rechts die Informationen des Attributs an
  • Steht hier systemFlags 0x10 = (FLAG_SCHEMA_BASE_OBJECT); so kann das Attribut nicht versteckt werden

Verstecken eines Attributs

Um ein Attribut zu verstecken, muss man folgende Schritte ausführen:

  • Man öffnet ADSI Edit (Start -> Ausführen -> adsiedit.msc)
  • und navigiert über Schema zu dem gewünschten Attribut
  • Ein Doppelklick öffnet die Eigenschaften des Attributs
  • Hier trägt man unter searchFlags den Wert 128 ein und bestätigt mit OK

Nun können nur noch Administratoren das Attribut sehen.

Erstellen eines eigenen Attributs

Um ein eigens Attribut zu erstellen öffnet man die MMC über Start -> Ausführen -> mmc

Hier fügt man über File -> Add/Remove Snap-in… -> Add… das Snap-in Active Directory Schema hinzu. (Falls dieses Fehlen sollte, kann man es wie unter [1] beschrieben installieren)

Nun erweitert man Active Directory Schema. Mit einem Rechtsklick auf den Ordner Attributes -> Create Attribute… und dem Bestätigen der Sicherheitswarnung kommt man zum Dialog zum Erstellen eines neuen AD-Attributs. Hierbei sollte man die Microsoft Richtlinien zur Namensgebung unter [2] beachten Die Eintragungen könnten zum Beispiel so aussehen:

  • Gemeinsamer Name: Matrikel-Nummer
  • LDAP-Anzeigename: matrikelNummer
  • Eindeutige X500-OID: %oidgen%.2.1
  • Beschreibung: Matrikelnummer
  • Syntax: Ganze Zahl
  • Minimum: 0
  • Maximum: 999999999

%oidgen%2.1 steht hierbei für ein Script von Microsoft. Es schlägt vor, wie die neue OID aussehen soll Den Quelltext finden sie hier: oidgen

Nach Bestätigen der Eingabe hat man ein neues AD-Attribut „matrikelNummer“ erstellt. Nun muss man dieses noch den Benutzern hinzufügen. Hierzu öffnet man den Ordner Classes. Ein Doppelklick auf users öffnet die Eigenschaften. Im Tab Attributes kann man über Add… nun das neu erstellte Attribut matrikelNummer hinzufügen. Nun nur noch alle Dialoge und Fenster mit OK schließen.

Um das neu erstellte Attribut zu verstecken geht man wie oben beschrieben vor und setzt searchFlags auf den Wert 128.

Das neue Attribut anzeigen und editieren

Im AD hat nun jeder Benutzer ein Attribut matrikelNummer, allerdings wird es in Active Directory Users and Computers (ADUC) noch nicht angezeigt und man kann es hier auch noch nicht bearbeiten. Um es nur anzuzeigen, genügt es der tabellarischen Ansicht eine Spalte Matrikelnummer hinzufügen:

Hierzu öffnet man ADSIEdit (Start –> Ausführen -> adsiedit.msc) und navigiert je nach Sprache des Systems zu einem der folgenden Punkte:

(deutsch)            - Configuration -> CN=DisplaySpecifieres -> CN=407 -> CN=container-Display (englisch)            - Configuration -> CN=DisplaySpecifieres -> CN=409 -> CN=container-Display

Hier fügt man unter extraColumns den Eintrag matrikelNummer, Matrikelnummer, 1,-1,0 hinzu und schon wird das zuvor erstellte Attribut matrikelNummer in einer zusätzliche Spalte im ADUC angezeigt.

Um eine solche Spalte nicht unter Users sondern in den jeweiligen OUs zu erhalten muss man das Ganze an einer anderen Stelle eintragen:

(deutsch)            - Configuration -> CN=DisplaySpecifieres -> CN=407 -> CN=organizationalUnit -Display (englisch)            - Configuration -> CN=DisplaySpecifieres -> CN=409 -> CN=organizationalUnit -Display

Wenn man den Eintrag allerdings nicht nur sehen sondern auch ändern möchte, sollte man sich einen zusätzlichen Kontextmenüeintrag anlegen:

Hierzu benötigen wir zu aller erst ein kleines Skript, welches das Attribut ausließt, es anzeigt und Änderungen zurück ins AD schreibt. Eine sehr einfache Variante wäre folgender Quelltext:

Option Explicit
Dim wshArguments, objUser, objSchemaMatrikelNummer, strCurrentMatrikelNummer, strMatrikelNummer, intMaxLen

On Error Resume Next

Set wshArguments = WScript.Arguments
Set objUser = GetObject(wshArguments(0))
Set objSchemaMatrikelNummer = GetObject("LDAP://schema/matrikelNummer")

intMaxLen = objSchemaMatrikelNummer.MaxRange
'intMaxLen = 100000

If objUser.matrikelNummer <> "" Then
    strCurrentMatrikelNummer = objUser.matrikelNummer
Else
    strCurrentMatrikelNummer = "empty"
End If

strMatrikelNummer = InputBox( _
    "Die aktuelle Matrikelnummer lautet " & strCurrentMatrikelNummer & vbCrLf & _
    vbCrLf & _
    "Tragen Sie bitte die neue Matrikelnummer ein (1 bis " & intMaxLen & " Zeichen)", _
    Right(objUser.Name, Len(objUser.Name) - 3) & " Matrikelnummer", _
    objUser.matrikelNummer)

If strMatrikelNummer = "" Then WScript.Quit 'User clicked Cancel

If Len(strMatrikelNummer) > intMaxLen Then
    MsgBox "Die neue Matrikelnummer ist zu lang und wird somit nicht gespeichert.", _
        vbCritical, "Fehler"
Else
    Err.Clear
    objUser.matrikelNummer = strMatrikelNummer
    objUser.SetInfo
    If Err Then MsgBox "Die neue Matrikelnummer wird nicht gespeichert.", _
        vbCritical, "Fehler"
End If

Diesen Quelltext speichert man nun an einem beliebigen Ort PFAD als matrikelNummer.vbs ab. Nun öffnen man wieder ADSIEdit (Start -> Ausführen -> adsiedit.msc) und navigiert je nach Sprache des Systems zu einem der folgenden Pfade: (deutsch)            - Configuration -> CN=DisplaySpecifieres -> CN=407 -> CN=user-Display (englisch)            - Configuration -> CN=DisplaySpecifieres -> CN=409 -> CN=user-Display

Hier fügt man unter dem Punkt adminContextMenu folgenden Eintrag hinzu:

2, Matrikelnummer, PFADmatrikelNummer.vbs

Hierbei kann man die 2 durch jede beliebige, noch nicht in den Einträgen auftauchende, Zahl ersetzen, es verändert sich lediglich die Position im Kontext Menü.

Nun hat man über das Kontextmenü des Benutzers eine Möglichkeit die Matrikelnummer direkt zu ändern.

Weiterführende Links:

[1] http://technet.microsoft.com/de-de/library/cc755885(WS.10).aspx [2] http://technet.microsoft.com/de-de/library/cc759633(WS.10).aspx