Data Redaction live. Data Redaction live Oracle Data Redaction in einem produktiven Datenbanksystem Projektbericht Oracle Data Redaction in einem produktiven.

Slides:



Advertisements
Ähnliche Präsentationen
PL/SQL - Kurze Einführung -.
Advertisements

System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
SQL Server 2005 Übersicht für Entwickler Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Objektrelationales Mapping mit JPA
SQL als Abfragesprache
Datensicherheit in DBMS
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Datenbank-Zugriffsschnittstellen am Beispiel von Oracle und PL/SQL.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
Text-Retrieval mit Oracle Vortrag von Andreas Mück & David Diestel.
Otto-von-Guericke-Universität MagdeburgGamal Kassem Übung 7 Reports mit Datenbankzugriff.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
JDBC: JAVA Database Connectivity
SharePoint 2010 for Information Architects
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Programm-Module Lehrbuch, Kapitel 7.
SQL Server 2005 CLR-Integration
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 SQL (Teil 5)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
PL/SQL - Kurze Einführung April 2003Übung Data Warehousing: PL/SQL 2 PL/SQL.. ist eine Oracle-eigene, prozedurale Programmiersprache Sämtliche.
Verdichten von Daten mit Gruppenfunktionen
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
11 Verwaltung von Abhängigkeiten. Ziele Am Ende dieser Lektion verfügen Sie über die folgenden Kenntnisse: Überwachen prozeduraler Abhängigkeiten Effekte.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
SQL-Prozeduren Charakteristika: Kapselung von SQL-Anweisungen in Prozeduren, die wiederholt aufgerufen werden können. Dazu Verbergen parametrisierter SQL-
Trigger-abhängige Client Interaktionen (bezüglich Oracle8i)
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken erstellen mit PostgreSQL
Datenbanken abfragen mit SQL
Exotisches SQL Author: Sven Weller.
By Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor.
DB2 UDB im z/VSE Heinz Peter Maassen – Lattwein GmbH COURSE Tagung Bad Hersfeld 2008.
© CSP GmbH & Co. KG 2005 Einleitung HerausforderungenLösung Architektur Demonstration Langzeitarchivierung für Oracle Datenbanken Stefan Brandl, Dipl.-Inf.,
© Thales IS GmbH 2002 Oracle's Data Warehousing Features 1 Thales Information Systems GmbH Im Team für Ihren Erfolg DOAG - Regionaltreffen Hannover Donnerstag,
AMS confidential & proprietary International Business and Technology Consultants 1 Sicherheitskonzepte in Oracle Von der Entwicklung in die Produktion.
1DOAG Regionalmeeting bei DEICHMANN Juni 2004 Advanced Queuing Anwendung in der DEICHMANN Bestandsführung.
Thomas Tretter, 10. Februar 2004Oracle Label Security1 Oracle Label Security (fine grained access control) 10. Februar 2004.
Reorganisation und Administration großer SAP-DB Manfred Riemer SAP AG (z.B. MCOD-Systeme)
TOAD™ Die komplette Entwicklungs- und DBA- Lösung Cristian Maties.
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
SQL Basics Schulung –
D-SQL Vom Datenbank-Container zur SQL Server-Datenbank
DOAG SID Data Warehouse
Azure Backup, Azure Backup Server und Azure Site Recovery
Sprachumfang von SQL Vier Kategorien DDL (Data Definition Language)
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Relationales Geodatenmanagement mit
Vorlesung #6 SQL (Teil 3).
Frank Schneede Senior Berater ORACLE Deutschland GmbH.
ORACLE XE Bernd Tuba, Trier, Deutsche Post ITSolutions GmbH.
Abfragesprache SQL in ORACLE
Flashback mal sieben DOAG RegioTreff , Wiesbaden
Sichten.
Vorlesung #8 SQL (Teil 5).
Constraints anlegen und löschen, Data Dictionary Tabellen
Create Table, Rechte und Rollen
Funktionen, GROUP BY, HAVING Views anlegen und verwenden
Installation und Beispiele
Kapitel 6: Datenbanksysteme
GRUNDLAGEN WISSENSCHAFTLICHEN ARBEITENS MODULA-2 SONAY SUBAYAZ
Präsentation von Darleen und Michèle
Oracle Statistiken im HORIZON-Umfeld
The Programming Language Pascal
(Structured Query Language)
 Präsentation transkript:

Data Redaction live

Oracle Data Redaction in einem produktiven Datenbanksystem Projektbericht Oracle Data Redaction in einem produktiven Datenbanksystem Tobias Bräutigam – Security, Netzwerk & Oracle Mike Schliephorst – Java EE & Oracle Entwicklung

Agenda Von der Vision zum Wirkbetrieb Typische Herausforderungen Überraschende Lösungen Implementierung von Data Redaction in einem Produktiv-System

Anforderungen Mandantenfähigkeit und Datenmaskierung für Nearshore- Nutzer Sensible Daten dürfen die Datenbank nicht verlassen Katalogisierung sensibler Daten Keine Änderung an bestehender Geschäftslogik und der Prozesse Buzzwort: Data Leakage Prevention

