SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
Seite 1Gunther Pippèrr © 2018 http://www.pipperr.de
ÜBER RECHTE/ROLLEN UND DEN SICHEREN
BETRIEB DER DATENBANK
Die Anwender in der DB im Zaum halten
DOAG Konferenz 20.11.2018
Seite 2Gunther Pippèrr © 2018 http://www.pipperr.de
GPI Consult Gunther Pippèrr
Freiberuflicher Oracle Datenbank Experte - Ich unterstütze Sie gerne in ihren Projekten.
Bergweg 14
37216 Witzenhausen/Roßbach
Mein Blog
gunther@pipperr.de
https://www.pipperr.de/dokuwiki/
Seite 3Gunther Pippèrr © 2018 http://www.pipperr.de
APEX Meetup Gruppe Kassel
https://www.meetup.com/de-DE/Oracle-APEX-Kassel/
Seite 4Gunther Pippèrr © 2018 http://www.pipperr.de
ÜBER RECHTE/ROLLEN UND DEN SICHEREN
BETRIEB DER DB
Die Anwender in der DB im Zaum halten
Seite 5Gunther Pippèrr © 2018 http://www.pipperr.de
Der normale Alltag – Die Ausgangslage
Im normalen Fall => Schema Name = PASSWORT
• Passwort des zentralen Schemas allgemein bekannt
• Änderungen auf Grund von vielen Abgängigkeiten
• nicht möglich
Applikation
Core Schema
Oracle 10g R2 ohne Patch
Wer hat wann und was in der Datenbank “angepasst”? Im Zweifelsfall war es mal wieder keiner ….
Seite 6Gunther Pippèrr © 2018 http://www.pipperr.de
Unser Ziel
▪ Einzelne Anwender in der Datenbank identifizieren
▪ Zugriff auf die Daten auf so wenig Personen wie möglich/nötig
einschränken
▪ Passwörter nicht in der ganzen Firma verteilen
▪ Passwörter entsprechend der Firmen Regularien verwenden
▪ Die DSGVO nachvollziehbar einhalten
▪ Das Arbeiten mit der Datenbank für Administratoren und
Entwickler/Support so einfach wie möglich gestalten
Seite 7Gunther Pippèrr © 2018 http://www.pipperr.de
Projekt zur Optimierung der DB aufsetzen
Interfaces
Applikationen
isolieren
Persönliche
DB User
einführen
Core Schema
Passwörter ändern
Analyse Ist
Zustand
Wer
Wie
Was
Warum
Schema
Interface
Externe
Passwort
Security
Rechte und
Rollen
Schema
DB User
Proxy User
Konzept
Rechte
und
Rollen
Datenbank
Monitoring
aktivieren
Seite 8Gunther Pippèrr © 2018 http://www.pipperr.de
1- Analyse
▪ Analyse der Systemumgebung
– Wer verwendet die Datenbank?
• Warum werden Daten aus der Datenbank ausgelesen?
– Was verwendet die Datenbank?
• Welche Applikationen greifen auf die Datenbank zu
– Werkzeug:
• v$session in Hilfstabelle schreiben
• Audit Log auswerten,
• AWR Tabellen (falls Lizenz vorhanden) auswerten
• Listener Log analysieren
• DDL Trigger / Error Trigger
Analyse Ist
Zustand
Wer
Wie
Was
Warum
Seite 9Gunther Pippèrr © 2018 http://www.pipperr.de
1 – v$session in Tabelle schreiben
▪ V$SESSION in eine einfache Hilfstabelle schreiben
– Vorteil: ALLE Sessions, auch die nicht aktiven, werden protokolliert
– Das Audit Log der DB ist meist nicht über Monate hinweg verfügbar
– Keine Diagnostic Pack Lizenz notwendig für v$active_session_history!
– Einfach zu implementieren und auszuwerten
– Code Fragment:
– Nachteil : Rechte müssen beim DBA erkämpft werden
create table mon_user.log_v_sessions as select s.*, ‘1’ as snap,
sysdate as snap_date from v$session s where username is not
null;
-- Job mit:
Insert into mon_user.log_v_sessions select s.*,
snap_seq.nextval, sysdate from v$session s;
Seite 10Gunther Pippèrr © 2018 http://www.pipperr.de
1 – Die Datenbank proaktiv überwachen
▪ Oracle listener.log regelmäßig auswerten
▪ DDL Logging einschalten
– $ADR_HOME/rdbms/<sid>/<sid>/log/ddl/log.xml
– DB Parameter ENABLE_DDL_LOGGING = true (EE Feature!)
▪ Standard AUDIT (pre 12c default) optimieren bzw. 12c unified
auditing verwenden
▪ System Trigger für das Logging einsetzen
– Wie On Logon, on DDL , on error
Seite 11Gunther Pippèrr © 2018 http://www.pipperr.de
1 – Technische und persönliche User gruppieren
▪ Eine Matrix was und wer in der Datenbank wie arbeiten soll
User Type Data Type Example Concept Role Name DB Profile Name
Technical Data Owner Application Core Schema Very Strong Password with
min. 20 letters
data_owner
Technical Application
(Select/DML)
Interfaces to other programs Synonym Schema, minimal
rights on table and PL/SQL
<appname>_role interface
Personal Only Select Analysts Synonym Schema, minimal
rights on table and PL/SQL
For example
Analyst_role_<schema>
personal_user
Personal Select / DML /DDL Developer and Deployment
User
Oracle Proxy Authentication Personal user only create
Session
personal_user
Seite 12Gunther Pippèrr © 2018 http://www.pipperr.de
Technische User
▪ Es wird zwischen zwei Gruppen unterschieden:
– Technische User mit Passwort für Interfaces und Applikationen
– Technische User, die die Daten halten. Hier sollte die direkte Anmeldung
nicht mehr so “einfach” möglich sein
• Gutes und geheimes Passwort
• User locken und bei Bedarf entsperren
▪ New Feature 18c - Schema Only Accounts
– Anlegen mit : CREATE USER schema_owner NO AUTHENTICATION
QUOTA UNLIMITED ON users;
Zugriff von Administratoren oder Entwicklern nur über PROXY Rechte !
Seite 13Gunther Pippèrr © 2018 http://www.pipperr.de
1 – Wie lief das im Projekt
▪ Keine Doku, keine Ansprechpartner, Business Owner kennen die
Applikationen nicht, externer Dienstleister “unbedarft” …..
▪ Im ersten Schritt wurde eine Bestandsanalyse durchgeführt,
Ansprechpartner identifiziert und alle Interfaces und Applikationen
als “Bild” pro Interface erstellt
=> Erster Einstieg in eine Betriebsdokumentation
Ziel – eine Matrix von persönlichen und technischen User identifizieren
Dauer für eine DWH Umgebung >>> 3 Monate
Seite 14Gunther Pippèrr © 2018 http://www.pipperr.de
Einführen der Persönlicher User (1)
▪ Jeder Anwender, der direkt mit den Daten der Datenbank arbeiten
muss, erhält ein persönliches Schema in der Datenbank
▪ Anwender wird über sein zugeordnetes Profil und den Präfix im
Schema Namen identifiziert
– Schema Name entspricht möglichst dem AD Account, um später diesen
User mit dem AD auch automatisch abgleichen zu können
– Z.B., Windows User “pipperr” => DB User P_PIPPERR
Seite 15Gunther Pippèrr © 2018 http://www.pipperr.de
Einführen Persönlicher User (2) – Zwei Gruppen
▪ Fragt nur Daten ab, ändert keine
Werte in der DB
▪ Benötigt keine Proxy Rechte
▪ Hat eine Lese Rolle auf die
Schemas, die er sehen soll
▪ Views um die Arbeit zu erleichtern
User muss Daten anpassen
▪ Verwendet Proxy um sich direkt auf
dem Schema anzumelden
▪ Rollen mit Passwort ( Secure
Application Roles ) verwenden um
z.B. DML Operationen zu verbieten
▪ VPD – Virtual Private Data Feature
einsetzen um kritische Daten vor
dem User zu verbergen
Read Only User
Seite 16Gunther Pippèrr © 2018 http://www.pipperr.de
Einführen einer Lese Rolle für Persönliche User
▪ Um die Verwaltung in der Datenbank zu vereinfachen wird für jedes
technische Core Schema eine Lese Rolle definiert
▪ Feste Namesgebung, wird beim Anlegen eines Schemas gleich mit
beantragt => ROLE_READ_<SCHEMA>
▪ Rolle wird automatisch mit allen Tabellen des Schemas befüllt über
PL/SQL Routine
– Vorteil => Wartungsarm
– Nachteil => Nicht sehr feingranular
Seite 17Gunther Pippèrr © 2018 http://www.pipperr.de
2 – Technische Lösung finden
▪ Ziel: Zugriff auf die Daten so stark schützen wie möglich
Core
Schema
Technischer
Datenzugriff
Persönliche
User
Seite 18Gunther Pippèrr © 2018 http://www.pipperr.de
Personal Schema
2 – Überblick
Core
Data Schema
Interface
Schema
Synonym Table
Report Schema
Synonym
Direct Connect only
As Proxy
over personal user
Role
Role
Interface
Script
Oracle Wallet
ListenerRestrict IP address
Keine
Passwörter
in Skripts!
LogOn Trigger
Restrict on
Business Rules
SSL Verschlüsselung
Seite 19Gunther Pippèrr © 2018 http://www.pipperr.de
Welche Funktionen stehen uns dazu zur Verfügung
▪ Schema und Passwort
▪ Oracle Wallet für Oracle Secure External Passwort Store
▪ Sicheres Handling von Passwörtern in Scripts
▪ Objects Grants und Synonyms
▪ VPD – Virtual Private Database und Fine Access Control (Nur EE!)
▪ Datenbank Rollen
▪ Profile und Oracle Workload Management
▪ Oracle Proxy User Concept
▪ Login Trigger
▪ SQL*NET Verschlüsselung und Listener Security auf IP Adressen
Seite 20Gunther Pippèrr © 2018 http://www.pipperr.de
Schema User und Passwort
▪ Wo wird am besten die Information hinterlegt, welcher wirklicher
User im Unternehmen hinter einem DB User steht?
– Unterschiedliche Profile als Flag verwenden
• Für jede Nutzerklasse ein eigenes Profil definieren und den Usern zuweisen
– Windows Login im Namen codieren und Schema-Namen flaggen
• Wie für PIPPERR ein P_PIPPERR
▪ Ab 12c – Column ORACLE_MAINTAINED für interne DB User
Seite 21Gunther Pippèrr © 2018 http://www.pipperr.de
18c – New Feature – Schema OHNE Authentifzierung
▪ Schema OHNE jede Authentifizierung
– Kann NUR mit Proxy Connect genützt werden
CREATE USER schema_owner NO AUTHENTICATION
QUOTA UNLIMITED ON users;
Seite 22Gunther Pippèrr © 2018 http://www.pipperr.de
Oracle Secure External Passwort Store (1)
▪ Wallet anlegen
▪ Username und Passwort hinterlegen – Schlüssel ist ein TNS Alias
▪ Zugriff auf Wallet in sqlnet.ora konfigurieren
mkstore -wrl <wallet_location> -createCredential <db_connect_string> <user_name> <password>
mkstore -wrl . -createCredential orapkigpi gpi passwOrdF0rGPISecurePAsSwOrD
# Wallet nur unter diesem User und auf diesem Server gültig
orapki wallet create -wallet "." -auto_login_local
# Wallet kann verteilt werden
mkstore -wrl . -create
Seite 23Gunther Pippèrr © 2018 http://www.pipperr.de
Oracle Secure External Passwort Store (1)
▪ TNSAlias in der tnsnames.ora setzen
▪ Ohne Angabe eines Users oder Passworts kann nun auf die DB
zugegriffen werden
Sqlplus /@orapkigpi
https://www.pipperr.de/dokuwiki/doku.php?id=dba:oracle_secure_external_passwort_store
Seite 24Gunther Pippèrr © 2018 http://www.pipperr.de
Passwort Sicherheit in Skripts
▪ Siehe dazu ausführlichen Artikel in der Red Stack
– Red Stack Magazin der DOAG, September 2018
▪ Link GPI Wiki =>
https://www.pipperr.de/dokuwiki/doku.php?id=dba:passwort_verschl
uesselt_hinterlegen
Seite 25Gunther Pippèrr © 2018 http://www.pipperr.de
VPD - Virtual Private Database
Select gehalt from mitarbeiter
Abfrage:
Mitarbeiter
Select gehalt from mitarbeiter
where mitarbeiter= SYS_CONTEXT(‘employee’,9999);
Nur die eingeschränkten Daten sind sichtbar
VPD
Security Policies
Context setzen beim Login
Mit DBMS_RLS policy auf
Tabelle setzen
1
2
3
Seite 26Gunther Pippèrr © 2018 http://www.pipperr.de
Die Virtual Private Database (1)
▪ Zugriff auf Tabellenebene prinzipiell einschränken
– Problem:
• Über normale Rechte kann das Lesen auf einer Tabelle nur auf alles oder nichts gesetzt
werden
• Rechte auf Zeilen können über die Anwendung geprüft werden, aber die Anwendung
kann mit SQL*Plus umgangen werden
• Mit Views sind nur bedingte Einschränkungen möglich
• Views sind nur schwer zu warten bei sehr vielen unterschiedlichen Berechtigungen
– Lösung: Virtual Private Database
• Bei jedem Zugriff auf eine Tabelle wird zuvor eine versteckte Funktion ausgewertet, die
das SQL Statement entsprechend einschränkt
• Siehe auch Oracle Label Security
Oracle Label Security => EE + Extra Option notwendig
Virtual Private Database – NUR EE Edition notwenig!
https://docs.oracle.com/en/database/oracle/oracle-database/18/dbseg/using-oracle-vpd-to-control-data-access.html
Seite 27Gunther Pippèrr © 2018 http://www.pipperr.de
Die Virtual Private Database (2)
▪ Fine Grained Access Control
• Package DBMS_RLS
• Eine Funktion wird einer Tabelle zugeordnet
• Beim Parsen eines SQL-Statements wird das Ergebnis der Funktion in die Where-
Bedingung mit eingearbeitet
• Beispiel: (Angestellter darf nur seinen Datensatz sehen)
– Funktion erzeugt Prädikat:
empno=(select empno from emp
where ename = sys_context('userenv','session_user')
– Angestellter sucht mit select * from emp
– Automatisch wird das SQL-Statement erweitert um:
select * from emp where empno=(select empno from emp
where ename = sys_context('userenv','session_user')
▪ Application-Context
• sys_context benutzerdefiniert erweitern
Seite 28Gunther Pippèrr © 2018 http://www.pipperr.de
Kritische Daten maskiert ausgeben
▪ Kritische Daten wie Kreditkarten Daten in der Select Liste eines
SQL maskieren
▪ Lösung: Data Redaction mit Policies in der DB
– EE Feature Advanced Securtiy
– Beispiel => https://oracle-base.com/articles/12c/data-redaction-12cr1
EE + Oracle Advanced Security notwendig
Seite 29Gunther Pippèrr © 2018 http://www.pipperr.de
Arbeiten mit Rollen
▪ Einer Rolle werden diverse Rechte zugeordnet
▪ Einem Benutzer werden eine oder mehrere Rollen zugeordnet
Schema
Rolle Rechte
• Eine Rolle ist eine Liste mit Berechtigungen:
• Objektprivilegien auf Datenbank-Objekte
• User kann Tabelle xyz sehen
• Systemprivilegien auf Tätigkeiten in der Datenbank
• User kann eine Tabelle erzeugen
Seite 30Gunther Pippèrr © 2018 http://www.pipperr.de
PLSQL und Rollen – ein Drama
▪ In PL/SQL können Rechte über Rollen nicht verwendet werden
– Rollen sind nicht statisch und können sich ändern!
– Explizite Rechte an den Tabellen sind für das jeweilige andere Schema
notwendig!
Seite 31Gunther Pippèrr © 2018 http://www.pipperr.de
Welche Rolle habe ich nun in meiner Session?
▪ Tabellen session_privs und session_roles abfragen
https://github.com/gpipperr/OraPowerShell/blob/master/Ora_SQLPlus_SQLcL_sql_scripts/my_user.sql
prompt ... will show you are privileges on the database
select * from session_privs
/
select * from session_roles
/
Seite 32Gunther Pippèrr © 2018 http://www.pipperr.de
Rollen einschränken
▪ Nicht per default zuweisen
– Rolle muss vom Anwender explizit gesetzt werden
• Set role xxxxxxx
– Security by obfusikation
▪ Rolle mit einem Passwort versehen
– User / Applikation muss das Passwort kennen um die Rolle zu verwenden
– Schutz z.b. “versehentlichen” DLM wie drop table im falschen Schema
– Falle beim Upgrade auf 12c! Passwort muss neu gesetzt werden!
▪ PL/SQL Regel zum aktivieren einer Rolle definieren – Secure Application
Role
– Selbstdefinierte Regeln legen fest, was zutreffen muss, damit eine Rolle auch aktiv
wird
– Rolle kann nur über dieses Stück PL/SQL aktiviert werden
Seite 33Gunther Pippèrr © 2018 http://www.pipperr.de
Rolle mit einem eigenen Passwort versehen
▪ Das aktiveren einer Rolle kann mit einem Passwort geschützt
werden:
SYS> create role tester identified by tester;
SCOTT> set role tester identified by tester;
Seite 34Gunther Pippèrr © 2018 http://www.pipperr.de
CREATE OR REPLACE PROCEDURE set_read_role
AUTHID DEFINER
is
cursor c_tables
is select table_name from user_tables;
v_schema varchar2(32):=sys_context( 'userenv', 'current_schema' );
begin
for rec in c_tables
loop
execute immediate
'grant select on ‚
||rec.table_name
||' to ROLE_READ_'||substr(v_schema,1,20);
end loop;
end;
/
AUTID Definer Package Beispiel
Ein weiters Beispiel : Als normaler User DBA Rechte zum Killen von Sessions verwenden:
https://www.pipperr.de/dokuwiki/doku.php?id=dba:kill_session_without_dba_rights
Idee : Rechte in der DB vergeben ohne DBA oder irgendwelche ANY Rechte
Seite 35Gunther Pippèrr © 2018 http://www.pipperr.de
Secure Application Role - Rolle per PL/SQL aktiveren
Rolle
PL/SQL
Routine
Prüfe auf
Regelwerk
EXECUTE IMMEDIATE 'SET ROLE myapprole';
Zuweisen
Rolle ist aber nicht aktiv!
User kann die Rechte
nun verwenden!
OK
1
Rolle
anlegen
2
3
Logik
erstellen
4
Recht auf die Routine
and App User vergeben 5
Als App User
Routine zum
“einschalten”
der Rolle
aufrufen
6
https://www.pipperr.de/dokuwiki/doku.php?id=dba:secure_application_role
Seite 36Gunther Pippèrr © 2018 http://www.pipperr.de
Secure Application Role (1) - Code
– Definieren mit
– Für die Aktivierung einer Rolle, kann mit einem selbstgeschriebenen PL/SQL
Package die Regelkonformität überwacht werden
create role myAPPRole identified using checkMyAppRules;
CREATE OR REPLACE PROCEDURE secadmin.checkMyAppRules
AUTHID CURRENT_USER
AS
BEGIN
IF (SYS_CONTEXT ('userenv','ip_address')
BETWEEN '192.0.2.10' and '192.0.2.20'
AND
TO_CHAR (SYSDATE, 'HH24') BETWEEN 8 AND 17)
THEN
EXECUTE IMMEDIATE 'SET ROLE myAPPRole ';
END IF;
END;
/
Grant execute on secadmin.checkMyAppRules to scott;
Hier
kann jede Logik
stehen
Seite 37Gunther Pippèrr © 2018 http://www.pipperr.de
Secure Application Role (2) - ORA-28201 Fehler
▪ User versucht die Rolle einfach so zu aktivieren
BEGIN dbms_session.set_role('myAPPRole'); END;
ERROR at line 1:
ORA-28201: invalid command to enable secure application role myAPPRole'
ORA-06512: at "SYS.DBMS_SESSION", line 194
ORA-06512: at line 1
set role myAPPRole
*
ERROR at line 1:
ORA-28201: invalid command to enable secure application role myAPPRole'
Prüfen welche Rollen in der Session aktiv sind => select * from session_roles;
Seite 38Gunther Pippèrr © 2018 http://www.pipperr.de
Rolle läßt sich nur über den Aufruf des PL/SQL aktivieren!
▪ Rolle aufrufen
▪ Test mit:
exec secadmin.checkMyAppRules;
select * from session_roles;
…
myAPPRole
Login Trigger verwenden um die Rolle zu aktivieren
Der User muss die entsprechenden Execute Rechte auf die PL/SQL Procedure
besitzen!
Daran denken das ein SET Role alle anderen Rollen deaktiviert!
Falls die Default Rollen des Users weiterhin gültig sein sollen, diese mit
in den set Befehl als komplette Liste aufnehmen!
Seite 39Gunther Pippèrr © 2018 http://www.pipperr.de
Rollen in der Datenbank kontrollieren
▪ VIEW DBA_APPLICATION_ROLES
Seite 40Gunther Pippèrr © 2018 http://www.pipperr.de
Set Role Verhalten beachten!
▪ Ein "Set Role" setzt alle bestehenden Rollenzuordnungen zurück
und enabled nur die angebene Liste von Rollen.
▪ Ein "Set Role ALL" enabled alle zugewiesenen Rollen, allerdings
nicht die "Secure Application Roles" !
▪ D.h. wenn die bestehenden Rollen beibehalten werden sollen, muss
in das SET Role Kommando die Liste der gerade aktvierten Rollen
mit aufgenommen werden!
Seite 41Gunther Pippèrr © 2018 http://www.pipperr.de
Einführen einer Lese Rolle pro technisches Schema
▪ Für jedes technische Schema wird eine Lese Rolle angelegt
– ROLE_<SCHEMA>_READ
Seite 42Gunther Pippèrr © 2018 http://www.pipperr.de
Profile verwenden um User Klassen zu unterscheiden
▪ Über die Verwendung eines Profils kann auch die Verwendung von
Ressourcen eingeschränkt werden
– Die Eigenschaften des Passworts können definiert werden ( z.B.: wann es
abläuft)
– Ein default Profil für alle Benutzer
– Ein definiertes Profil pro Benutzer möglich, damit die User zum
Unterscheiden „flaggen2
– Profile in der DB abfragen mit:
sys:gpi>select * from dba_profiles;
PROFILE ROURCE_NAME RESOURCE LIMIT
---------- -------------------------------- -------- ----------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED
.....
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
Seite 43Gunther Pippèrr © 2018 http://www.pipperr.de
Oracle Proxy User Feature
▪ Mit seinem eigenen persönlichen User an einem fremden Schema
anmelden
– Ein persönlicher User hat seinen eigenen Account in der DB
– Dem User wird das Recht vergeben sich an einem anderen Schema mit
seinem Passwort anzumelden
– Einfache [] Syntax
Sql>connect P_PIPPERR[APP_OWNER]/passw0rd
Your Login String - <YOUR_USER_NAME>[TECHNICAL_USER]/<YOUR_PASSWORD>
Seite 44Gunther Pippèrr © 2018 http://www.pipperr.de
Proxy Feature
▪ Use Oracle Proxy
Personal Schema
PERSONAL_USER
TECHNICAL_SCHEMA
1
1- Anlegen des persönlichen Users
2- Auf dem TECHNICAL_SCHEMA die Proxy Rechte vergeben
3 - Connect als Proxy
2
3
Create user PERSONAL_USER ….
Alter user TECHNICAL_SCHEMA grant connect through PERSONAL_USER;
sqlplus PERSONAL_USER [TECHNICAL_SCHEMA]@local_db
Kann auch unter Java einfach implementiert werden
Seite 45Gunther Pippèrr © 2018 http://www.pipperr.de
Den Proxy User in der DB nachweisen
▪ SYS_CONTEXT
SYS_CONTEXT
=> https://docs.oracle.com/database/121/SQLRF/functions199.htm#SQLRF06117
SELECT SYS_CONTEXT ('USERENV', 'CURRENT_USER') CURRENT_USER
, SYS_CONTEXT ('USERENV', 'CURRENT_USERID') CURRENT_USERID
, SYS_CONTEXT ('USERENV', 'PROXY_USER') PROXY_USER_ID
, SYS_CONTEXT ('USERENV', 'PROXY_USERID') PROXY_USER
, SYS_CONTEXT ('USERENV', 'AUTHENTICATED_IDENTITY') AUTH_AS
FROM DUAL
/
Seite 46Gunther Pippèrr © 2018 http://www.pipperr.de
Den Proxy User überwachen
▪ DB Auditing
– Der Proxy User und die eigentliche Session müssen gejoint werden
SELECT a.username connecting_user
, a.action_name
, a.timestamp
, a.comment_text
, b.username proxy_username
, b.action_name proxy_action_name
, b.comment_text proxy_comment_text
FROM dba_audit_trail a INNER JOIN dba_audit_trail b ON (a.proxy_sessionid=b.sessionid)
ORDER BY a.timestamp
/
Seite 47Gunther Pippèrr © 2018 http://www.pipperr.de
Proxy DD Views
▪ Wie können die Proxy Rechte in der DB überwacht werden
▪ Wer kann sich an einem Schema anmelden
• DBA_PROXIES - Get all information from proxy users
• USER_PROXIES – To which schemas I can connect
• PROXY_USERS – Who can use which Proxy connect
Seite 48Gunther Pippèrr © 2018 http://www.pipperr.de
Testcase – Was passiert in den verschiedenen User Status
▪ Vergleich verschiedener User Status
As Proxy User ist der Connect an ein Schema mit abgelaufenen Password möglich
Seite 49Gunther Pippèrr © 2018 http://www.pipperr.de
Proxy Feature und Rolen
▪ Mit dem Proxy Login kann auch gleich die richtige Rolle gesetzt
werden!
▪ Use Role to set the rights of this proxy session!
– For Example
– TECHNICAL_SCHEMA has only as default role „connect“
– To use a Role like RESOUCE you need a Password
– If Proxy User connect he get a role only with the right he need for his work
ALTER USER TECHNICAL_SCHEMA GRANT CONNECT THROUGH PERSONAL_USER WITH ROLES hr_user_role;
Seite 50Gunther Pippèrr © 2018 http://www.pipperr.de
Wartbarkeit über ein PL/SQL Hilfsprogramm erweitern
▪ In jeden Schema liegt eine PL/SQL Routine mit “AutID Definier”
▪ Beim Aufrufen der Procedure wird die Lese Rolle mit den Select
Rechten auf Tabellen und Views gefüllt.
▪ Ein Admin Schema hat entsprechende Rechte und kann damit die
Rollen mit Zugordnungen versorgen OHNE eigene Rechte in den
jeweiligen Schemas
Seite 51Gunther Pippèrr © 2018 http://www.pipperr.de
Oracle Listener härten
▪ Listener Security auf IP Adressen
– Den Oracle Listener auf IP Adressen einschränken
– Die sqlnet.ora des Listeners anpassen
Alternativ DB Firewall für Arme – CMAN der Connection Manager
https://www.pipperr.de/dokuwiki/doku.php?id=dba:sqlnet_cman_connection_manager
TCP.VALIDNODE_CHECKING = YES
# Ausschließen
TCP.EXCLUDED_NODES= (10.10.*)
#Einladen
TCP.INVITED_NODES=(localhost,10.10.10.*)
Invited hat die höhere Priorität
Seite 52Gunther Pippèrr © 2018 http://www.pipperr.de
Projekt Resümee
▪ Ein sehr langer Weg …..
▪ Mehr als 2 Jahre, bis alle Passwörter sicher geändert werden
konnten
▪ Mehr als 2 Jahre zum Einführen einer Lese Rolle
▪ Nur die einfachsten Basics konnten umgesetzt werden
Ursache: Unwissen, Kostenstellen denken, unwillige Hoster ,
unklare Zuständigkeiten, lange Subunternehmer Ketten
Seite 53Gunther Pippèrr © 2018 http://www.pipperr.de
Fragen
Questions?
Seite 54Gunther Pippèrr © 2018 http://www.pipperr.de
Quellen
▪ Oracle Dokumentation und Support Portal
▪ https://www.pipperr.de/dokuwiki/doku.php
▪ Wieder mal eine andere Script Library
– https://github.com/gpipperr/OraPowerShell
▪ Bildmaterial : https://pixabay.com und https://publicdomainvectors.org

Mais conteúdo relacionado

Semelhante a Über Rechte/Rollen und den sicheren Betrieb der Datenbank

Sensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankSensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankUlrike Schwinn
 
DOAG SIG Security Vortrag 2013: Wann haben Sie das letzte Mal Ihre Datenbank ...
DOAG SIG Security Vortrag 2013: Wann haben Sie das letzte Mal Ihre Datenbank ...DOAG SIG Security Vortrag 2013: Wann haben Sie das letzte Mal Ihre Datenbank ...
DOAG SIG Security Vortrag 2013: Wann haben Sie das letzte Mal Ihre Datenbank ...Carsten Muetzlitz
 
Trivadis triCast Oracle Centrally Managed Users 18/19c
Trivadis triCast Oracle Centrally Managed Users 18/19cTrivadis triCast Oracle Centrally Managed Users 18/19c
Trivadis triCast Oracle Centrally Managed Users 18/19cStefan Oehrli
 
DOAG 2015 enterprise_securitymitlda_pundpki-pub
DOAG 2015 enterprise_securitymitlda_pundpki-pubDOAG 2015 enterprise_securitymitlda_pundpki-pub
DOAG 2015 enterprise_securitymitlda_pundpki-pubLoopback.ORG
 
DACHNUG50 EasyTeamsWork.pdf
DACHNUG50 EasyTeamsWork.pdfDACHNUG50 EasyTeamsWork.pdf
DACHNUG50 EasyTeamsWork.pdfDNUG e.V.
 
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017TRILOS new media
 
DNUG 2017 - ApplicationInsights
DNUG 2017 - ApplicationInsightsDNUG 2017 - ApplicationInsights
DNUG 2017 - ApplicationInsightsChristoph Adler
 
DNUG - ApplicationInsights: So analysieren, optimieren und modernisieren Sie ...
DNUG - ApplicationInsights: So analysieren, optimieren und modernisieren Sie ...DNUG - ApplicationInsights: So analysieren, optimieren und modernisieren Sie ...
DNUG - ApplicationInsights: So analysieren, optimieren und modernisieren Sie ...panagenda
 
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...Markus Flechtner
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrGunther Pippèrr
 
AdminCamp2017 - ApplicationInsights
AdminCamp2017 - ApplicationInsightsAdminCamp2017 - ApplicationInsights
AdminCamp2017 - ApplicationInsightsChristoph Adler
 
AOUG 2019 Oracle Centrally Managed Users 18c / 19c
AOUG 2019 Oracle Centrally Managed Users 18c / 19cAOUG 2019 Oracle Centrally Managed Users 18c / 19c
AOUG 2019 Oracle Centrally Managed Users 18c / 19cStefan Oehrli
 
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeasSystem-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeasSpeedPartner GmbH
 
OOP 2006: Einsatz von Portaltechnologie in Bankanwendungen für Internet-Endku...
OOP 2006: Einsatz von Portaltechnologie in Bankanwendungen für Internet-Endku...OOP 2006: Einsatz von Portaltechnologie in Bankanwendungen für Internet-Endku...
OOP 2006: Einsatz von Portaltechnologie in Bankanwendungen für Internet-Endku...JoeyNbg
 
GAUC 2017 Workshop Wetter Tracking & Co: Johannes Klampfl & Lukas Wojcik (e-d...
GAUC 2017 Workshop Wetter Tracking & Co: Johannes Klampfl & Lukas Wojcik (e-d...GAUC 2017 Workshop Wetter Tracking & Co: Johannes Klampfl & Lukas Wojcik (e-d...
GAUC 2017 Workshop Wetter Tracking & Co: Johannes Klampfl & Lukas Wojcik (e-d...e-dialog GmbH
 
Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2panagenda
 
Warum Monitoring und warum Icinga 2 (Webinar vom 04.12.2013)
Warum Monitoring und warum Icinga 2 (Webinar vom 04.12.2013)Warum Monitoring und warum Icinga 2 (Webinar vom 04.12.2013)
Warum Monitoring und warum Icinga 2 (Webinar vom 04.12.2013)NETWAYS
 
FMK2018- Web Direct Tipps und Tricks Alexis Gehrt
FMK2018- Web Direct Tipps und Tricks Alexis GehrtFMK2018- Web Direct Tipps und Tricks Alexis Gehrt
FMK2018- Web Direct Tipps und Tricks Alexis GehrtVerein FM Konferenz
 
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien DNUG e.V.
 

Semelhante a Über Rechte/Rollen und den sicheren Betrieb der Datenbank (20)

Sensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankSensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle Datenbank
 
DOAG SIG Security Vortrag 2013: Wann haben Sie das letzte Mal Ihre Datenbank ...
DOAG SIG Security Vortrag 2013: Wann haben Sie das letzte Mal Ihre Datenbank ...DOAG SIG Security Vortrag 2013: Wann haben Sie das letzte Mal Ihre Datenbank ...
DOAG SIG Security Vortrag 2013: Wann haben Sie das letzte Mal Ihre Datenbank ...
 
Trivadis triCast Oracle Centrally Managed Users 18/19c
Trivadis triCast Oracle Centrally Managed Users 18/19cTrivadis triCast Oracle Centrally Managed Users 18/19c
Trivadis triCast Oracle Centrally Managed Users 18/19c
 
DOAG 2015 enterprise_securitymitlda_pundpki-pub
DOAG 2015 enterprise_securitymitlda_pundpki-pubDOAG 2015 enterprise_securitymitlda_pundpki-pub
DOAG 2015 enterprise_securitymitlda_pundpki-pub
 
DACHNUG50 EasyTeamsWork.pdf
DACHNUG50 EasyTeamsWork.pdfDACHNUG50 EasyTeamsWork.pdf
DACHNUG50 EasyTeamsWork.pdf
 
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
Vortrag WordPress absichern beim Webmontag Hannover am 16.01.2017
 
DNUG 2017 - ApplicationInsights
DNUG 2017 - ApplicationInsightsDNUG 2017 - ApplicationInsights
DNUG 2017 - ApplicationInsights
 
DNUG - ApplicationInsights: So analysieren, optimieren und modernisieren Sie ...
DNUG - ApplicationInsights: So analysieren, optimieren und modernisieren Sie ...DNUG - ApplicationInsights: So analysieren, optimieren und modernisieren Sie ...
DNUG - ApplicationInsights: So analysieren, optimieren und modernisieren Sie ...
 
Überwachung und inHouse-Archiv mit DEPAROM-Profil
Überwachung und inHouse-Archiv mit DEPAROM-ProfilÜberwachung und inHouse-Archiv mit DEPAROM-Profil
Überwachung und inHouse-Archiv mit DEPAROM-Profil
 
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
Die Datenbank ist nicht immer Schuld - Gründe warum Datenbank-Migration schei...
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
 
AdminCamp2017 - ApplicationInsights
AdminCamp2017 - ApplicationInsightsAdminCamp2017 - ApplicationInsights
AdminCamp2017 - ApplicationInsights
 
AOUG 2019 Oracle Centrally Managed Users 18c / 19c
AOUG 2019 Oracle Centrally Managed Users 18c / 19cAOUG 2019 Oracle Centrally Managed Users 18c / 19c
AOUG 2019 Oracle Centrally Managed Users 18c / 19c
 
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeasSystem-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
 
OOP 2006: Einsatz von Portaltechnologie in Bankanwendungen für Internet-Endku...
OOP 2006: Einsatz von Portaltechnologie in Bankanwendungen für Internet-Endku...OOP 2006: Einsatz von Portaltechnologie in Bankanwendungen für Internet-Endku...
OOP 2006: Einsatz von Portaltechnologie in Bankanwendungen für Internet-Endku...
 
GAUC 2017 Workshop Wetter Tracking & Co: Johannes Klampfl & Lukas Wojcik (e-d...
GAUC 2017 Workshop Wetter Tracking & Co: Johannes Klampfl & Lukas Wojcik (e-d...GAUC 2017 Workshop Wetter Tracking & Co: Johannes Klampfl & Lukas Wojcik (e-d...
GAUC 2017 Workshop Wetter Tracking & Co: Johannes Klampfl & Lukas Wojcik (e-d...
 
Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2
 
Warum Monitoring und warum Icinga 2 (Webinar vom 04.12.2013)
Warum Monitoring und warum Icinga 2 (Webinar vom 04.12.2013)Warum Monitoring und warum Icinga 2 (Webinar vom 04.12.2013)
Warum Monitoring und warum Icinga 2 (Webinar vom 04.12.2013)
 
FMK2018- Web Direct Tipps und Tricks Alexis Gehrt
FMK2018- Web Direct Tipps und Tricks Alexis GehrtFMK2018- Web Direct Tipps und Tricks Alexis Gehrt
FMK2018- Web Direct Tipps und Tricks Alexis Gehrt
 
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
HCL Domino 14 - Leap 1.1.2 - DNUG Stammtisch Wien
 

Mais de Gunther Pippèrr

Archiving Oracle Primavera project plans with software development tools
Archiving Oracle Primavera project plans with software development toolsArchiving Oracle Primavera project plans with software development tools
Archiving Oracle Primavera project plans with software development toolsGunther Pippèrr
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterGunther Pippèrr
 
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02Gunther Pippèrr
 
Oracle hadoop doag-big-data_09_2014_gpi
Oracle hadoop doag-big-data_09_2014_gpiOracle hadoop doag-big-data_09_2014_gpi
Oracle hadoop doag-big-data_09_2014_gpiGunther Pippèrr
 
Oracle connection manager_cman_doag_sig_security_mai_2015
Oracle connection manager_cman_doag_sig_security_mai_2015Oracle connection manager_cman_doag_sig_security_mai_2015
Oracle connection manager_cman_doag_sig_security_mai_2015Gunther Pippèrr
 
Oracle no sql-doag-datenbank_konferenz_juni_2014
Oracle no sql-doag-datenbank_konferenz_juni_2014Oracle no sql-doag-datenbank_konferenz_juni_2014
Oracle no sql-doag-datenbank_konferenz_juni_2014Gunther Pippèrr
 
Oracle nosql twjug-oktober-2014_taiwan_print_v01
Oracle nosql twjug-oktober-2014_taiwan_print_v01Oracle nosql twjug-oktober-2014_taiwan_print_v01
Oracle nosql twjug-oktober-2014_taiwan_print_v01Gunther Pippèrr
 

Mais de Gunther Pippèrr (9)

Archiving Oracle Primavera project plans with software development tools
Archiving Oracle Primavera project plans with software development toolsArchiving Oracle Primavera project plans with software development tools
Archiving Oracle Primavera project plans with software development tools
 
Ldap sqlnet
Ldap sqlnetLdap sqlnet
Ldap sqlnet
 
01 sqlplus
01 sqlplus01 sqlplus
01 sqlplus
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerter
 
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
Doag 2104 manuskript_hadoop_oracle_integration_gunther_pipperr_v02
 
Oracle hadoop doag-big-data_09_2014_gpi
Oracle hadoop doag-big-data_09_2014_gpiOracle hadoop doag-big-data_09_2014_gpi
Oracle hadoop doag-big-data_09_2014_gpi
 
Oracle connection manager_cman_doag_sig_security_mai_2015
Oracle connection manager_cman_doag_sig_security_mai_2015Oracle connection manager_cman_doag_sig_security_mai_2015
Oracle connection manager_cman_doag_sig_security_mai_2015
 
Oracle no sql-doag-datenbank_konferenz_juni_2014
Oracle no sql-doag-datenbank_konferenz_juni_2014Oracle no sql-doag-datenbank_konferenz_juni_2014
Oracle no sql-doag-datenbank_konferenz_juni_2014
 
Oracle nosql twjug-oktober-2014_taiwan_print_v01
Oracle nosql twjug-oktober-2014_taiwan_print_v01Oracle nosql twjug-oktober-2014_taiwan_print_v01
Oracle nosql twjug-oktober-2014_taiwan_print_v01
 

Über Rechte/Rollen und den sicheren Betrieb der Datenbank

  • 1. Seite 1Gunther Pippèrr © 2018 http://www.pipperr.de ÜBER RECHTE/ROLLEN UND DEN SICHEREN BETRIEB DER DATENBANK Die Anwender in der DB im Zaum halten DOAG Konferenz 20.11.2018
  • 2. Seite 2Gunther Pippèrr © 2018 http://www.pipperr.de GPI Consult Gunther Pippèrr Freiberuflicher Oracle Datenbank Experte - Ich unterstütze Sie gerne in ihren Projekten. Bergweg 14 37216 Witzenhausen/Roßbach Mein Blog gunther@pipperr.de https://www.pipperr.de/dokuwiki/
  • 3. Seite 3Gunther Pippèrr © 2018 http://www.pipperr.de APEX Meetup Gruppe Kassel https://www.meetup.com/de-DE/Oracle-APEX-Kassel/
  • 4. Seite 4Gunther Pippèrr © 2018 http://www.pipperr.de ÜBER RECHTE/ROLLEN UND DEN SICHEREN BETRIEB DER DB Die Anwender in der DB im Zaum halten
  • 5. Seite 5Gunther Pippèrr © 2018 http://www.pipperr.de Der normale Alltag – Die Ausgangslage Im normalen Fall => Schema Name = PASSWORT • Passwort des zentralen Schemas allgemein bekannt • Änderungen auf Grund von vielen Abgängigkeiten • nicht möglich Applikation Core Schema Oracle 10g R2 ohne Patch Wer hat wann und was in der Datenbank “angepasst”? Im Zweifelsfall war es mal wieder keiner ….
  • 6. Seite 6Gunther Pippèrr © 2018 http://www.pipperr.de Unser Ziel ▪ Einzelne Anwender in der Datenbank identifizieren ▪ Zugriff auf die Daten auf so wenig Personen wie möglich/nötig einschränken ▪ Passwörter nicht in der ganzen Firma verteilen ▪ Passwörter entsprechend der Firmen Regularien verwenden ▪ Die DSGVO nachvollziehbar einhalten ▪ Das Arbeiten mit der Datenbank für Administratoren und Entwickler/Support so einfach wie möglich gestalten
  • 7. Seite 7Gunther Pippèrr © 2018 http://www.pipperr.de Projekt zur Optimierung der DB aufsetzen Interfaces Applikationen isolieren Persönliche DB User einführen Core Schema Passwörter ändern Analyse Ist Zustand Wer Wie Was Warum Schema Interface Externe Passwort Security Rechte und Rollen Schema DB User Proxy User Konzept Rechte und Rollen Datenbank Monitoring aktivieren
  • 8. Seite 8Gunther Pippèrr © 2018 http://www.pipperr.de 1- Analyse ▪ Analyse der Systemumgebung – Wer verwendet die Datenbank? • Warum werden Daten aus der Datenbank ausgelesen? – Was verwendet die Datenbank? • Welche Applikationen greifen auf die Datenbank zu – Werkzeug: • v$session in Hilfstabelle schreiben • Audit Log auswerten, • AWR Tabellen (falls Lizenz vorhanden) auswerten • Listener Log analysieren • DDL Trigger / Error Trigger Analyse Ist Zustand Wer Wie Was Warum
  • 9. Seite 9Gunther Pippèrr © 2018 http://www.pipperr.de 1 – v$session in Tabelle schreiben ▪ V$SESSION in eine einfache Hilfstabelle schreiben – Vorteil: ALLE Sessions, auch die nicht aktiven, werden protokolliert – Das Audit Log der DB ist meist nicht über Monate hinweg verfügbar – Keine Diagnostic Pack Lizenz notwendig für v$active_session_history! – Einfach zu implementieren und auszuwerten – Code Fragment: – Nachteil : Rechte müssen beim DBA erkämpft werden create table mon_user.log_v_sessions as select s.*, ‘1’ as snap, sysdate as snap_date from v$session s where username is not null; -- Job mit: Insert into mon_user.log_v_sessions select s.*, snap_seq.nextval, sysdate from v$session s;
  • 10. Seite 10Gunther Pippèrr © 2018 http://www.pipperr.de 1 – Die Datenbank proaktiv überwachen ▪ Oracle listener.log regelmäßig auswerten ▪ DDL Logging einschalten – $ADR_HOME/rdbms/<sid>/<sid>/log/ddl/log.xml – DB Parameter ENABLE_DDL_LOGGING = true (EE Feature!) ▪ Standard AUDIT (pre 12c default) optimieren bzw. 12c unified auditing verwenden ▪ System Trigger für das Logging einsetzen – Wie On Logon, on DDL , on error
  • 11. Seite 11Gunther Pippèrr © 2018 http://www.pipperr.de 1 – Technische und persönliche User gruppieren ▪ Eine Matrix was und wer in der Datenbank wie arbeiten soll User Type Data Type Example Concept Role Name DB Profile Name Technical Data Owner Application Core Schema Very Strong Password with min. 20 letters data_owner Technical Application (Select/DML) Interfaces to other programs Synonym Schema, minimal rights on table and PL/SQL <appname>_role interface Personal Only Select Analysts Synonym Schema, minimal rights on table and PL/SQL For example Analyst_role_<schema> personal_user Personal Select / DML /DDL Developer and Deployment User Oracle Proxy Authentication Personal user only create Session personal_user
  • 12. Seite 12Gunther Pippèrr © 2018 http://www.pipperr.de Technische User ▪ Es wird zwischen zwei Gruppen unterschieden: – Technische User mit Passwort für Interfaces und Applikationen – Technische User, die die Daten halten. Hier sollte die direkte Anmeldung nicht mehr so “einfach” möglich sein • Gutes und geheimes Passwort • User locken und bei Bedarf entsperren ▪ New Feature 18c - Schema Only Accounts – Anlegen mit : CREATE USER schema_owner NO AUTHENTICATION QUOTA UNLIMITED ON users; Zugriff von Administratoren oder Entwicklern nur über PROXY Rechte !
  • 13. Seite 13Gunther Pippèrr © 2018 http://www.pipperr.de 1 – Wie lief das im Projekt ▪ Keine Doku, keine Ansprechpartner, Business Owner kennen die Applikationen nicht, externer Dienstleister “unbedarft” ….. ▪ Im ersten Schritt wurde eine Bestandsanalyse durchgeführt, Ansprechpartner identifiziert und alle Interfaces und Applikationen als “Bild” pro Interface erstellt => Erster Einstieg in eine Betriebsdokumentation Ziel – eine Matrix von persönlichen und technischen User identifizieren Dauer für eine DWH Umgebung >>> 3 Monate
  • 14. Seite 14Gunther Pippèrr © 2018 http://www.pipperr.de Einführen der Persönlicher User (1) ▪ Jeder Anwender, der direkt mit den Daten der Datenbank arbeiten muss, erhält ein persönliches Schema in der Datenbank ▪ Anwender wird über sein zugeordnetes Profil und den Präfix im Schema Namen identifiziert – Schema Name entspricht möglichst dem AD Account, um später diesen User mit dem AD auch automatisch abgleichen zu können – Z.B., Windows User “pipperr” => DB User P_PIPPERR
  • 15. Seite 15Gunther Pippèrr © 2018 http://www.pipperr.de Einführen Persönlicher User (2) – Zwei Gruppen ▪ Fragt nur Daten ab, ändert keine Werte in der DB ▪ Benötigt keine Proxy Rechte ▪ Hat eine Lese Rolle auf die Schemas, die er sehen soll ▪ Views um die Arbeit zu erleichtern User muss Daten anpassen ▪ Verwendet Proxy um sich direkt auf dem Schema anzumelden ▪ Rollen mit Passwort ( Secure Application Roles ) verwenden um z.B. DML Operationen zu verbieten ▪ VPD – Virtual Private Data Feature einsetzen um kritische Daten vor dem User zu verbergen Read Only User
  • 16. Seite 16Gunther Pippèrr © 2018 http://www.pipperr.de Einführen einer Lese Rolle für Persönliche User ▪ Um die Verwaltung in der Datenbank zu vereinfachen wird für jedes technische Core Schema eine Lese Rolle definiert ▪ Feste Namesgebung, wird beim Anlegen eines Schemas gleich mit beantragt => ROLE_READ_<SCHEMA> ▪ Rolle wird automatisch mit allen Tabellen des Schemas befüllt über PL/SQL Routine – Vorteil => Wartungsarm – Nachteil => Nicht sehr feingranular
  • 17. Seite 17Gunther Pippèrr © 2018 http://www.pipperr.de 2 – Technische Lösung finden ▪ Ziel: Zugriff auf die Daten so stark schützen wie möglich Core Schema Technischer Datenzugriff Persönliche User
  • 18. Seite 18Gunther Pippèrr © 2018 http://www.pipperr.de Personal Schema 2 – Überblick Core Data Schema Interface Schema Synonym Table Report Schema Synonym Direct Connect only As Proxy over personal user Role Role Interface Script Oracle Wallet ListenerRestrict IP address Keine Passwörter in Skripts! LogOn Trigger Restrict on Business Rules SSL Verschlüsselung
  • 19. Seite 19Gunther Pippèrr © 2018 http://www.pipperr.de Welche Funktionen stehen uns dazu zur Verfügung ▪ Schema und Passwort ▪ Oracle Wallet für Oracle Secure External Passwort Store ▪ Sicheres Handling von Passwörtern in Scripts ▪ Objects Grants und Synonyms ▪ VPD – Virtual Private Database und Fine Access Control (Nur EE!) ▪ Datenbank Rollen ▪ Profile und Oracle Workload Management ▪ Oracle Proxy User Concept ▪ Login Trigger ▪ SQL*NET Verschlüsselung und Listener Security auf IP Adressen
  • 20. Seite 20Gunther Pippèrr © 2018 http://www.pipperr.de Schema User und Passwort ▪ Wo wird am besten die Information hinterlegt, welcher wirklicher User im Unternehmen hinter einem DB User steht? – Unterschiedliche Profile als Flag verwenden • Für jede Nutzerklasse ein eigenes Profil definieren und den Usern zuweisen – Windows Login im Namen codieren und Schema-Namen flaggen • Wie für PIPPERR ein P_PIPPERR ▪ Ab 12c – Column ORACLE_MAINTAINED für interne DB User
  • 21. Seite 21Gunther Pippèrr © 2018 http://www.pipperr.de 18c – New Feature – Schema OHNE Authentifzierung ▪ Schema OHNE jede Authentifizierung – Kann NUR mit Proxy Connect genützt werden CREATE USER schema_owner NO AUTHENTICATION QUOTA UNLIMITED ON users;
  • 22. Seite 22Gunther Pippèrr © 2018 http://www.pipperr.de Oracle Secure External Passwort Store (1) ▪ Wallet anlegen ▪ Username und Passwort hinterlegen – Schlüssel ist ein TNS Alias ▪ Zugriff auf Wallet in sqlnet.ora konfigurieren mkstore -wrl <wallet_location> -createCredential <db_connect_string> <user_name> <password> mkstore -wrl . -createCredential orapkigpi gpi passwOrdF0rGPISecurePAsSwOrD # Wallet nur unter diesem User und auf diesem Server gültig orapki wallet create -wallet "." -auto_login_local # Wallet kann verteilt werden mkstore -wrl . -create
  • 23. Seite 23Gunther Pippèrr © 2018 http://www.pipperr.de Oracle Secure External Passwort Store (1) ▪ TNSAlias in der tnsnames.ora setzen ▪ Ohne Angabe eines Users oder Passworts kann nun auf die DB zugegriffen werden Sqlplus /@orapkigpi https://www.pipperr.de/dokuwiki/doku.php?id=dba:oracle_secure_external_passwort_store
  • 24. Seite 24Gunther Pippèrr © 2018 http://www.pipperr.de Passwort Sicherheit in Skripts ▪ Siehe dazu ausführlichen Artikel in der Red Stack – Red Stack Magazin der DOAG, September 2018 ▪ Link GPI Wiki => https://www.pipperr.de/dokuwiki/doku.php?id=dba:passwort_verschl uesselt_hinterlegen
  • 25. Seite 25Gunther Pippèrr © 2018 http://www.pipperr.de VPD - Virtual Private Database Select gehalt from mitarbeiter Abfrage: Mitarbeiter Select gehalt from mitarbeiter where mitarbeiter= SYS_CONTEXT(‘employee’,9999); Nur die eingeschränkten Daten sind sichtbar VPD Security Policies Context setzen beim Login Mit DBMS_RLS policy auf Tabelle setzen 1 2 3
  • 26. Seite 26Gunther Pippèrr © 2018 http://www.pipperr.de Die Virtual Private Database (1) ▪ Zugriff auf Tabellenebene prinzipiell einschränken – Problem: • Über normale Rechte kann das Lesen auf einer Tabelle nur auf alles oder nichts gesetzt werden • Rechte auf Zeilen können über die Anwendung geprüft werden, aber die Anwendung kann mit SQL*Plus umgangen werden • Mit Views sind nur bedingte Einschränkungen möglich • Views sind nur schwer zu warten bei sehr vielen unterschiedlichen Berechtigungen – Lösung: Virtual Private Database • Bei jedem Zugriff auf eine Tabelle wird zuvor eine versteckte Funktion ausgewertet, die das SQL Statement entsprechend einschränkt • Siehe auch Oracle Label Security Oracle Label Security => EE + Extra Option notwendig Virtual Private Database – NUR EE Edition notwenig! https://docs.oracle.com/en/database/oracle/oracle-database/18/dbseg/using-oracle-vpd-to-control-data-access.html
  • 27. Seite 27Gunther Pippèrr © 2018 http://www.pipperr.de Die Virtual Private Database (2) ▪ Fine Grained Access Control • Package DBMS_RLS • Eine Funktion wird einer Tabelle zugeordnet • Beim Parsen eines SQL-Statements wird das Ergebnis der Funktion in die Where- Bedingung mit eingearbeitet • Beispiel: (Angestellter darf nur seinen Datensatz sehen) – Funktion erzeugt Prädikat: empno=(select empno from emp where ename = sys_context('userenv','session_user') – Angestellter sucht mit select * from emp – Automatisch wird das SQL-Statement erweitert um: select * from emp where empno=(select empno from emp where ename = sys_context('userenv','session_user') ▪ Application-Context • sys_context benutzerdefiniert erweitern
  • 28. Seite 28Gunther Pippèrr © 2018 http://www.pipperr.de Kritische Daten maskiert ausgeben ▪ Kritische Daten wie Kreditkarten Daten in der Select Liste eines SQL maskieren ▪ Lösung: Data Redaction mit Policies in der DB – EE Feature Advanced Securtiy – Beispiel => https://oracle-base.com/articles/12c/data-redaction-12cr1 EE + Oracle Advanced Security notwendig
  • 29. Seite 29Gunther Pippèrr © 2018 http://www.pipperr.de Arbeiten mit Rollen ▪ Einer Rolle werden diverse Rechte zugeordnet ▪ Einem Benutzer werden eine oder mehrere Rollen zugeordnet Schema Rolle Rechte • Eine Rolle ist eine Liste mit Berechtigungen: • Objektprivilegien auf Datenbank-Objekte • User kann Tabelle xyz sehen • Systemprivilegien auf Tätigkeiten in der Datenbank • User kann eine Tabelle erzeugen
  • 30. Seite 30Gunther Pippèrr © 2018 http://www.pipperr.de PLSQL und Rollen – ein Drama ▪ In PL/SQL können Rechte über Rollen nicht verwendet werden – Rollen sind nicht statisch und können sich ändern! – Explizite Rechte an den Tabellen sind für das jeweilige andere Schema notwendig!
  • 31. Seite 31Gunther Pippèrr © 2018 http://www.pipperr.de Welche Rolle habe ich nun in meiner Session? ▪ Tabellen session_privs und session_roles abfragen https://github.com/gpipperr/OraPowerShell/blob/master/Ora_SQLPlus_SQLcL_sql_scripts/my_user.sql prompt ... will show you are privileges on the database select * from session_privs / select * from session_roles /
  • 32. Seite 32Gunther Pippèrr © 2018 http://www.pipperr.de Rollen einschränken ▪ Nicht per default zuweisen – Rolle muss vom Anwender explizit gesetzt werden • Set role xxxxxxx – Security by obfusikation ▪ Rolle mit einem Passwort versehen – User / Applikation muss das Passwort kennen um die Rolle zu verwenden – Schutz z.b. “versehentlichen” DLM wie drop table im falschen Schema – Falle beim Upgrade auf 12c! Passwort muss neu gesetzt werden! ▪ PL/SQL Regel zum aktivieren einer Rolle definieren – Secure Application Role – Selbstdefinierte Regeln legen fest, was zutreffen muss, damit eine Rolle auch aktiv wird – Rolle kann nur über dieses Stück PL/SQL aktiviert werden
  • 33. Seite 33Gunther Pippèrr © 2018 http://www.pipperr.de Rolle mit einem eigenen Passwort versehen ▪ Das aktiveren einer Rolle kann mit einem Passwort geschützt werden: SYS> create role tester identified by tester; SCOTT> set role tester identified by tester;
  • 34. Seite 34Gunther Pippèrr © 2018 http://www.pipperr.de CREATE OR REPLACE PROCEDURE set_read_role AUTHID DEFINER is cursor c_tables is select table_name from user_tables; v_schema varchar2(32):=sys_context( 'userenv', 'current_schema' ); begin for rec in c_tables loop execute immediate 'grant select on ‚ ||rec.table_name ||' to ROLE_READ_'||substr(v_schema,1,20); end loop; end; / AUTID Definer Package Beispiel Ein weiters Beispiel : Als normaler User DBA Rechte zum Killen von Sessions verwenden: https://www.pipperr.de/dokuwiki/doku.php?id=dba:kill_session_without_dba_rights Idee : Rechte in der DB vergeben ohne DBA oder irgendwelche ANY Rechte
  • 35. Seite 35Gunther Pippèrr © 2018 http://www.pipperr.de Secure Application Role - Rolle per PL/SQL aktiveren Rolle PL/SQL Routine Prüfe auf Regelwerk EXECUTE IMMEDIATE 'SET ROLE myapprole'; Zuweisen Rolle ist aber nicht aktiv! User kann die Rechte nun verwenden! OK 1 Rolle anlegen 2 3 Logik erstellen 4 Recht auf die Routine and App User vergeben 5 Als App User Routine zum “einschalten” der Rolle aufrufen 6 https://www.pipperr.de/dokuwiki/doku.php?id=dba:secure_application_role
  • 36. Seite 36Gunther Pippèrr © 2018 http://www.pipperr.de Secure Application Role (1) - Code – Definieren mit – Für die Aktivierung einer Rolle, kann mit einem selbstgeschriebenen PL/SQL Package die Regelkonformität überwacht werden create role myAPPRole identified using checkMyAppRules; CREATE OR REPLACE PROCEDURE secadmin.checkMyAppRules AUTHID CURRENT_USER AS BEGIN IF (SYS_CONTEXT ('userenv','ip_address') BETWEEN '192.0.2.10' and '192.0.2.20' AND TO_CHAR (SYSDATE, 'HH24') BETWEEN 8 AND 17) THEN EXECUTE IMMEDIATE 'SET ROLE myAPPRole '; END IF; END; / Grant execute on secadmin.checkMyAppRules to scott; Hier kann jede Logik stehen
  • 37. Seite 37Gunther Pippèrr © 2018 http://www.pipperr.de Secure Application Role (2) - ORA-28201 Fehler ▪ User versucht die Rolle einfach so zu aktivieren BEGIN dbms_session.set_role('myAPPRole'); END; ERROR at line 1: ORA-28201: invalid command to enable secure application role myAPPRole' ORA-06512: at "SYS.DBMS_SESSION", line 194 ORA-06512: at line 1 set role myAPPRole * ERROR at line 1: ORA-28201: invalid command to enable secure application role myAPPRole' Prüfen welche Rollen in der Session aktiv sind => select * from session_roles;
  • 38. Seite 38Gunther Pippèrr © 2018 http://www.pipperr.de Rolle läßt sich nur über den Aufruf des PL/SQL aktivieren! ▪ Rolle aufrufen ▪ Test mit: exec secadmin.checkMyAppRules; select * from session_roles; … myAPPRole Login Trigger verwenden um die Rolle zu aktivieren Der User muss die entsprechenden Execute Rechte auf die PL/SQL Procedure besitzen! Daran denken das ein SET Role alle anderen Rollen deaktiviert! Falls die Default Rollen des Users weiterhin gültig sein sollen, diese mit in den set Befehl als komplette Liste aufnehmen!
  • 39. Seite 39Gunther Pippèrr © 2018 http://www.pipperr.de Rollen in der Datenbank kontrollieren ▪ VIEW DBA_APPLICATION_ROLES
  • 40. Seite 40Gunther Pippèrr © 2018 http://www.pipperr.de Set Role Verhalten beachten! ▪ Ein "Set Role" setzt alle bestehenden Rollenzuordnungen zurück und enabled nur die angebene Liste von Rollen. ▪ Ein "Set Role ALL" enabled alle zugewiesenen Rollen, allerdings nicht die "Secure Application Roles" ! ▪ D.h. wenn die bestehenden Rollen beibehalten werden sollen, muss in das SET Role Kommando die Liste der gerade aktvierten Rollen mit aufgenommen werden!
  • 41. Seite 41Gunther Pippèrr © 2018 http://www.pipperr.de Einführen einer Lese Rolle pro technisches Schema ▪ Für jedes technische Schema wird eine Lese Rolle angelegt – ROLE_<SCHEMA>_READ
  • 42. Seite 42Gunther Pippèrr © 2018 http://www.pipperr.de Profile verwenden um User Klassen zu unterscheiden ▪ Über die Verwendung eines Profils kann auch die Verwendung von Ressourcen eingeschränkt werden – Die Eigenschaften des Passworts können definiert werden ( z.B.: wann es abläuft) – Ein default Profil für alle Benutzer – Ein definiertes Profil pro Benutzer möglich, damit die User zum Unterscheiden „flaggen2 – Profile in der DB abfragen mit: sys:gpi>select * from dba_profiles; PROFILE ROURCE_NAME RESOURCE LIMIT ---------- -------------------------------- -------- ---------- DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED ..... DEFAULT CONNECT_TIME KERNEL UNLIMITED DEFAULT PRIVATE_SGA KERNEL UNLIMITED
  • 43. Seite 43Gunther Pippèrr © 2018 http://www.pipperr.de Oracle Proxy User Feature ▪ Mit seinem eigenen persönlichen User an einem fremden Schema anmelden – Ein persönlicher User hat seinen eigenen Account in der DB – Dem User wird das Recht vergeben sich an einem anderen Schema mit seinem Passwort anzumelden – Einfache [] Syntax Sql>connect P_PIPPERR[APP_OWNER]/passw0rd Your Login String - <YOUR_USER_NAME>[TECHNICAL_USER]/<YOUR_PASSWORD>
  • 44. Seite 44Gunther Pippèrr © 2018 http://www.pipperr.de Proxy Feature ▪ Use Oracle Proxy Personal Schema PERSONAL_USER TECHNICAL_SCHEMA 1 1- Anlegen des persönlichen Users 2- Auf dem TECHNICAL_SCHEMA die Proxy Rechte vergeben 3 - Connect als Proxy 2 3 Create user PERSONAL_USER …. Alter user TECHNICAL_SCHEMA grant connect through PERSONAL_USER; sqlplus PERSONAL_USER [TECHNICAL_SCHEMA]@local_db Kann auch unter Java einfach implementiert werden
  • 45. Seite 45Gunther Pippèrr © 2018 http://www.pipperr.de Den Proxy User in der DB nachweisen ▪ SYS_CONTEXT SYS_CONTEXT => https://docs.oracle.com/database/121/SQLRF/functions199.htm#SQLRF06117 SELECT SYS_CONTEXT ('USERENV', 'CURRENT_USER') CURRENT_USER , SYS_CONTEXT ('USERENV', 'CURRENT_USERID') CURRENT_USERID , SYS_CONTEXT ('USERENV', 'PROXY_USER') PROXY_USER_ID , SYS_CONTEXT ('USERENV', 'PROXY_USERID') PROXY_USER , SYS_CONTEXT ('USERENV', 'AUTHENTICATED_IDENTITY') AUTH_AS FROM DUAL /
  • 46. Seite 46Gunther Pippèrr © 2018 http://www.pipperr.de Den Proxy User überwachen ▪ DB Auditing – Der Proxy User und die eigentliche Session müssen gejoint werden SELECT a.username connecting_user , a.action_name , a.timestamp , a.comment_text , b.username proxy_username , b.action_name proxy_action_name , b.comment_text proxy_comment_text FROM dba_audit_trail a INNER JOIN dba_audit_trail b ON (a.proxy_sessionid=b.sessionid) ORDER BY a.timestamp /
  • 47. Seite 47Gunther Pippèrr © 2018 http://www.pipperr.de Proxy DD Views ▪ Wie können die Proxy Rechte in der DB überwacht werden ▪ Wer kann sich an einem Schema anmelden • DBA_PROXIES - Get all information from proxy users • USER_PROXIES – To which schemas I can connect • PROXY_USERS – Who can use which Proxy connect
  • 48. Seite 48Gunther Pippèrr © 2018 http://www.pipperr.de Testcase – Was passiert in den verschiedenen User Status ▪ Vergleich verschiedener User Status As Proxy User ist der Connect an ein Schema mit abgelaufenen Password möglich
  • 49. Seite 49Gunther Pippèrr © 2018 http://www.pipperr.de Proxy Feature und Rolen ▪ Mit dem Proxy Login kann auch gleich die richtige Rolle gesetzt werden! ▪ Use Role to set the rights of this proxy session! – For Example – TECHNICAL_SCHEMA has only as default role „connect“ – To use a Role like RESOUCE you need a Password – If Proxy User connect he get a role only with the right he need for his work ALTER USER TECHNICAL_SCHEMA GRANT CONNECT THROUGH PERSONAL_USER WITH ROLES hr_user_role;
  • 50. Seite 50Gunther Pippèrr © 2018 http://www.pipperr.de Wartbarkeit über ein PL/SQL Hilfsprogramm erweitern ▪ In jeden Schema liegt eine PL/SQL Routine mit “AutID Definier” ▪ Beim Aufrufen der Procedure wird die Lese Rolle mit den Select Rechten auf Tabellen und Views gefüllt. ▪ Ein Admin Schema hat entsprechende Rechte und kann damit die Rollen mit Zugordnungen versorgen OHNE eigene Rechte in den jeweiligen Schemas
  • 51. Seite 51Gunther Pippèrr © 2018 http://www.pipperr.de Oracle Listener härten ▪ Listener Security auf IP Adressen – Den Oracle Listener auf IP Adressen einschränken – Die sqlnet.ora des Listeners anpassen Alternativ DB Firewall für Arme – CMAN der Connection Manager https://www.pipperr.de/dokuwiki/doku.php?id=dba:sqlnet_cman_connection_manager TCP.VALIDNODE_CHECKING = YES # Ausschließen TCP.EXCLUDED_NODES= (10.10.*) #Einladen TCP.INVITED_NODES=(localhost,10.10.10.*) Invited hat die höhere Priorität
  • 52. Seite 52Gunther Pippèrr © 2018 http://www.pipperr.de Projekt Resümee ▪ Ein sehr langer Weg ….. ▪ Mehr als 2 Jahre, bis alle Passwörter sicher geändert werden konnten ▪ Mehr als 2 Jahre zum Einführen einer Lese Rolle ▪ Nur die einfachsten Basics konnten umgesetzt werden Ursache: Unwissen, Kostenstellen denken, unwillige Hoster , unklare Zuständigkeiten, lange Subunternehmer Ketten
  • 53. Seite 53Gunther Pippèrr © 2018 http://www.pipperr.de Fragen Questions?
  • 54. Seite 54Gunther Pippèrr © 2018 http://www.pipperr.de Quellen ▪ Oracle Dokumentation und Support Portal ▪ https://www.pipperr.de/dokuwiki/doku.php ▪ Wieder mal eine andere Script Library – https://github.com/gpipperr/OraPowerShell ▪ Bildmaterial : https://pixabay.com und https://publicdomainvectors.org