Lade...
 

ClassiX® Information Security System

ClassiX® Information Security System

InstantView® greift auf die Daten der Modellobjekte zu (lesend und/oder schreibend). Diese Zugriffe können durch Security-Objekte eingeschränkt werden. Security-Objekte steuern auch die Berechtigung zum Erzeugen oder Löschen eines Objekts. (Eine Anwender orientierte Übersicht über Zugriffsrechte von Benutzern finden Sie hier).

Darüber hinaus können InstantView®-Messages gesperrt werden, um den Zugang zu bestimmten Teilen einer Anwendung zu verhindern  (CX_MESSAGE_SECURITY), und mit Objekten der Klasse CX_SECURITY_OPTIONS werden bestimmte Funktionen des ClassiX®-Systems erlaubt oder verboten.

Security-Objekte können kombiniert werden, um mit geringem Aufwand differenzierte Zugriffsrechte bis hin zum einzelnen Datenfeld und/oder einzelnen Objekt zu definieren. Die Security-Objekte wurden so entworfen, dass ausgehend von allgemein gültigen Rechten Abweichungen für bestimmte Objektgruppen angegeben werden können und diese Spezialisierung rekursiv fortgesetzt werden kann.

Solange kein Security-Objekt beim ClassiX®-System angemeldet ist, führt das System keine Überprüfung der Zugriffsrechte statt. Sobald ein solches Security-Objekt angemeldet ist, werden Zugriffsrechte überprüft. Wenn die Zugriffsrechte es erlauben, kann ein anderes Security-Objekt angemeldet werden. Man kann aber nicht zum Ausgangszustand des Arbeitens ohne Security zurückkehren.

Jedes Security-Objekt kann durch Aufruf seiner Funktion:

VOID Register VOID

beim ClassiX®-System angemeldet werden.

Es ist sinnvoll, ein Security-Objekt mit dem Anwender-Objekt CX_USER zu verbinden, damit ersteres beim Aufruf der Funktion Login() angemeldet wird und die Rechte des Anwenders bestimmt, der durch das CX_USER-Objekt beschrieben wird.    

Wenn die Datenbank ein Objekt der Klasse CX_MASTER_SECURITY enthält, wird dieses bereits beim Start des ClassiX®-Systems angemeldet.

Klasse CX_CLASS_SECURITY

name STRING ein beliebiger Name
objectClassID ENUMSHORT identifiziert die Klasse, für die Zugriffsrechte definiert werden.
accessExpressions COLLECTION Objekte der Klasse CX_ATTRIBUTE_SECURITY
specializations COLLECTION untergeordnete Security-Objekte
flags[0]
Lesen 1 - erlaubt, 0 - verboten
flags[1]
Schreiben 1 - erlaubt, 0 - verboten
flags[2]
Objekt erzeugen 1 - erlaubt, 0 - verboten
flags[3]
Objekt löschen 1 - erlaubt, 0 - verboten
flags[4]
Klassentyp 0 - gilt auch für abgeleitete Klassen, 1 - nur für angegebene Klasse

Für alle Objekte einer Klasse werden Zugriffsrechte festgelegt. Die Schreib- und Leserechte gelten zunächst für alle Datenfelder (einschließlich dynamischer Datenfelder) der Klasse. Für bestimmte Zugriffsausdrücke können mit Objekten der Klasse CX_ATTRIBUTE_SECURITY hiervon abweichende Rechte definiert werden: Feld accessExpressions.

Objekte der Klasse CX_CLASS_SECURITY beschreiben die Zugriffsrechte für eine Menge von Objekten. Das Datenfeld specializations verweist auf (untergeordnete) Security-Objekte mit abweichenden Festlegungen für Teilmengen (z.B. für abgeleitete Klassen oder für ausgewählte Instanzen einer Klasse). Die untergeordneten Security-Objekte werden nur dann ausgewertet, wenn schon das übergeordnete Objekt bereits eine Aussage liefern könnte.

Beispiel:

Es existieren die Klassen A, A1, A2 und B, wobei A1 und A2 von A abgeleitet sind:

CX SECURITY SET Tree

Ein CX_CLASS_SECURITY-Objekt für A - Bit flags(4) sei 0 - beschreibt die Zugriffsrechte für alle Objekte der Klassen A, A1 und A2: Objektmenge MA. Für Objekte der Klasse A1 sollen abweichende Rechte gelten (Menge MA1). Wegen MA > MA1 beschreibt das entsprechende Security-Objekt eine Spezialisierung und kann dem Security-Objekt für A untergeordnet werden. Das gleiche gilt für ein Objekt der Klasse CX_OBJECT_SECURITY, das sich auf ausgewählte Instanzen von A1 bezieht:  MA > MA1> MObjects. Dagegen ist es sinnlos, ein Security-Objekt für Klasse B als Spezialisierung des Objekts für A aufzufassen: MB ist keine Teilmenge von MA.