ANFORDERUNGEN - Zielsystem

Bestands-system Drei physikalische Oracle 12c EE Datenbankserver Microsoft ASP-Frontend mit IIS ˜ 900 Prozeduren ˜ 250 Datenbankpackages ˜ 500.000 PL/SQL LOC

Proof of Concept Beistellung der Test- und Entwicklungsumgebung Drei Oracle 12c EE Instanzen Mit Testdaten betankt Vollzugriff für Entwickler (System: root, DB: sysdba)

Proof of Concept System- und Code-Analyse Semantik der Schnittstellen? Katalog der sensiblen Kundendaten semantische Analyse Typanalyse Score-basiert Code-Analyse CRUD-Matrix (TOAD) Zirkelbezüge Bulk Operation wie INSERT AS SELECT Maskierte Daten in GROUP BY-Klausel Aggregate Functions Views Lösung für direkten SQL-Zugriff?

Proof of Concept Analyse der Webapplikation Seiteneffekte wie unbeabsichtigtes Schreiben maskierter Inhalte? Logische Konsistenz von Daten und Prozessen Werden maskierte Spalten als Schlüssel verwendet? Ist Pseudonymisierung statt Maskierung erforderlich? Performance: Ausführungspläne, Speicher, Latenzen

Proof Of ConcEpt Implementierung eines Use Cases Ein Anwendungsfall, wenige Frontend-Seiten Nur Lesezugriffe Funktionsfähiger Prototyp Präsentation des Lösungskonzeptes beim Kunden

Oracle Data Redaction Geeignet zur Anpassung von Applikationen ohne direkten DB-Zugriff für den Anwender Definition zu maskierender Daten über das Oracle Data Dictionary Oracle Advanced Security: ab 11gR2 EE Transparenz für Backup- und Export-Funktionen Ausführung im Datenbankkernel zur Laufzeit Änderung mit 12c evtl. nur auf 12c eingehen. Oracle Advanced Security beinhaltet Transparent Data Encryption zur verschlüsselten Ablage und Data Redaction zum Maskieren Sensitiver Daten.

Oracle Data Redaction Deklaration der Policies im Data Dictionary der DB Aktivierung der Policies z.B. durch Kontext, User Environment, Rollen Maskieren sensitiver Daten in Tables und Views Unterstützte Datentypen VARCHAR, CHAR, NUMBER, DATE, CLOB Spezielle Typen teilweise Default-Maskierung für Full Redaction anpassen Full 30.06.1975   01.01.2001 Partial 123-456-789 xxx-xxx-789 Regex gandalf@syntegris.de [hidden]@syntegris.de Random "geheim" "6zt5%a"

DEMO 1 – Create POLICY BEGIN DBMS_REDACT.ADD_POLICY ( object_schema => 'SCOTT', object_name => 'EMP', policy_name => 'HIDE_SAL', column_name => 'SAL', function_type => DBMS_REDACT.FULL, expression => '1=1', enable => TRUE ); END; /

DEMO 1 – iterative Inferenz CREATE OR REPLACE PROCEDURE inferenz IS buf VARCHAR(40); t CHAR; x NUMBER; i NUMBER; c NUMBER; BEGIN i := 0; c := 1; WHILE c<17 LOOP SELECT COUNT(*) INTO x FROM scott.redactiontest WHERE SUBSTR(cc,c,1)= TO_CHAR(i); IF x > 0 THEN c := c+1; buf := buf||TO_CHAR(i); i := 0; ELSE i := i+1; END IF ; END LOOP; dbms_output.put_line('CC: ' || buf); END; --Credits to David Lichfield Achten Sie auf den aktuellen Patchlevel!

SICHERHEIT Verständnis der Grundkonzepte Datenlecks durch Inferenz Geeignet für auf Oracle aufsetzende Applikationen Zusätzliche Maßnahmen bei anderen Szenarien Redaction Policies per default deaktiviert für die User SYS SYSTEM EXPORT Privileg: EXEMPT REDACTION POLICY - nicht für Attacken bon DB-Usern welche ad hoc queries ausführen - nicht für user mit sysdba rights - DDL statements to copy data wie create table as secect, insert as select keine Verwendung in group by klauseln ORA-00979 Adhoc-Database Queries may bypass redaction ORA-28081

SICHERHEIT - Bug or Feature Problem: INSERT INTO table2 (col1, col2) SELECT col1, redact_col2 FROM table1; --> ORA-28081 Umgehung (Bug!): INSERT INTO table2(col1, SELECT redact_col2 FROM table1 t1a WHERE t1a.rowid = t1b.rowid) select col1 FROM table1 t1b; Lösung: Auslagerung von Code in Wrapper mit EXEMPT REDACTION POLICY und in neuem Schema BYPASS ORA-28081 tritt auch auf, wenn ein User, für den die Policy nicht gilt, ein INSERT AS SELECT auf redaktionierte Spalten absetzt http://www.oracle.com/technetwork/database/options/advanced-security/advanced-security-wp-12c-1896139.pdf https://docs.oracle.com/database/121/ASOAG/redaction_guidelines.htm#ASOAG10535 insert into table2 (col1, select redact_col2 from table1 t1a where t1a.rowid = t1b.rowid) select col1 from table1 t1b; Lösung implementierung eines BYPASS-Schemas mit Exempt Redactation Policy und Ausführung der "Insert As select" Statements für alle betroffenen Schemas

