Oracle Label Security (fine grained access control) 10. Februar 2004 Thomas Tretter, 10. Februar 2004 Oracle Label Security 1 Gliederung des Vortrags • Nutzung dieser Funktion • Installation • Administration und Konfiguration • Vorgehensweise • Beispiele • Fazit/Referenzen Thomas Tretter, 10. Februar 2004 Oracle Label Security 2 Nutzung dieser Funktion • weitergehende Berechtigung an Tabelleninhalten definieren (row level security) • verschiedene User sehen unterschiedlichen Inhalt (Mandantenfähigkeit) • Nutzung über integrierte Datenbank Packages • verschiedene Sensitivitätslevel Thomas Tretter, 10. Februar 2004 Oracle Label Security 3 Installation • VPD, bzw Oracle Label Security (OLS) ist eine extra Option und muss daher im Oracle Installer auch extra ausgewählt werden (OLS wird defaultmäßig nicht mit installiert • Überprüfung: > sqlplus / SQL*Plus: Release 9.2.0.3.0 - Production on Wed Apr 23 13:45:26 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.3.0 - 64bit Production With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options JServer Release 9.2.0.3.0 - Production Thomas Tretter, 10. Februar 2004 Oracle Label Security 4 Installation • Einspielen der Objekte (Oracle intern) • Aufruf des Scripts: $ORACLE_HOME/rdbms/admin/catols.sql als User sys • User: LBACSYS • Role: LBAC_DBA • Oracle Label Security (OLS) ist eine Option von Oracle 9i. Bereits ab Oracle 8i gab es etwas ähnliches: Row Level Securtity (RLS). Dies Funktionalität wurde über das Package dbms_rls zugänglich gemacht. Die Funktionsweise ist ähnlich. Thomas Tretter, 10. Februar 2004 Oracle Label Security 5 Administration und Konfiguration • Tool Oracle Policy Manager (ist Bestandteil der Enterprise Manager Installation) • Proceduren und Funktionen des Packages SA_SYSDBA Thomas Tretter, 10. Februar 2004 Oracle Label Security 6 Vorgehensweise 1. Anlegen der Policies 2. Definition der Komponenten von Labels: levels, compartments, groups 3. Identifizierung der Menge der korrekten Daten Lables, um sie Tabellen und Zeilen zuzuordnen 4. Set Up der User Labels (für alle betroffenen User) 5. Zuordnung der Policies zu Tablellen und Schematas 6. User authorisieren 7. Updaten der Spalten der durch OLS geschützten Tablellen, bzw Label Functions beim Insert der Tablellen benutzen 8. Bitmap Index auf den Label Spalten Anlegen der Policies anlegen (optional) 9. Anlegen und Authorisieren Trusted Program Units (optional) 10. Auditing konfigurieren(optional)) Thomas Tretter, 10. Februar 2004 Oracle Label Security 7 Beispiel: Tabelle locations Thomas Tretter, 10. Februar 2004 Oracle Label Security 8 1. Anlegen der Policies PL/SQL Procedure: EXECUTE SA_SYSDBA.CREATE_POLICY( 'FACILITY', -- Policy 'FACLAB', -- hidden column 'READ_CONTROL,CHECK_CONTROL,LABEL_DEFAULT,HIDE' default options ); zugehörige View: Thomas Tretter, 10. Februar 2004 -- DBA_SA_POLICIES Oracle Label Security 9 2.1. Definition von Levels PL/SQL Procedure: EXEC SA_COMPONENTS.CREATE_LEVEL( 'FACILITY', -- Policy 2000, -- level Nummer (hoch=sensitiv) 'S', -- Kurzname 'SENSITIVE' -- voller Name ); zugehörige View: DBA_SA_LEVELS • Mit Labels können aufsteigende Sensitivitäten abgebildet werden. • Mit Compartments sind beliebige, wahllose Aufzählungen möglich. • Mit Groups lassen sich Hierarchien (Baumstrukturen) nachbilden. Thomas Tretter, 10. Februar 2004 Oracle Label Security 10 2.2. Definition von Compartments PL/SQL Procedure: EXEC SA_COMPONENTS.CREATE_COMPARTMENT( 'FACILITY', -- Policy 100, -- compartment Nummer 'ED', -- Kurzname 'Education' -- voller Name ); zugehörige View: Thomas Tretter, 10. Februar 2004 DBA_SA_COMPARTMENTS Oracle Label Security 11 2.3. Definition von Groups PL/SQL Procedure: EXEC SA_COMPONENTS.CREATE_GROUP( 'FACILITY', -- Policy 11, -- group Nummer 'US', -- Kurzname 'United States', -- voller Name 'G' -- Kurzname der Vater Group ); zugehörige View: Thomas Tretter, 10. Februar 2004 DBA_SA_GROUPS Oracle Label Security 12 2.4. Definition von Labels PL/SQL Procedure: EXEC SA_LABEL_ADMIN.CREATE_LABEL( 'FACILITY', -- Policy 2011, -- eindeutiger Label 'S::US' -- zugehöriger Char String (Level:Compertment:Group) ); zugehörige View: DBA_SA_LABELS (alle) DBA_SA_DATA_LABELS (nur Data Labels) Thomas Tretter, 10. Februar 2004 Oracle Label Security 13 2.4. Definition von User Labels PL/SQL Procedure: EXEC SA_USER_ADMIN.SET_USER_LABELS( 'FACILITY', -- Policy 'PLANNING', -- Username 'S::US,EUR,ASIA' -- Zugriffsrechte (level:compartment:group) ); zugehörige View: DBA_SA_LABELS (alle) DBA_SA_USER_LABELS (nur User Labels) DBA_SA_USER_LEVELS (nur User Levels) DBA_SA_USER_COMPARTMENTS (nur User Compartments) DBA_SA_USER_GROUPS (nur User Groups) Thomas Tretter, 10. Februar 2004 Oracle Label Security 14 2.5. Zuordnung der Policies zu Tabelle/Schema PL/SQL Procedure: begin sa_policy_admin.apply_table_policy ( POLICY_NAME => 'FACILITY', SCHEMA_NAME => 'HR', TABLE_NAME => 'LOCATIONS', TABLE_OPTIONS => NULL, LABEL_FUNCTION => NULL, PREDICATE => 'to_char(sysdate,' || '''' || 'd' || '''' || ')in (2,3,4,5,6)'); end; PREDICATE ist eine Zusatzbedingung, die erfüllt sein muss (hier: Zugriff nur zwischen 2.-6. des Monats) zugehörige View: DBA_SA_TABLE_POLICIES Thomas Tretter, 10. Februar 2004 Oracle Label Security 15 3. User authorisieren PL/SQL Procedure: EXEC SA_USER_ADMIN.SET_USER_PRIVS ( 'FACILITY', -- Policy 'HR', -- Schema ownwer 'FULL,PROFILE_ACCESS' -- Privs ); zugehörige View: Thomas Tretter, 10. Februar 2004 DBA_SA_USERS Oracle Label Security 16 4. Update der durch OLS geschützten Daten SQL Statement: update hr.locations set faclab = char_to_label('FACILITY','S::ASIA') where upper(city) in ('BEIJING','TOKYO'); Abfrage: select city, substr(label_to_char(FACLAB),1,20) fac from hr.locations; Thomas Tretter, 10. Februar 2004 Oracle Label Security 17 Fazit • eigene Erfahrungen • von ‚innen nach außen‘ die Sicherheit aufbauen • nur wenige Objekte mit OLS belegen • genau Vorüberlegungen anstellen • mehr Security behindert meistens auch den ‚normalen‘ Betrieb • Referenzen Oracle Doku Metalink DocId 230980.1 Examples Metalink DocId 99250.1 INSERT (8i) Metalink DocId 171155.1 Thomas Tretter, 10. Februar 2004 Oracle Label Security Admin Guide (Part No. A96578-01) Oracle Label Security – Concepts (Policies and Labels) and Understanding Fine-Grained Access Control (DBMS_RLS) on Install/Deinstall Oracle Label Security Data Dictionary in Oracle9i Oracle Label Security 18