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

25.10.2006
Von Heinz Axel Pürner

Implementierung in DB2

IBM hat die bekannten SQL-Befehle wie CREATE, GRANT oder REVOKE zur Implementierung der LBAC-Funktionalität erweitert. Das grafische Werkzeug für den Administrator, das Control Center, unterstützt bisher nicht Definitionen der LBAC-Funktionalitäten.

Policy-Definitionen werden vom Security-Administrator (SECAM) getroffen:

create security label component perstarif array['lta','at','tarif'];
create security label component betorg tree(
'GF' root,
'IT' under 'GF',
'PRO' under 'GF',
'VM' under 'GF',
'ADM' under 'GF',
'ITZ' under 'IT',
'ITD' under 'IT',
'FE' under 'PRO',
'PRD1' under 'PRO',
'PRD2' under 'PRO',
'VK' under 'VM',
'MA' under 'VM',
'HR' under 'ADM',
'EK' under 'ADM',
'RW' under 'ADM');
create security policy persdat components perstarif, betorg with db2lbacrules;

In DB2 müssen erst die Komponenten definiert werden, dann die Policy. Die möglichen sinnvollen Wertekombinationen der Security Policy mit ihren Komponenten können als Labels definiert und unter dem Label-Namen angesprochen werden. Zur Vergabe von Label-Berechtigungen an Benutzer müssen diese Labels definiert werden.

create security label persdat.alles component perstarif 'lta', component betorg 'GF';
grant security label persdat.alles to user gf1 for read access;
create security label persdat.hrgl component perstarif 'lta', component betorg 'GF';
grant security label persdat.hrgl to user hr_gl for all access;
create security label persdat.hrb1 component perstarif 'at', component betorg 'GF';
grant security label persdat.hrb1 to user hr_sb2 for all access;
create security label persdat.hrb2 component perstarif 'tarif', component betorg 'GF';
grant security label persdat.hrb2 to user hr_sb1 for all access;
create security label persdat.it component perstarif 'at', component betorg 'IT';
grant security label persdat.it to user it_man for read access;
create security label persdat.fe component perstarif 'at', component betorg 'FE';
grant security label persdat.fe to user fe_man for read access;

Die HR-Sachbearbeiter mit höherer Berechtigungsstufe und HR-Gruppenleiter können im ersten Ansatz nur Mitarbeiter auf ihrer Berechtigungsstufe neu aufnehmen. Um auch (vertretungsweise) andere Mitarbeiter bearbeiten zu können, benötigen sie eine Write-down-Berechtigung:

grant exemption on rule db2lbacwritearray writedown for persdat to user hr_gl;

Die definierte Policy muss der Tabelle zugeordnet werden. Außerdem muss die Tabelle um die Label-Spalte erweitert und mit den gewünschten Datenwerten gefüllt werden. Das kann der Datenbank-Administrator durchführen, der dazu allerdings eine Ausnahmeberechtigung (Exemption) benötigt:

alter table mitarbeiter add security policy persdat;
alter table mitarbeiter add column ma_class db2securitylabel;

Wenn die Tabelle um die Label-Spalte erweitert worden ist, können die Labels für die Daten erzeugt werden. Zum Beispiel:

update mitarbeiter
set ma_class = seclabel('PERSDAT','lta:IT')
where tarifgruppe ='lta' and abteilung = 2;
update mitarbeiter
set ma_class = seclabel('PERSDAT','tarif:ITZ')
where tarifgruppe not in('lta','at')
and abteilung = 21;

Anschließend kann das Setzen der Labels kontrolliert werden. Die Labels werden mit der Funktion seclabel_to_char() lesbar gemacht:

select pnr,name, tarifgruppe, abteilung, seclabel_to_char('PERSDAT', ma_class) from mitarbeiter;