Sicherheit – Grenzen Kein Schreibschutz Bei komplexem Code nicht unmittelbar einsetzbar Z.B. dynamisches SQL aka EXECUTE IMMEDIATE() Als eigenständiges Sicherheitskonzept ungenügend Kein Schutz gegen fortgeschrittene Angriffe Privilege Escalation SQL Injection Brute Force

Lösung - Technologien Oracle Data Redaction Datenmaskierung Queries RLS Row Level Security Schreibzugriffe erkennen INSERT/UPDATE/DELETE Statements FGA Fine grained auditing Statements detailliert loggen Analyse, Debugging

Lösung - Row Level Security Problem: Komplexe Geschäftslogik in verketteten Stored Procedures kann unbeabsichtigtes Schreiben maskierter Werte auslösen. Lösung: RLS unterbindet Schreibzugriff auf redaktionierte Spalten selektiv Fängt fehlerhafte Validierung im Frontend ab Vermeidung vollständiger Codeanalyse

Lösung - KOMPONENTEN

LÖSUNG - Vorteile Datenmodell bleibt unverändert Trennung von Implementierung und Metadaten Zentrale Speicherung von SCD-Katalog, Berechtigungen, Redaktionstyp Einheitliche Pflege der Objekte für Frontend- und SQL- Zugriff Der User FACADE_ADMIN generiert Views, Synonyme, Grants, Redaction- und RLS- Policies

LÖSUNG - Fassadenarchitektur FACADE_ADMIN

LÖSUNG - Frontend Nearshore-User werden über ihre Windows-Gruppe identifiziert Für die Nearshore-AD-Gruppe wird ein eigener Connection Pool verwendet, dadurch sind die OO4O* Caches für Onsite- und Nearshore-Benutzer getrennt Separate technische Datenbank-User pro Pool Für das entsprechende Schema FACADE_WEB ist die Maskierung aktiv: … expression =>'SYS_CONTEXT (''USERENV'',''SESSION_USER'')= ''FACADE_WEB''‚ … *Oracle Objects for OLE

Flashback Sicherung der gesamten Datenbank in Sekunden mit CREATE RESTORE POINT GUARANTEE FLASHBACK DATABASE Delta der gesamten Datenbank mit der SELECT AS OF clause Überraschung: die Flashback Restore Points mit unserer Testdaten-Baseline überlebten ein Datenbank-Patchupdate nicht

FLASHBACK Beispiel SET serveroutput ON; DECLARE cnt pls_integer; rowcnt pls_integer; sqlstring VARCHAR2(2000); fails pls_integer :=0; BEGIN FOR TAB IN ( SELECT SYS.DBA_ALL_TABLES.TABLE_NAME AS TNAME, SYS.DBA_ALL_TABLES.OWNER AS TOWNER FROM SYS.DBA_ALL_TABLES WHERE OWNER IN 'HR‘‚ LOOP BEGIN sqlstring:='SELECT count(*) FROM '||TAB.TOWNER||'.'||TAB.TNAME; EXECUTE IMMEDIATE sqlstring INTO rowcnt; dbms_output.put_line('ROW COUNT: '||rowcnt||' Name: '|| TAB.TOWNER||'.'||TAB.TNAME); IF rowcnt<500000 THEN sqlstring := 'SELECT COUNT(*) FROM (SELECT * FROM ' ||TAB.TOWNER||'.'||TAB.TNAME|| ' MINUS SELECT * FROM ' ||TAB.TOWNER||'.'||TAB.TNAME|| ' AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL ''30'' MINUTE)))'; EXECUTE IMMEDIATE sqlstring INTO cnt; dbms_output.put_line('DIFFERENT LINES: '||cnt); dbms_output.put_line(''); END IF; EXCEPTION WHEN OTHERS THEN BEGIN insert into HR.TRACE_FLASH values (TAB.TOWNER||'.'||TAB.TNAME,rowcnt ); fails:=fails+1; END; END; END LOOP; COMMIT; dbms_output.put_line('FAILS: '||fails); END; -- Substracts(MINUS) current row set from past 30 minute flashback row set of each table. -- Counts remaining unique rows which are the modified ones. -- Fails on very large tables, system tables, tables without flashback records.

FAZIT Fachlichkeit radikal eingrenzen Testdaten frühzeitig einfordern Design lange flexibel halten Sicherheit durch komplementäre Testverfahren Entwicklungsumgebung beim Kunden nutzen Projektentscheidungen dokumentieren