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:
| 1 | BEGIN |
| 2 | SA_SYSDBA.CREATE_POLICY( |
| 3 | policy_name => 'PERSDAT' |
| 4 | ,column_name => 'MA_CLASS' |
| 5 | ,default_options => 'ALL_CONTROL,HIDE' |
| 6 | ); |
| 7 | END; |
| 8 | / |
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:
| 1 | BEGIN |
| 2 | SA_COMPONENTS.CREATE_LEVEL( |
| 3 | policy_name => 'PERSDAT' |
| 4 | ,level_num => 1000 |
| 5 | ,short_name => 'TARIF' |
| 6 | ,long_name => 'TARIFLICH' |
| 7 | ); |
| 8 | SA_COMPONENTS.CREATE_LEVEL( |
| 9 | policy_name => 'PERSDAT' |
| 10 | ,level_num => 2000 |
| 11 | ,short_name => 'AT' |
| 12 | ,long_name => ' AUSSERTARIFLICH' |
| 13 | ); |
| 14 | SA_COMPONENTS.CREATE_LEVEL( |
| 15 | policy_name => 'PERSDAT' |
| 16 | ,level_num => 4000 |
| 17 | ,short_name => 'LTA' |
| 18 | ,long_name => 'LEITENDE ANGESTELLTE' |
| 19 | ); |
| 20 | END; |
| 21 | / |
Definieren der Gruppen:
| 1 | BEGIN |
| 2 | SA_COMPONENTS.CREATE_GROUP( |
| 3 | policy_name => 'PERSDAT' |
| 4 | ,group_num => 0 |
| 5 | ,short_name => 'GF' |
| 6 | ,long_name => 'GESCHAEFTSFUEHRUNG' |
| 7 | ,parent_name => NULL |
| 8 | ); |
| 9 | SA_COMPONENTS.CREATE_GROUP( |
| 10 | policy_name => 'PERSDAT' |
| 11 | ,group_num => 20 |
| 12 | ,short_name => 'IT' |
| 13 | ,long_name => 'INFOTECHNOLOGIE' |
| 14 | ,parent_name => 'GF' |
| 15 | ); |
| 16 | SA_COMPONENTS.CREATE_GROUP( |
| 17 | policy_name => 'PERSDAT' |
| 18 | ,group_num => 30 |
| 19 | ,short_name => 'PROD' |
| 20 | ,long_name => 'PRODUKTION' |
| 21 | ,parent_name => 'GF' |
| 22 | ); |
| 23 | ::::: |
| 24 | SA_COMPONENTS.CREATE_GROUP( |
| 25 | policy_name => 'PERSDAT' |
| 26 | ,group_num => 200 |
| 27 | ,short_name => 'ITZ' |
| 28 | ,long_name => 'IT ZENTRAL' |
| 29 | ,parent_name => 'IT' |
| 30 | ); |
| 31 | SA_COMPONENTS.CREATE_GROUP( |
| 32 | policy_name => 'PERSDAT' |
| 33 | ,group_num => 210 |
| 34 | ,short_name => 'ITD' |
| 35 | ,long_name => 'IT DEZENTRAL' |
| 36 | ,parent_name => 'IT' |
| 37 | ); |
| 38 | END; |
| 39 | / |