Tags:
create new tag
, view all tags

Nethz-Groups (Ngroups) Synchronisieren

Ausgangslage

Es wird für CQ - und allgemein für diverse bestehende Zielsysteme wie AD und LDAPS - ein System benötigt, welches Gruppen irgendwelcher Art aufnehmen und schnell in die Zielsysteme synchronisieren kann. Das System sollte wenn möglich weniger komplex und einfacher erweiterbar als das jetzige sein.

Zielsysteme (Destinations)

Beispiele verschiedener Zielsysteme, wie sie bereits existieren:

Name Zielsystem Beschreibung
Active Directory (AD) Enthält verschachtelte Gruppen für diverse Authorisierungszwecke
LDAPS Posix enthält flache (nicht verschachtelte) POSIX-Gruppen, die für Authorisierungen in UNIX-Systemen verwendet werden
NetNG (Realms) enthält flache Gruppen, die für Netzwerkzugriff Verwendung finden und im Netsup-Tool (vormals ISG-Tool) definiert werden
NetNG (Netsup) enthält flache Gruppen, die Verantwortlichkeiten für bestimmte Netzwerkbereiche definieren
LDAPS Silva bisheriges CMS-System. Gruppen-Namen werden in einen spezielllen Tree vom LDAPS geschrieben, die Gruppen-Mitgliedschaften werden flach im OU-Attribut der einzelnen User festgehalten
CQ neues CMS-System. Gruppen können verschachtelt geschrieben werden.

Datenbank-Grundgerüst

Bestehende Tabellen (IST-Zustand)

  • NGROUP Enthält alle Gruppen (Gruppennamen, Beschreibung, Typ etc.). Der Gruppenname darf innerhalb eines Gruppentyps nur einmal vorkommen.
  • NGROUP_TYPE (müsste eigentlich besser NGROUP_CATEGORY heissen)
  • NGROUP_MEMBER Mitglieder, enthält auch ROLE
  • NGROUP_INCLUDES Untergruppen einer NGROUP
  • NGROUP_RESPONSIBLE verantwortliche Gruppen und User für diese Gruppe

  • GRANTED_SERVICE welcher User welchen Service hat, d.h. welcher User in welchem Zielsystem erstellt worden ist
  • SYNC_UNAME welches Zielsystem für welchen User aktualisiert werden muss

Neu

  • DESTINATION Zielsysteme, nach denen synchronisiert wird. Hält fest, ob ein Zielsystem verschachtelte Gruppen aufnehmen kann oder nicht
  • NGROUP_DESTINATION hält fest, welche Gruppen wohin synchronisiert werden. Für jede Kombination von Gruppen und Zieldestination gibt es einen eigenen Datensatz (Details unten)
  • NGROUP_MANUAL_DESTINATION hält fest, welche Gruppe manuell exportiert wird
  • NGROUP_TYPE_DESTINATION hält fest, welche Gruppentypen generell in eine bestimmte Destination exportiert werden
  • SYNC_NGROUP_DESTINATION hält fest, welche Gruppen in welchen Zielsystemen noch synchronisiert resp. aktualisiert werden müssen
  • NGROUP_INCLUDES_CHANGES Zwischentabelle, welche die Änderungen an NGROUP_INCLUDES festhält
  • NGROUP_MEMBER_CHANGES Zwischentabelle, welche die Änderungen an NGROUP_MEMBER festhält

Grundüberlegungen NEW

MOVED TO... Vererbung wird in NGROUP_INCLUDES bereits festgelegt.

Eine Änderung INSERT an NGROUP_INCLUDE muss bewirken, dass

  • bei «flachen Destinationen
    • die Mitglieder der geänderten Übergruppe in SYNC_NGROUP_DESTINATION aktualisiert wird (MEMBERS_CHANGED)
  • bei hierarchisch organisierten Destinationen
    • die Mitglieder der geänderten Übergruppe in SYNC_NGROUP_DESTINATION aktualisiert wird (MEMBERS_CHANGED)
    • alle Untergruppen ebenfalls dorthin exportiert werden (SYNC_NGROUP_DESTINATION)

