Eigene AD-Attribute - Änderungen mit Windows Server 2012

Dieser Artikel gilt für: Server 2012, Server 2012 R2

In meinen Blogeinträgen [1], [2] und [3] habe ich die Möglichkeiten vorgestellt, wie man eigene Attribute im AD erstellen kann, sie versteckt bzw. nur für wenige User sichtbar macht. Diese Lösung funktionierte bis Server 2008R2 problemlos. Mit Server 2012 gab es ein paar kleinere Änderungen am Verhalten des ADs, wodurch die Lösung so nicht mehr ganz praktikabel erscheint. Im Folgenden werde ich kurz die wichtigsten Änderungen auflisten und erklären, wie man auf das neue Verhalten reagieren muss.

Die Ausgangssituation

In diesem Blogeintrag gehen wir davon aus, dass ein Attribut matrikelNummer im AD angelegt wurde. Das searchFlag wurde auf 128 gesetzt und somit vor dem normalen User versteckt. (siehe [1]).

Eine extra Spalte im Active-Directory Users and Computers

Bisher konnte man ein zusätzliches Attribut im AD über den ADSI-Eintrag extraColumns zur entsprechenden Container-View hinzufügen. Der Eintrag

matrikelNummer, Matrikelnr, 1,-1,0

fügt das Attribut matrikelNummer als Spalte mit der Überschrift Matrikelnr in das Active-Directory Users and Computers hinzu (siehe [1]). Die 3 Zahlen nach der Spaltenüberschrift haben folgende Bedeutung: default visibility, width, unused

Default visibility muss hier entweder 0 oder 1 sein. Bei 0 ist die Spalte standardmäßig unsichtbar, bei 1 wird sie standardmäßig angezeigt. Width ist die Breite der Spalte in Pixeln. Gibt man hier den Wert -1 an, ist die Spalte so breit wie ihre Überschrift. Unused ist ein Wert, der bisher (inkl. Server 2012R2) noch keine Verwendung hat und muss daher 0 sein.

2008

2008

Das Problem in Server 2012 (und 2012R2)

Bis hierhin funktioniert alles auch unter Server 2012 wie gewünscht. Ein Problem gibt es allerdings, wenn man eine Spalte der Ansicht hinzufügen / entfernen möchte. Hier ist die Liste der verfügbaren Spalten leer.

2012Error

2012Error

Hier passiert folgendes: Im Normalfall greift der Container bei allen geerbten Attributen nicht nur auf seine eigenen Attribute zu, sondern immer auch auf die Attribute des übergeordneten Containers. In diesem Fall sollte der Container Container-Display für das Attribut extraColumns sowohl auf seine eigenen Einträge, als auch auf die Einträge des Containers Default-Display zugreifen.

Dieses Verhalten hat sich mit Server 2012 geändert. Hier wird nur auf den übergeordneten Container zugegriffen, wenn das eigene Attribut keine Einträge besitzt.

Die Lösung

Auch wenn dies aussieht wie ein Bug, laut einer MSDN-Seite [4] ist dies Absicht. Um nun also die verfügbaren Spalten wiederzubekommen, muss man wie folgt vorgehen:

Im ADSI-Edit unter

CN=Configuration,DC=DOMAIN,DC=ENDING

im Ordner

CN=DisplaySpecifiers

und hier im Ordner CN=407 (für deutsche Systeme) bzw. CN=409 (für englische Systeme) nimmt man sich das Element CN=Default-Display. Hier gibt es alle möglichen zusätzlichen Spalten unter extraColumns. Diese Einträge müssen nun in das Element CN=container-Display (bzw. CN=organizationalUnit-Display) übertragen werden.

Hier wird jetzt auch die Funktion des Wertes Default visibility deutlich.  Alle Spalten die mit dem Wert 0 hinzugefügt werden, sind über Add/Remove Columns verfügbar ohne direkt beim Öffnen angezeigt zu werden.

[1] https://www.escde.net/blog/attribute-im-ad-verstecken-und-eigene-attribute-erstellen
[2] https://www.escde.net/blog/ad-attribute-verstecken-teil-2-leserechte-fur-confidential-attributes
[3] https://www.escde.net/blog/eigene-ad-attribute-teil-2-enable-advanced-find
[4] http://msdn.microsoft.com/en-us/library/windows/desktop/ms677291(v=vs.85)