Dist-Verwaltung in Kombination mit Active Directory – Neusortierung/Synchronisation von Benutzern ohne Verlust der Historie

Der, in diesem Kapitel beschriebene, Workaround muss auf Basis der WinCC OA-Version 3.17 oder höher erfolgen, d.h. die Projekte müssen vorher auf 3.17 oder höher migriert worden sein!

VORSICHT:

Um dieses Problem zu vermeiden, verwenden Sie die Konfigurationseinträge "lowestUserId im Abschnitt [auth] und firstLoginEnabled im Abschnitt [distsync] Sektion. Daher ist die unten beschriebene Problemumgehung nicht erforderlich.

Problematik (anhand eines einfachen Beispiels):

Ein verteiltes System, bestehend aus zwei WinCC OA-Projekten ist miteinander und mit einem Active-Directory verbunden.

Active Directory-Server Vorhandene Benutzer:
Testuser1
Testuser2
Testuser3

WinCCOA-Dist-System1

  1. Lokaler Anmeldevorgang mit “Testuser1”
  2. “Testuser1” wird mit ID 1 angelegt und mit AD abgeglichen

  1. Lokaler Anmeldevorgang mit „Testuser2“ -> Bekommt ID 2
  2. Lokaler Anmeldevorgang mit „Testuser3“ -> Bekommt ID 3

WinCCOA-Dist-System2

  1. Lokaler Anmeldevorgang mit “Testuser3”
  2. “Testuser3” wird mit ID 1 angelegt und mit AD abgeglichen

  1. Lokaler Anmeldevorgang mit „Testuser1“ -> Bekommt ID 2

Aufgrund dieser Anmeldevorgänge ergeben sich somit folgende angelegte WinCC OA-Benutzer auf beiden Systemen:

System1

(Benutzername)

System1

(WinCCOA-Benutzer-ID)

System2

(Benutzername)

System2

(WinCCOA-Benutzer-ID)

Testuser1 1 Testuser3 1
Testuser2 2 Testuser1 2
Testuser3 3 - -

Wenn sich nun z.B. am System2 der Benutzer „Testuser1“ mit einem Userinterface einloggt, einen Sollwert setzt (z.B. Durchfluss-Zahl), so wird dies am System2 mit der Benutzer-ID 2 archiviert.

Wird später eine historische Abfrage von einem Userinterface ausgeführt, welches direkt am System2 geöffnet wird, wird als Ergebnis zurückgeliefert, dass der Benutzer mit der ID 2 (also „Testuser1“ auf dem System2) den Wert gesetzt hatte.

Öffnet man jedoch direkt am System1 ein Userinterface, welches dann über die verteilten Systeme hinweg die historische Abfrage von System2 auf diesen Sollwert macht, so wird als Ergebnis ebenfalls zurückgeliefert, dass der Benutzer mit der ID 2 den Wert gesetzt hat. Interpretiert wird diese ID 2 aber für die Anzeige (z.B. auf einer Auswertetabelle) auf Basis der lokalen Benutzer am System1. Daher würde fälschlicherweise hier Testuser2 als derjenige angezeigt werden, der den Sollwert gesetzt hatte.

VORSICHT:

Um dieses Verhalten zu vermeiden, ist es unumgänglich, dass auf ALLEN verteilten Systemen eines gemeinsamen Verbundes, die WinCC OA – Benutzer absolut identisch (Name, Reihenfolge/ID) sind.

Hierfür kann man das WinCC OA – Feature "Dist-Verwaltung" verwenden, womit es unter anderem möglich ist, die WinCC OA-Benutzer über einen Dist-Verbund hinweg synchron zu halten.

Dazu muss EIN System des Verbundes als „Master“ definiert werden (also als eine Art „Kopiervorlage“). Alle anderen Systeme werden mit den Daten von diesem Mastersystem synchronisiert (one way, d.h. alles auf den anderen Systemen wird überschrieben).

Im o.a. Beispiel würde z.B. das System1 nun als „MASTER“ definiert werden, weil auf dem „MASTER“ alles korrekt ist und es somit die Referenz darstellt.

Vor Synchronisation:

System1

(MASTER)

(Benutzername)