Eine Änderung DELETE an NGROUP_INCLUDE muss bewirken, dass

  • bei «flachen Destinationen
    • die Mitglieder der geänderten Übergruppe in SYNC_NGROUP_DESTINATION aktualisiert wird (MEMBERS_CHANGED)
  • bei hierarchisch organisierten Destinationen
    • die Mitglieder der geänderten Übergruppe in SYNC_NGROUP_DESTINATION aktualisiert wird (MEMBERS_CHANGED)
    • alle Untergruppen geprüft werden, ob sie immer noch dorthin exportiert werden
    • falls nicht, werden sie in SYNC_NGROUP_DESTINATION entsprechend markiert (GROUP_CHANGED = 'delete')

Eine Änderung INSERT/DELETE der Mitglieder NGROUP_MEMBER muss bewirken, dass

  • diese Gruppe in SYNC_NGROUP_DESTINATION aktualisiert wird (MEMBERS_CHANGED)
  • alle übergeordneten Gruppen durchgelaufen werden
    • falls übergeordnete Gruppe exportiert wird und Gruppe ist flach: MEMBERS_CHANGED in SYNC_NGROUP_DESTINATION

Eine Änderung an der Gruppe NGROUP muss bewirken, dass

  • diese Gruppe in SYNC_NGROUP_DESTINATION aktualisiert wird (GROUP_CHANGED)
  • gewisse Destinationen (wie CQ5) kennen keine Möglichkeit, Gruppen oder User umzubenennen
  • der zuständige Synchronisationsjob muss diesem Umstand Rechnung tragen

Eine Änderung INSERT in NGROUP_DESTINATION muss bewirken, dass

  • diese Gruppe in SYNC_NGROUP_DESTINATION eingefügt wird (GROUP_CHANGED = 'insert')
  • oder ein allfällig vorhandener Datensatz ein Update erfährt (wie oben)
  • (keine Unterscheidung, ob Gruppe manuell oder aufgrund des Typs in eine Destination exportiert wird)
  • bei Destination mit GROUP_IS_FLAT = 1
    • keine weiteren Änderungen
  • bei Destination mit GROUP_IS_FLAT = 0
    • alle Untergruppen durchlaufen
    • ebenfalls in SYNC_NGROUP_DESTINATION eintragen resp. aktualisieren

Eine Änderung DELETE in NGROUP_DESTINATION muss bewirken, dass

  • diese Gruppe in SYNC_NGROUP_DESTINATION zum löschen markiert wird (GROUP_CHANGED = 'delete')
  • bei Destination mit GROUP_IS_FLAT = 1
    • keine weiteren Änderungen
  • bei Destination mit GROUP_IS_FLAT = 0
    • alle Untergruppen durchlaufen
    • schauen, ob irgend eine übergeordnete Gruppe dorthin exportiert wird
    • falls nicht: ebenfalls in SYNC_NGROUP_DESTINATION zum löschen markieren

Eine Änderung INSERT oder DELETE in GRANTED_SERVICE muss bewirken, dass

  • alle Gruppen, in denen der User Mitglied ist, in den betroffenen Destinationen aktualisiert werden
  • zu beachten sind einerseits Gruppen, die direkt exportiert werden (NGROUP_DESTINATION)
  • andererseits durch Vererbung exportierte Gruppen (gilt nur für hierarchische Destinationen)
  • bei flachen Gruppen wird nur die direkt exportierte Gruppe aktualisiert

neue Tabellen im Detail

DESTINATION (Zielsystem)

Feld Beschreibung
DESTINATION_ID Primärschlüssel von DESTINATION
NAME Name des Zielsystems
DESCRIPTION Beschreibung
GROUPS_ARE_FLAT Gruppen sind in diesem System nicht verschachtelt (Untergruppen) sondern eben flach
NSID Fremdschlüssel von SERVICE. User müssen automatisch mit diesem Service (=Konto im Zielsystem) ausgestattet werden, um Inkonsistenzen zu vermeiden

Es existieren keine Trigger auf dieser Tabelle.

NGROUP_DESTINATION

Feld Beschreibung
GRID Fremdschlüssel von NGROUP.
DESTINATION_ID Fremdschlüssel von DESTINATION (Zielsystem dieser Gruppe)
MOD_BY Hinweis, welcher Trigger etc. den Eintrag geändert oder modifiziert hat
ZEITSTEMPEL Zeitpunkt des Eintrags oder der letzten Änderung

