Multi-Level-Security: Mit DB2 einfacher als mit Oracle 10g

25.10.2006
Von Heinz Axel Pürner

Implementierung in Oracle

Während IBM die LBAC-Funktionalität als Erweiterungen der bekannten SQL-Befehle implementiert hat, hat Oracle sich für eine Implementierung mit PL/SQL-Routinen entschieden. Grundsätzlich können die Definitionen im Policy Manager (OPM) ohne Kenntnis der Routinen getroffen werden. Zum Vergleich mit der DB2-Lösung finden Sie hier jedoch auch die Prozedur-Aufrufe.

Das Definieren der OLS Security Policy erfolgt bei gleichzeitiger Angabe der Label-Spalte:

BEGIN
SA_SYSDBA.CREATE_POLICY(
policy_name => 'PERSDAT'
,column_name => 'MA_CLASS'
,default_options => 'ALL_CONTROL,HIDE'
);
END;
/

Da die Komponenten einer Policy vorgegeben sind, können gleich die Komponentenwerte definiert werden. In unserem Beispiel wird die Komponente Compartment nicht benutzt, sondern nur Level und Group.

Definieren der Levels:

BEGIN
SA_COMPONENTS.CREATE_LEVEL(
policy_name => 'PERSDAT'
,level_num => 1000
,short_name => 'TARIF'
,long_name => 'TARIFLICH'
);
SA_COMPONENTS.CREATE_LEVEL(
policy_name => 'PERSDAT'
,level_num => 2000
,short_name => 'AT'
,long_name => ' AUSSERTARIFLICH'
);
SA_COMPONENTS.CREATE_LEVEL(
policy_name => 'PERSDAT'
,level_num => 4000
,short_name => 'LTA'
,long_name => 'LEITENDE ANGESTELLTE'
);
END;
/

Definieren der Gruppen:

BEGIN
SA_COMPONENTS.CREATE_GROUP(
policy_name => 'PERSDAT'
,group_num => 0
,short_name => 'GF'
,long_name => 'GESCHAEFTSFUEHRUNG'
,parent_name => NULL
);
SA_COMPONENTS.CREATE_GROUP(
policy_name => 'PERSDAT'
,group_num => 20
,short_name => 'IT'
,long_name => 'INFOTECHNOLOGIE'
,parent_name => 'GF'
);
SA_COMPONENTS.CREATE_GROUP(
policy_name => 'PERSDAT'
,group_num => 30
,short_name => 'PROD'
,long_name => 'PRODUKTION'
,parent_name => 'GF'
);
:::::
SA_COMPONENTS.CREATE_GROUP(
policy_name => 'PERSDAT'
,group_num => 200
,short_name => 'ITZ'
,long_name => 'IT ZENTRAL'
,parent_name => 'IT'
);
SA_COMPONENTS.CREATE_GROUP(
policy_name => 'PERSDAT'
,group_num => 210
,short_name => 'ITD'
,long_name => 'IT DEZENTRAL'
,parent_name => 'IT'
);
END;
/