System1

(MASTER)

(WinCC OA-Benutzer-ID)

System2

(Benutzername)

System2

(WinCC OA-Benutzer-ID)

Testuser1 1 Testuser3 1
Testuser2 2 Testuser1 2
Testuser3 3 - -

Nach der Synchronisation:

System1

(MASTER)

(Benutzername)

System1

(MASTER)

(WinCC OA-Benutzer-ID)

System2

(Benutzername)

System2

(WinCC OA-Benutzer-ID)

Testuser1 1 Testuser1 1
Testuser2 2 Testuser2 2
Testuser3 3 Testuser3 3

Die Benutzer wären somit synchron und eine historische Abfrage würde zur Benutzer-ID 2 nun immer den „Testuser2“ zur Anzeige bringen, egal von welchem Userinterface auf welchem System die Abfrage stattfindet.

Für Anfragezeiträume „vor der Synchronisation“ wäre das jedoch auf System2 inkorrekt, denn die o.a. Anfrage sollte für solche historischen Werte dort „Testuser1“ mit der ID 2 assoziieren!

Nur für Abfragen auf einen Zeitraum „nach der Synchronisation“ soll für die ID 2 immer der „Testuser2“ ermittelt werden!

Dieses Problem mit den historischen Daten kann man nur auflösen, indem man die angelegten Benutzer (auf allen Systemen), welche vor der Synchronisation präsent waren, in der ID-Range komplett von den Benutzern nach der Synchronisation entkoppelt.

Der Lösungsweg ist daher folgender (mit Verwendung der „Dist-Verwaltung“ und System1 als Master):

An dieser Stelle wird empfohlen, von allen beteiligten Systemen einen ASCII-Export der Originalwerte der Datenpunkte _Users, _Groups, _Areas auszuführen! Diese Exporte sollten zu Archivierungszwecken gespeichert werden!

WinCCOA-Dist-System1 (MASTER)

  1. Testuser1, Testuser2, Testuser3 löschen (mit der „Löschen“-Funktion der WinCC OA-Benutzerverwaltung. Öffnen Sie die Benutzerverwaltung über das System Management-> Berechtigung - > Benutzerverwaltung)

  1. Neue Loginvorgänge mit Testuser1, Testuser2, Testuser3 ausführen und eine höhere ID vergeben. Vergeben Sie manuell neue Benutzer-IDs ab Nummer 500!
  2. Benutzersynchronisation auf alle Systeme über die Dist-Verwaltung auslösen
  3. „Datum X“ dieser Synchronisation als wichtigen Meilenstein vormerken!

WinCCOA-Dist-System2

  1. Testuser3, Testuser1 löschen sowie unter Punkt 1 beschrieben

Nach diesem Schritt ergibt sich daher die folgende Benutzeranordnung in den Systemen. Die _DeletedUsers bleiben auf allen Systemen unverändert, da diese nicht durch die Dist-Verwaltung abgeglichen wurden.

Datenpunkttyp

System1

(MASTER)

(Benutzername)

System1

(MASTER)

(WinCCOA-Benutzer-ID)

System2

(Benutzername)

System2

(WinCCOA-User-ID)

_DeletedUsers Testuser1 1 Testuser3 1

_DeletedUsers

Testuser2 2 Testuser1 2
_DeletedUsers Testuser3 3 - -
_Users Testuser1 500 Testuser1 500
_Users Testuser2 501 Testuser2 501
_Users Testuser3 502 Testuser3 502

Künftige Abfragen auf Zeiträume NACH „Datum X“ werden somit auf allen Systemen (und zu allen Systemen) immer dieselbe User/ID – Kombination liefern und demnach korrekt angezeigt werden.

Für historische Abfragen sind pro System (in den „_DeletedUsers“) immer noch die alten IDs (mit niedrigen Nummern) hinterlegt und es kann keine Verwechslung stattfinden. Ein Rückschluss auf den historisch korrekten Benutzernamen ist für die Zeiträume VOR „Datum X“ nun technisch möglich. Wenn die archivierte ID in den aktiven Benutzern nicht gefunden wird, kann diese von den _DeletedUsers programmiertechnisch ermitteln werden.