Enthält alle entweder manuell oder durch den Gruppentyp definierte Destinationen, wohin eine Gruppe exportiert wird. Exporte aufgrund von Vererbung werden durch entsprechende Trigger bewerkstelligt.

MOVED TO... NGROUP_DESTINATION_INS_AFT Änderungen werden in NGROUP_DESTINATION_CHANGES geschrieben

MOVED TO... NGROUP_DESTINATION_DEL_AFT Änderungen werden in NGROUP_DESTINATION_CHANGES geschrieben

NGROUP_DESTINATION_CHANGES Done

Feld Beschreibung
GRID Fremdschlüssel von NGROUP.
DESTINATION_ID Fremdschlüssel von DESTINATION (Zielsystem dieser Gruppe)
ACTION i für Insert oder d für Delete
ZEITSTEMPEL  Zeitpunkt der Änderung
MOD_BY Hinweis, welcher Trigger etc. den Eintrag gemacht hat

Alle Änderungen in der Tabelle NGROUP_DESTINATION werden in dieser Tabelle festgehalten. Die nachfolgend beschriebenen Trigger arbeiten die Tabelle ab und schreiben Aktionen in die Auftragstabelle SYNC_NGROUP_DESTINATION.

MOVED TO... NGROUP_DEST_CHANGES_INS_STMT Fügt bei hierarchischen Gruppen auch noch die entsprechende Untergruppen zu NGROUP_DESTINATION hinzu. Falls eine Gruppe bisher noch nicht exportiert wurde, wird ein Eintrag in der Tabelle SYNC_NGROUP_DESTINATION gemacht

MOVED TO... NGROUP_DEST_CHANGES_DEL_STMT Falls eine Gruppe nicht mehr exportiert wird, in SYNC_NGROUP_DESTINATION die Spalte GROUP_CHANGED auf 'delete' setzen

NGROUP_TYPE_DESTINATION Done

Diese Tabelle ist ein Template für alle Gruppen eines bestimmten Gruppentyps. Wenn ein bestimmter Gruppentyp nach einem Zielsystem Y synchronisiert wird (z.B. Leitzahl-Gruppen nach CQ) dann werden generell alle Gruppen dieses Gruppentyps synchronisiert. Exporte aufgrund des Gruppentyps können nicht noch manuell angepasst werden.

Feld Beschreibung
GTID Fremdschlüssel von NGROUP_TYPE
DESTINATION_ID Fremdschlüssel von DESTINATION

MOVED TO... NGROUP_TYPE_DEST_INS_AFT erstellt für alle Gruppen dieses Gruppentyps je einen neuen Datensatz in der Tabelle NGROUP_DESTINATION

MOVED TO... NGROUP_TYPE_DEST_DEL_AFT löscht für alle Gruppen dieses Gruppentyps die Datensätze in der Tabelle NGROUP_DESTINATION

SYNC_NGROUP_DESTINATION Done

Feld Beschreibung
GRID Fremdschlüssel von NGROUP
DESTINATION_ID Fremdschlüssel von DESTINATION
GROUP_CHANGED Gruppe an sich hat sich aktualisiert (NULL, insert, delete, update)
GROUP_MEMBERS_CHANGED Gruppenmitglieder müssen aktualisiert werden
ZEITSTEMPEL Zeitpunkt des Eintrags oder der letzten Änderung
MOD_BY Hinweis, welcher Trigger etc. den Eintrag geändert oder modifiziert hat
PROCESSED_BY_CRONJOB_AT gibt an, um welche Zeit der zuständige cronjob die Änderungen tatsächlich im Zielsystem nachvollzogen hat. Falls der cronjob ein GROUP_CHANGED=delete bemerkt, den job aber noch nicht abgearbeitet hat, dann kann er den Datensatz ungesehen löschen

Dies ist die Auftragstabelle für die cronjobs, welche die eigentliche Synchronisation in die Zielsystem-Systeme durchführen. Gruppen werden dann im Zielsystem aktualisiert, wenn

  • GROUP_CHANGED nicht NULL ist oder
  • GROUP_MEMBERS_CHANGED nicht 0 ist

