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:
| 1 | create security label component perstarif array['lta','at','tarif']; |
| 2 | create security label component betorg tree( |
| 3 | 'GF' root, |
| 4 | 'IT' under 'GF', |
| 5 | 'PRO' under 'GF', |
| 6 | 'VM' under 'GF', |
| 7 | 'ADM' under 'GF', |
| 8 | 'ITZ' under 'IT', |
| 9 | 'ITD' under 'IT', |
| 10 | 'FE' under 'PRO', |
| 11 | 'PRD1' under 'PRO', |
| 12 | 'PRD2' under 'PRO', |
| 13 | 'VK' under 'VM', |
| 14 | 'MA' under 'VM', |
| 15 | 'HR' under 'ADM', |
| 16 | 'EK' under 'ADM', |
| 17 | 'RW' under 'ADM'); |
| 18 | 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.
| 1 | create security label persdat.alles component perstarif 'lta', component betorg 'GF'; |
| 2 | grant security label persdat.alles to user gf1 for read access; |
| 3 | create security label persdat.hrgl component perstarif 'lta', component betorg 'GF'; |
| 4 | grant security label persdat.hrgl to user hr_gl for all access; |
| 5 | create security label persdat.hrb1 component perstarif 'at', component betorg 'GF'; |
| 6 | grant security label persdat.hrb1 to user hr_sb2 for all access; |
| 7 | create security label persdat.hrb2 component perstarif 'tarif', component betorg 'GF'; |
| 8 | grant security label persdat.hrb2 to user hr_sb1 for all access; |
| 9 | create security label persdat.it component perstarif 'at', component betorg 'IT'; |
| 10 | grant security label persdat.it to user it_man for read access; |
| 11 | create security label persdat.fe component perstarif 'at', component betorg 'FE'; |
| 12 | 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:
| 1 | 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:
| 1 | alter table mitarbeiter add security policy persdat; |
| 2 | 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:
| 1 | update mitarbeiter |
| 2 | set ma_class = seclabel('PERSDAT','lta:IT') |
| 3 | where tarifgruppe ='lta' and abteilung = 2; |
| 4 | update mitarbeiter |
| 5 | set ma_class = seclabel('PERSDAT','tarif:ITZ') |
| 6 | where tarifgruppe not in('lta','at') |
| 7 | and abteilung = 21; |
Anschließend kann das Setzen der Labels kontrolliert werden. Die Labels werden mit der Funktion seclabel_to_char() lesbar gemacht:
| 1 | select pnr,name, tarifgruppe, abteilung, seclabel_to_char('PERSDAT', ma_class) from mitarbeiter; |