CX SECURITY SET3

Klasse CX_OBJECT_SECURITY

name STRING ein beliebiger Name
objects OBJECT Objekte, deren Zugriffsrechte beschrieben werden  
accessExpressions COLLECTION Objekte der Klasse CX_ATTRIBUTE_SECURITY
specializations COLLECTION untergeordnete Security-Objekte
flags[0]
Lesen 1 - erlaubt, 0 - verboten
flags[1]
Schreiben 1 - erlaubt, 0 - verboten
flags[2]
Objekt erzeugen 1 - erlaubt, 0 - verboten
flags[3]
Objekt löschen 1 - erlaubt, 0 - verboten
flags[4]
Klassentyp 0 - gilt auch für abgeleitete Klassen, 1 - nur für angegebene Klasse

Während Objekte der Klasse CX_CLASS_SECURITY die Rechte aller Objekte einer Klasse beschreiben, können mit CX_OBJECT_SECURTIY-Objekten die Rechte für ganz bestimmte Objekte definiert werden.

 

Klasse CX_ATTRIBUTE_SECURITY

name STRING ein Zugriffsausdruck
flags[0]
Lesen 1 - erlaubt, 0 - verboten
flags[1]
Schreiben 1 - erlaubt, 0 - verboten

Die Klasse CX_ATTRIBUTE_SECURITY liefert die Elemente mit denen Objekte der Klassen CX_CLASS_SECURITY und CX_OBJECT_SECURITY Rechte für einzelnen Datenfelder beschreiben können.

Im Feld name kann nicht nur der Name eines Datenfelds sondern auch ein navigierender Zugriffsausdruck angegeben werden. Für Funktionsaufrufe und Indizes gelten folgende zusätzliche Verallgemeinerungen:

Werden Funktionsparameter weggelassen:

    . . . a.Foo().b ...

so trifft das Objekt für alle InstantView®-Zugriffe mit Ausdrücken der obengenannten Form zu, unabhängig davon, welche Parameter für den Aufruf von Foo() angegeben sind. Werden jedoch im CX_ATTRIBUTE_SECURITY-Objekt jedoch Funktionsparameter angegeben, so beschreibt dieses nur Zugriffe mit exakt identischem Ausdruck.

Werden Indizes weggelassen, wie z.B. in

    . . . a.collection[].b . . .

so beschreibt das Objekt die Rechte aller Zugriffe mit Ausdrücken der obengenannten Form mit beliebigen Indexangaben. Wenn im  CX_ATTRIBUTE_SECURITY-Objekt ein Index angegeben wird, gilt es nur für Zugriffsausdrücke mit exakt diesem Index.

Beispiele:

CX_ATTRIBUTE_SECURITY::name gilt für InstantView®-Zugriffsausdruck ?
birthday.AgeInYMD() birthday.AgeInYMD(today) ja
birthday.AgeInYMD(x) birthday.AgeInYMD(today) nein
access[].city
access[0].city
ja
access[0].city
access[x].city
nein (auch wenn InstantView®-Variable x den Wert 0 hat)

 

Klasse CX_SECURITY_SET

name STRING ein beliebiger Name
securityObjects OBJECT Security-Objekte 

Objekte dieser Klasse dienen dazu, Objekte der Klassen CX_CLASS_SECURITY, CX_OBJECT_SECURITY und CX_MESSAGE_SECURITY sowie weitere CX_SECURITY_SET-Objekte zusammenzufassen.

CX_SECURITY_SET ist als Zusammenfassung von Security-Objekten gedacht, die Zugriffsrechte für disjunkte Objektmengen beschreiben - d.h. der Fall einer Spezialisierung für die Kopplung mit Datenfeld specializations liegt nicht vor. Man kann aber auch - statt der Unterordnung mittels  specializations - allgemeine und spezielle Beschreibungen in einem Security-Set zusammenfassen wenn die Reihenfolge in securityObjects garantiert, dass spezielle Objekte immer vor allgemeineren kommen.

Beispiel:

Es existieren die Klassen A, A1, A2 und B. A1 und A2 sind von A abgeleitet, während B unabhängig von A ist:

CX SECURITY SET Tree