Pro Gruppe und Destination gibt es jeweils nur genau einen Datensatz. Uns interessiert in der Regel nicht, was genau geändert hat. Es ist ausreichend, wenn beim Zeitpunkt der Synchronisation festgestellt wird, was genau die Differenz ist. Wenn die Gruppe gelöscht oder nicht mehr ins Zielsystem exportiert wird, steht bei GROUP_CHANGED der Wert 'delete'. Die Gruppe wird anschliessend vom zuständigen Synchronisationsjob auf dem Zielsystem gelöscht, danach wird dieser Datensatz aus der Tabelle entfernt.

NGROUP_INCLUDES_CHANGES Done

Feld Beschreibung
GRID Fremdschlüssel von NGROUP
INCLUDE_GRID Fremdschlüssel von NGROUP

Hilfstabelle für alle Änderungen in der Tabelle NGROUP_INCLUDES.

NGROUP_MEMBER_CHANGES Done

Feld Beschreibung
GRID Fremdschlüssel von NGROUP
NUID Fremdschlüssel von UNAME
ROLID Fremdschlüssel von ROLE
ACTION i für Insert oder d für Delete
ZEITSTEMPEL  Zeitpunkt der Änderung

Hilfstabelle für alle Änderungen in der Tabelle NGROUP_MEMBER sowie GRANTED_SERVICE.

weitere überarbeitete Trigger und Procedures im Detail

GRANTED_SERVICE Done

MOVED TO... GRANTED_SERVICE_INS_AFT macht Einträge in die Tabelle NGROUP_MEMBER_CHANGES, damit die Gruppen, in denen ein User Mitglied ist in den Zielsystemen aktualisiert werden.

MOVED TO... GRANTED_SERVICE_DEL_AFT Trigger macht Einträge in die Tabelle NGROUP_MEMBER_CHANGES, damit die Gruppen, in denen ein User Mitglied war in den Zielsystemen aktualisiert werden.

NGROUP_MEMBER Done

MOVED TO... NGROUP_MEMBER_INS_AFT Wird nach jedem INSERT-Statement aufgerufen und schreibt die Änderungen in NGROUP_MEMBER_CHANGES

MOVED TO... NGROUP_MEMBER_INS_AFT_STMT ruft NGROUP_MEMBER_CHANGES_PROC auf. Diese überprüft, welche Gruppen in welchen Zielsystemen aktualisiert werden müssen und schreibt dies in die Tabelle SYNC_NGROUP_DESTINATION.

MOVED TO... NGROUP_MEMBER_DEL_AFT Wird nach jedem DELETE-Statement aufgerufen und schreibt die Änderungen in NGROUP_MEMBER_CHANGES

MOVED TO... NGROUP_MEMBER_DEL_AFT_STMT ruft NGROUP_MEMBER_CHANGES_PROC auf.

NGROUP_INCLUDES_CHANGES_PROC Done

Arbeitet die Tabelle NGROUP_INCLUDES_CHANGES ab und erstellt Datensätze in der Tabelle NGROUP_DESTINATION. Wird von den Triggern NGROUP_INCLUDES_INS_AFT_STMT und NGROUP_INCLUDES_DEL_AFT_STMT aufgerufen.

NGROUP_MEMBERS_CHANGES_PROC Done

Arbeitet die Tabelle NGROUP_MEMBERS_CHANGES ab und erstellt Datensätze in der Tabelle SYNC_NGROUP_DESTINATION. Wird von den Triggern NGROUP_MEMBER_INS_AFT, NGROUP_MEMBER_DEL_AFT, GRANTED_SERVICE_INS_AFT, GRANTED_SERVICE_DEL_AFT aufgerufen

Testszenarien

Eine Reihe von Ereignissen führen dazu, dass eine Gruppe in der Zieldestination aktualisiert werden muss, d.h. in der Tabelle SYNC_NGROUP_DESTINATION muss vermerkt werden, dass die Gruppe zu aktualisieren ist.

