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

25.10.2006
Von Heinz Axel Pürner

Zuordnung der Policy zur Tabelle:

BEGIN
SA_POLICY_ADMIN.APPLY_TABLE_POLICY(
policy_name => 'PERSDAT'
,schema_name => 'HR'
,table_name => 'MITARBEITER'
,table_options => NULL
,label_function => NULL
,predicate => NULL
);
END;
/

Erzeugen der Label-Werte in der Tabelle:

update hr.mitarbeiter
set ma_class = char_to_label('PERSDAT','lta::IT')
where tarifgruppe ='lta' and abteilung = 2;
update hr.mitarbeiter
set ma_class = char_to_label('PERSDAT','tarif::ITZ')
where tarifgruppe not in('lta','at') and abteilung = 21;
update hr.mitarbeiter
set ma_class = char_to_label('PERSDAT','at::VK')
where tarifgruppe ='at' and abteilung = 41;
Anschliessend kann das Setzen der Labels kontrolliert werden. Die Labels werden mit der Funktion label_to_char() lesbar gemacht:
select pnr,name, tarifgruppe, abteilung,
substr(label_to_char(ma_class),1,16) seclabel

from hr.mitarbeiter;

Ergebnis:

10 HAAS lta 1 LTA::GF
20 THOMPSON lta 2 LTA::IT
30 KWAN lta 3 LTA::GF
50 GEYER lta 4 LTA::GF
60 STERN at 21 AT::ITZ
70 PULASKI at 31 AT::FE
90 HENDERSON at 22 AT::ITD
100 Roosevelt lta 51 LTA::HR
110 LUCCHESSI at 41 AT::VK
130 QUINTANA tg6 1 LTA::GF
140 Graham tg5 32 TARIF::PRD1
150 ADAMSON tg5 21 TARIF::ITZ
160 PIANKA tg5 21 TARIF::ITZ
170 YOSHIMURA tg5 21 TARIF::ITZ
180 Monroe tg5 21 TARIF::ITZ
190 WALKER tg5 21 TARIF::ITZ
200 BROWN tg5 21 TARIF::ITZ
210 JONES tg5 21 TARIF::ITZ
220 Lopez tg5 21 TARIF::ITZ
230 JEFFERSON tg5 31 TARIF::FE
240 MARINO tg5 31 TARIF::FE
250 SMITH tg5 31 TARIF::FE
260 JOHNSON tg5 31 TARIF::FE
270 PEREZ tg5 31 TARIF::FE
280 SCHNEIDER tg4 22 TARIF::ITD
290 PARKER tg3 22 TARIF::ITD
300 SMITH tg4 22 TARIF::ITD
310 SETRIGHT tg4 22 TARIF::ITD
320 MEHTA tg5 51 TARIF::HR
330 LEE tg5 51 TARIF::HR
340 Ullrich tg5 51 TARIF::HR
2010 HEMMINGER at 41 AT::VK
2120 ORLANDO tg5 53 AT::RW
2140 NATZ tg5 33 TARIF::PRD2
2170 YAMAMOTO tg5 21 TARIF::ITZ
2220 JOHN tg5 21 TARIF::ITZ
2240 MONTEVERDE tg5 31 TARIF::FE
2280 SCHWARTZ tg4 22 TARIF::ITD
2310 SPRINGER tg4 22 TARIF::ITD
2330 WONG tg5 51 TARIF::HR
2340 ALONZO tg5 51 TARIF::HR

120 Connery tg5 32 TARIF::PRD1

Fragt der Manager der Abteilung F/E (Forschung und Entwicklung) die Tabelle ohne einschränkende Bedingungen ab, so erhält er auch hier nur die Mitarbeiter seiner Abteilung angezeigt:

select pnr, name, gebdat, abtbez, grundgehalt
from hr.mitarbeiter, hr.abteilung
where aid = abteilung;
2240 MONTEVERDE 31-MAR-54 FE 28760
270 PEREZ 26-MAY-53 FE 27380
260 JOHNSON 05-OCT-36 FE 17250
250 SMITH 12-NOV-39 FE 19180
240 MARINO 31-MAR-54 FE 28760
230 JEFFERSON 30-MAY-35 FE 22180
70 PULASKI 26-MAY-53 FE 36170