Zugriff zu Objekten der Klassen A, A1 und B werden mit CX_CLASS_SECURITY-Objekten definiert. Für einige Instanzen von A1 sollen abweichende Rechte gelten (CX_OBJECT_SECURITY). Möglichkeiten, dies zu realisieren sind

  • Nur die Security-Objekte für die Klassen A und B sind im Security-Set. Der allgemeinen Angabe für Klasse A wird die Spezialisierung für die abgeleitete Klasse A1 und dieser das CX_OBJECT_SECURITY-Objekt untergeordnet:
    CX SECURITY SET1
  • Alle Security-Objekte sind direkt dem Security-Set zugeordnet. Die Reihenfolge der Security-Objekte, die sich auf A und A1 beziehen ist wesentlich:
    CX SECURITY SET2

Beide Varianten sind - bis auf das Zeitverhalten - gleichwertig. An der Kontrolle des Zugriffs zu Objekten der Klasse B sind im ersten Fall zwei, im zweiten Fall vier Security-Objekte beteiligt.

 

Klasse CX_MESSAGE_SECURITY

name STRING ein beliebiger Name
messages COLLECTION CX_STRING-Objekte = Namen der Messages

Mit diesem Objekt kann der Zugang zu bestimmten Teilen einer Anwendung kontrolliert werden. Wenn das CX_MESSAGE_SECURITY-Objekt (direkt oder als Bestandteil eines CX_SECURITY_SET-Objekts) angemeldet wird, werden alle Messages, deren Name in messages genannt wird, gesperrt. Dies gilt auch für die Definition neuer Messages. Ob eine Message gesperrt ist, kann mit TestMsg festgestellt werden.

 

Klasse CX_SECURITY_OPTIONS

name STRING ein beliebiger Name
pattern1 INTEGER 32-Bits für beliebige Optionen
pattern2 INTEGER 32-Bits für beliebige Optionen
pattern3 INTEGER 32-Bits für beliebige Optionen

Bisher sind folgende Bits belegt:

Datenfeld Bit Bedeutung für kein CX_SECURITY_OPTIONS-Objekt angemeldet:
0 1
pattern1 0 Monitorwindow gesperrt Monitorwindow kann mit Alt+rechte Maustaste gestartet werden Monitorwindow kann mit Alt+rechte Maustaste gestartet werden
1-31 frei    
pattern2 0-31 frei    
pattern3 0-31 frei    

 

Klasse CX_MASTER_SECURITY

In einer Datenbank existiert maximal ein solches Objekt, und mit seiner Existenz wird verhindert, dass man mit den Mitteln von InstantView® auf die Daten der Datenbank zugreifen kann, ohne dass vorher ein erfolgreiches Login stattgefunden hat. Diese Restriktion kann man allerdings umgehen, wenn man das Passwort des Master-Security-Objektes kennt. 

Wenn die Datenbank ein Objekt der Klasse CX_MASTER_SECURITY enthält, wird dieses bereits beim Start des ClassiX®-Systems aktiviert. Das Master-Security-Objekt sendet beim ersten Security-Test das Systemereignis MASTER_PASSWORD und erwartet die Rückgabe eines Passwortes. 
Wird auf diese Message reagiert und mit dem richtigen Passwort geantwortet, bestehen volle Zugriffsrechte. 
Andernfalls kann auf die Datenbank überhaupt nicht zugegriffen werden. Lediglich der Aufruf bestimmter Funktionen ist möglich, damit eine Login-Routine mit InstantView® geschrieben werden kann.
Die Funktion CX_USER::Login() ändert den Status eines existierendes Master-Security-Objekts, so dass dieses jetzt alles erlaubt. 
Da die Login-Funktion gleichzeitig die zum User gehörenden Security-Objekte aktiviert, gelten ab diesem Zeitpunkt genau die für den speziellen Nutzer vorgesehen Rechte.


Ein aktives und nicht freigeschaltetes Master-Security-Objekt 

  • verweigert das Leserecht für alle möglichen Zugriffspfade, mit einer Ausnahme:
    der Zugriffspfad besteht nur aus dem Aufruf einer einzigen Funktion, deren Name mit _Login beginnt.
  • erlaubt dagegen alle Messages.

Ein Objekt der Klasse CX_MASTER_SECURITY mit dem entsprechenden Passwort kann mit dem ClassiX®-Utility cxgosr.exe in die Datenbank gestellt werden (beim Erzeugen - Flag /Mpassword).

Ein Objekt der Klasse CX_MASTER_SECURITY kann mit InstantView® nicht erzeugt werden.

Hinweis: In der CyberEnterprise®-Dokumentation finden Sie weitere Informationen zu den obengenannten Klassen: CX_CLASS_SECURITY, CX_ATTRIBUTE_SECURITY, CX_OBJECT_SECURITY, CX_MESSAGE_SECURITY, CX_SECURITY_OPTIONS
In der AppsWarehouse®-Dokumentation finden Sie weitere Informationen über die Zugriffsrechte für Benutzer