1. Änderungen an der Gruppe

  1. eine neue Gruppe X vom Typ T wird erstellt
    • aufgrund der Angaben Tabelle NGROUP_TYPE_DESTINATION wird für alle Destinationen je einen Datensatz in NGROUP_DESTINATION erstellt
    • in der Tabelle SYNC_NGROUP_DESTINATION wird für alle Destinationen ein Datensatz erwartet (sofern noch nicht vorhanden)
  2. die Gruppe X wird gelöscht (Voraussetzung: ist in keinen anderen Gruppen mehr vorhanden)
    • in der Tabelle NGROUP_DESTINATION werden alle Einträge für diese Gruppe gelöscht
    • in der Tabelle SYNC_NGROUP_DESTINATION werden alle Einträge für diese Gruppe mit GROUP_CHANGED='delete' markiert
  3. die Gruppe X wird in Y umbenannt
    • in der Tabelle SYNC_NGROUP_DESTINATION werden alle Einträge für diese Gruppe mit GROUP_CHANGED='update' markiert
  4. die Gruppe X bekommt neue Mitglieder
    • in der Tabelle SYNC_NGROUP_DESTINATION werden alle Einträge für diese Gruppe mit GROUP_MEMBERS_CHANGED=1 gesetzt
    • alle übergeordneten Gruppen dieser Gruppe, welche in eine Destination mit flacher Gruppenstruktur exportiert werden, müssen in der Tabelle SYNC_NGROUP_DESTINATION mit GROUP_MEMBERS_CHANGED=1 markiert werden
  5. aus der Gruppe X werden Mitglieder entfernt
    • siehe d.

2. Änderungen an den Destinationen einer Gruppe

  1. Gruppe X wird neu nach Destination DH (Hierarchisches System) exportiert
    • Gruppe X wird in der Tabelle SYNC_NGROUP_DESTINATION geschrieben
    • alle Untergruppen von X werden ebenfalls in SYNC_NGROUP_DESTINATION geschrieben
  2. Gruppe X wird nicht mehr nach Destination DH (Hierarchisches System) exportiert
    • Gruppe X wird in der Tabelle SYNC_NGROUP_DESTINATION mit GROUP_CHANGED='delete' markiert, sofern sie nicht durch eine andere Vererbung nach DH exportiert wird
    • falls X gelöscht wird, müssen alle Untergruppen von X geprüft werden, ob sie immer noch nach DH exportiert werden
  3. Gruppe Y wird neu nach Destination DF (Flaches System) exportiert
    • Gruppe Y wird in die Tabelle SYNC_NGROUP_DESTINATION geschrieben
  4. Gruppe Y wird nicht mehr nach Destination DF (Flaches System) exportiert
    • Gruppe Y wird in der Tabelle SYNC_NGROUP_DESTINATION mit GROUP_CHANGED='delete' markiert

3. Änderungen an den Untergruppen einer Gruppe

  1. Untergruppe Y kommt zur Gruppe X hinzu
    • Gruppe X wird in der Tabelle SYNC_NGROUP_DESTINATION mit MEMBERS_CHANGED=1 markiert
    • alle von Gruppe X übergeordnete Gruppen, die in flache Destinationen exportiert werden, müssen in der Tabelle SYNC_NGROUP_DESTINATION mit MEMBERS_CHANGED=1 markiert werden
    • alle hierarchischen Destinationen von allen übergeordneten Gruppen von Gruppe X müssen bei Y und allen Untergruppen von Gruppe Y in der Tabelle SYNC_NGROUP_DESTINATION neu eingetragen werden
  2. Untergruppe Y geht von Gruppe X weg
    • Gruppe X wird in der Tabelle SYNC_NGROUP_DESTINATION mit MEMBERS_CHANGED=1 markiert
    • alle von Gruppe X übergeordnete Gruppen, die in flache Destinationen exportiert werden, müssen in der Tabelle SYNC_NGROUP_DESTINATION mit MEMBERS_CHANGED=1 markiert werden
    • Gruppe Y und alle Untergruppen von Y müssen geprüft werden, ob sie immer noch in alle hierarchischen Destinationen exportiert werden
    • falls nicht, müssen sie in der Tabelle SYNC_NGROUP_DESTINATION mit GROUP_CHANGED='delete' markiert werden

4. Änderungen an den Gruppentypen

  1. Gruppentyp T wird neu nach Destination D exportiert
    • alle Gruppen vom Typ T werden in die Tabelle NGROUP_DESTINATION eingetragen
    • alle Gruppen vom Typ T erscheinen in der Tabelle SYNC_NGROUP_DESTINATION mit GROUP_CHANGED='insert'
    • wenn Destination hierarchisch ist, werden auch alle Untergruppen aller Gruppen des Typs T in der Tabelle SYNC_NGROUP_DESTINATION eingefügt
  2. Gruppentyp T wird nicht mehr nach Destination D exportiert
    • alle Gruppen vom Typ T werden aus der Tabelle NGROUP_DESTINATION entfernt
    • für alle Gruppen vom Typ T:
    • wenn Destination flach ist, Gruppe in SYNC_NGROUP_DESTINATION mit GROUP_CHANGED='delete' markieren
    • wenn Destination hierarchisch ist und keine übergeordnete Gruppe existiert, die in diesselbe Destination exportiert wird:
    • diese Gruppe in der Tabelle SYNC_NGROUP_DESTINATION mit GROUP_CHANGED='delete' markieren
    • alle untergeordneten Gruppen prüfen, ob sie immer noch (via Vererbung) in diese Destination exportiert werden
    • allenfalls in der Tabelle SYNC_NGROUP_DESTINATION mit GROUP_CHANGED='delete' markieren

5. Änderungen an den Services eines Users

  1. User U bekommt neu den Service «DH» (und wird damit neu auch nach DH exportiert)
    • Alle Gruppen, in denen der User Mitglied ist und die direkt oder indirekt (d.h. durch Vererbung) exportiert werden in SYNC_NGROUP_DESTINATION mit MEMBERS_CHANGED=1 markieren
  2. Dem User U wird der Service «DH» entzogen und damit nicht mehr nach DH exportiert
    • Alle Gruppen, in denen der User Mitglied ist und die direkt oder indirekt (d.h. durch Vererbung) exportiert werden in SYNC_NGROUP_DESTINATION mit MEMBERS_CHANGED=1 markieren
  3. User U bekommt neu den Service «DF» (und wird damit neu auch nach DF exportiert)
    • Alle übergeordneten Gruppen aller Gruppen, in denen der User Mitglied ist in SYNC_NGROUP_DESTINATION mit MEMBERS_CHANGED=1 markieren
  4. Dem User U wird der Service «DF» entzogen und damit nicht mehr nach DF exportiert
    • Alle übergeordneten Gruppen aller Gruppen, in denen der User Mitglied ist in SYNC_NGROUP_DESTINATION mit MEMBERS_CHANGED=1 markieren

1.c. eine Gruppe X wird neu nach Destination D exportiert

  • Gruppe X kriegt einen Datensatz in NGROUP_DESTINATION (Fall 1).
  • Alle Untergruppen bekommen einen Datensatz in NGROUP_DESTINATION mit INHERITED_FROM_GRID = X und DESTINATION_ID = D, sofern die Destination Untergruppen kennt (GROUPS_ARE_FLAT=0)
  • Ein Trigger auf NGROUP_DESTINATION macht für jeden neuen Datensatz einen Eintrag in der Tabelle SYNC_NGROUP_DESTINATION

1.d. eine Gruppe X wird nicht mehr nach Destination D exportiert

  • Gruppe X verliert ihren Datensatz in NGROUP_DESTINATION (Fall 1)
  • Alle Untergruppen verlieren ebenfalls Ihren Datensatz in NGROUP_DESTINATION für INHERITED_FROM_GRID = X und DESTINATION_ID = D, sofern die Destination Untergruppen kennt (GROUPS_ARE_FLAT=0)
  • Ein Trigger NGROUP_DESTINATION_DEL_AFT auf NGROUP_DESTINATION macht für jeden gelöschten Datensatz einen Eintrag in der Tabelle SYNC_NGROUP_DESTINATION, wobei für diese Gruppe und Destination das Flag CHECK_GROUP_STILL_EXPORTED auf 1 gesetzt wird
  • die Synchronisations-Prozedur prüft bei jeder zu synchronisierenden Gruppe, ob sie noch über andere Wege nach D exportiert wird oder nicht

2.a. Mitglied kommt zur Gruppe X hinzu

  • für Gruppe X wird in der Tabelle SYNC_NGROUP_DESTINATION das Flag MEMBERS_CHANGED = 1 gesetzt
  • alle übergeordneten Gruppen durchlaufen
  • wenn eine dieser übergeordneten Gruppen in eine Destination exportiert wird, die keine verschachtelten Gruppen kennt (GROUPS_ARE_FLAT=1), wird für diese in der Tabelle SYNC_NGROUP_DESTINATION das Flag MEMBERS_CHANGED = 1 gesetzt
  • geschieht, wenn ein User den entsprechenden Service erteilt bekommt
  • oder der Gruppe X zugewiesen wird

2.b. Mitglied geht von Gruppe X weg

  • für Gruppe X wird in der Tabelle SYNC_NGROUP_DESTINATION das Flag MEMBERS_CHANGED = 1 gesetzt
  • alle übergeordneten Gruppen durchlaufen
  • wenn eine dieser übergeordneten Gruppen in eine Destination exportiert wird, die keine verschachtelten Gruppen kennt (GROUPS_ARE_FLAT=1), wird für diese in der Tabelle SYNC_NGROUP_DESTINATION das Flag MEMBERS_CHANGED = 1 gesetzt
  • geschieht, wenn einem User der entsprechende Service entzogen wird
  • oder aus der Gruppe X entfernt wird

3.c. Untergruppe Y kommt zur Gruppe X hinzu

  • wie bei 3.a.
  • sofern Gruppen in Destination D verschachtelt (GROUPS_ARE_FLAT=0): Gruppe Y und alle ihr untergeordneten Gruppen durchlaufen
  • je einen Datensatz in der Tabelle NGROUP_DESTINATION erstellen / aktualisieren mit Destination D, Gruppe und INHERITED_FROM_GRID der jeweils übergeordneten Gruppe
  • ein Trigger NGROUP_DESTINATION_INS_AFT erstellt/aktualisiert dann jeweils den entsprechenden Datensatz in SYNC_NGROUP_DESTINATON und setzt das Flag CHECK_GROUP_STILL_EXPORTED auf den Wert 1
  • Grundgedanke: eine Gruppe Y kann nur einmal direkt von einer übergeordneten Gruppe X erben, aber sie kann u.U. mehrmals von dieser übergeordneten Gruppe X erben (über andere Verbindungen)

3.d. Untergruppe Y geht von Gruppe X weg

  • wie bei 3.b.
  • sofern Gruppen in Destination D verschachtelt (GROUPS_ARE_FLAT=0): Gruppe Y und alle ihr untergeordneten Gruppen durchlaufen
  • alle Datensätze in der Tabelle NGROUP_DESTINATION mit Destination, Gruppe und INHERITED_FROM_GRID der jeweils übergeordneten Gruppe löschen
  • ein Trigger NGROUP_DESTINATION_DEL_AFT aktualisiert dann jeweils einen Datensatz in SYNC_NGROUP_DESTINATON und setzt das Flag CHECK_GROUP_STILL_EXPORTED auf 1, damit die Gruppe später vom periodischen DBMS-Job CHECK_GROUP_STILL_EXPORTED dahingehend überprüft werden kann, ob sie immer noch ins Zielsystem D exportiert wird oder nicht.
  • Falls dies nicht der Fall ist, wird das Flag GROUP_CHANGED auf delete und die Gruppe später vom eigentlichen Synchronisationsjob auf dem Destinations-System gelöscht sowie
  • Im umgekehrten Fall wird das Flag GROUP_CHANGED wieder auf NULL gesetzt

4.a. Gruppentyp T wird nach Destination D exportiert DONE

  • für alle Gruppen dieses Typs je einen Datensatz in NGROUP_DESTINATION erstellen
  • wird durch den Trigger NGROUP_TYPE_DEST_INS_AFT bewerkstelligt

4.a. Gruppentyp T wird nicht mehr nach Destination D exportiert DONE

  • alle Gruppen dieses Typs und dieser Destination in NGROUP_DESTINATION löschen
  • wird durch den Trigger NGROUP_TYPE_DEST_DEL_AFT bewerkstelligt

5.a. User U bekommt neu den Service «D» und wird damit neu auch nach D exportiert

  • wie bei 2.a.
  • verschachtelte Gruppen: alle Gruppen, in denen U direktes Mitglied ist, müssen aktualisiert werden
  • flache Gruppen: alle übergeordnete Gruppen, die Gruppen enthalten, in denen U Mitglied ist, müssen aktualisiert werden
  • U muss aus dem Zielsystem entfernt werden
  • TODO muss durch einen Trigger auf GRANTED_SERVICE bewerkstelligt werden

5.b. User U wird der Service «D» entzogen und damit nicht mehr nach D exportiert

  • wie bei 2.b.
  • bei Zielsystemen mit verschachtelten Gruppen reicht es in der Regel, wenn einfach der User gelöscht wird
  • bei flachen Gruppen: alle übergeordnete Gruppen, die Gruppen enthalten, in denen U Mitglied ist, müssen aktualisiert werden
  • User U aus Zielsystem entfernen
  • TODO muss durch einen Trigger auf GRANTED_SERVICE bewerkstelligt werden

6. Name/Beschreibung einer Gruppe wird geändert

7. Username ändert

  • Die Tabelle SYNC_UNAME enthält für jeden «externen» Service pro Username einen Eintrag
  • wenn der Username ändert, wird in dieser Tabelle festgehalten, welche Services (d.h. Zielsysteme) aktualisiert werden müssen
  • in gewissen Zielsystemen (wie z.B. CQ!) können Benutzer nicht umbenannt werden
  • Sie müssen gelöscht, anschliessend neu erstellt und in allen bisherigen Guppen hinzugefügt werden.

Randbedingungen

Eine Synchronisationsjob für das Zielsystem muss sich darauf verlassen können, dass alle User, die einen bestimmten Service haben und also in ein bestimmtes Zielsystem exportiert werden, dort auch tatsächlich vorhanden sind. Falls ein Gruppenmitglied trotzdem nicht gefunden werden kann, sollte eine Warnung ausgegeben werden. Die Gruppe sollte gleichwohl (wenn auch unvollständig) im Zielsystem aktualisiert werden, in der DB bleibt aber das Flag SYNC_NGROUP_DESTINATION.GROUP_MEMBERS_CHANGED gesetzt, so dass bei jedem Durchlauf des cronjobs erneut versucht wird, die Gruppe korrekt zu synchronisieren.

Es kann zur Zeit nicht verhindert werden, dass eine Gruppe in ein Zielsystem exportiert wird. In der Praxis wird so etwas wahrscheinlich selten gefordert.

Gruppenzugehörigkeit, Rollen, Privilegien und Services

Services In nethz werden Kontos auf Zielsystemen traditionellerweise als Service bezeichnet. So bekommen alle Mitarbeiter und Studierende automatisch einen Mailbox-Service, welcher gleichzeitig auch einen Account im Active Directory beinhaltet. Viele der Services enthalten implizite Privilegien, da externe Systeme, welche mit diesen Kontos eine Authentisierung durchführen, oft keine anschliessende Autorisierung durchführen.

Rollen Üblicherweise werden im Bereich Identity Management Rollen oft als eine Sammlung von Tätigkeiten (Operations) bezeichnet. Um diese Tätigkeit auszuführen, werden wiederum eine Reihe von Berechtigungen / Privilegien benötigt. In nethz werden gewisse Rollen ebenfalls als Service behandelt. So gibt es zum Beispiel die Rolle des Administrators, die als Service einem User vergeben wird. Gleichzeitig wird dieser User einer bestimmten Administratoren-Gruppe zugeordnet und die Detail-Privilegien erteilt. Eine blosse Zuteilung zu einer Admingruppe berechtigt zur Verwendung der «Show User» Applikation.

Privilegien Als Privileg wird eine Berechtigungseinheit (im technischen Sinne) bezeichnet, die einem User erteilt werden kann. In nethz gibt es einige Services, welche als Privileg bezeichnet werden können, beispielsweise die Berechtigung, Studentenlisten zu erstellen.

Gruppenzugehörigkeiten ETH-Angehörige werden in verschiedenste Personen-Gruppen eingeteilt, z.B. Personenkategorien (Mitarbeiter, Student, Dozent, ETH-nahe etc.), Leitzahlgruppen, Gruppen aufgrund der Einschreibung (Departement, Studiengang, Semester). Angehörige bestimmter Personenkategorien bekommen automatisch bestimmte Services zugewiesen. Die einfache Gruppenzugehörigkeit wird so gleichzeitig zu einer Rollenzuteilung, welche wiederum eine Reihe von Privilegien (Berechtigungen, z.B. VPN-Zugang) aber auch Dienstleistungen (Mailbox) beinhaltet.

-- SwenVermeul - 2013-05-06

Topic revision: r24 - 2013-09-04 - vermeul
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback