Privilege Analysis in der Oracle-Datenbank Du bekommst nur das, was du wirklich brauchst!
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Datenbank Privilege Analysis in der Oracle-Datenbank Du bekommst nur das, was du wirklich brauchst! Markus Flechtner, Trivadis Germany 34 www.aoug.at • www.doag.org • www.soug.ch
Welche Rechte braucht ein Datenbank-Benutzer wirklich? Eine einfache Frage, der allerdings in der Ver- gangenheit meist nur wenig Beachtung geschenkt wurde. Funktionalität hatte Priorität, Sicherheit war zweitrangig. Aber die Sicherheit von Datenbanken und Datenbank-Anwendungen wird immer wichtiger und auch sonst kommt diese Frage wieder auf die Tagesordnung. Bei der Beantwortung hilft das Oracle- Feature „Privilege Analysis“. Jede Anwendung, jeder Benutzer soll nur ren können – für die Tests auf die Express Die Prozeduren des Packages DBMS_ die Rechte bekommen, die für die Erfül- Edition der Datenbank (Oracle 18c XE) PRIVILEGE_CAPTURE beschreiben grob lung der jeweiligen Aufgabe notwendig ausweichen, denn auch dort ist Privilege den Ablauf einer Analyse (siehe Tabelle 1). sind. Dieses Prinzip, „Least-Privilege-Prin- Analysis dabei. Die Data-Dictionary-Tabellen und zip“ genannt, im Original „Every program -Views finden sie in Tabelle 2 und die Er- and every privileged user of the system gebnis-Views in Tabelle 3. should operate using the least amount of Was stellt Oracle zur Die Views mit dem „PATH“ im Namen privilege necessary to complete the job.“, Verfügung? geben dabei auch den Grant-Pfad an, das wurde erstmals von Jerome Saltzer in den heißt, es wird ersichtlich, über welche ge- 1970ern formuliert [1]. Leider wird die- Für die Analyse der benötigten Rechte stellt gebenenfalls verschachtelten Rollen ein ses Prinzip im Alltag nicht immer beach- Oracle ein Framework bereit, das aus ei- Benutzer ein Recht bekommen hat. tet. Installationsskripte von Software-Her- nem Package (DBMS_PRIVILEGE_CAPTURE) Im Rahmen einer derartigen Analyse stellern beginnen mit dem Befehl „GRANT und einer Menge von Data Dictionary Views wird zwar nicht protokolliert, wann ge- DBA TO ..“ oder die internen Entwick- (DBA_USED%-Views und. DBA_UNUSED_%- nau eine gewisse Aktion erfolgt ist bezie- ler fordern erst mal ein ganzes Paket an Views) besteht. Damit man dieses Frame- hungsweise wann ein bestimmtes Recht Rechten. Die Analyse, welche davon wirk- work nutzen kann, muss dem entspre- erforderlich war, aber insbesondere bei lich benötigt werden, entfällt oder wird chenden Datenbank-Benutzer die Rolle personalisierten Accounts können aus vergessen. Kurz gesagt: Dieser Aspekt der CAPTURE_ADMIN zugewiesen werden. den Analysen Rückschlüsse auf das Be- Datenbank-Sicherheit ist in der Vergan- genheit oft zu kurz gekommen. „Privilege Analysis“ hilft nun, diese Ver- Prozedur Verwendungszweck säumnisse der Vergangenheit zu korri- gieren und dem „Least-Privilege-Prinzip“ CREATE_CAPTURE Definieren einer Policy näher zu kommen, denn es hilft, die fol- ENABLE_CAPTURE Aktivieren der Datensammlung genden Fragen zu beantworten: DISABLE_CAPTURE Beenden der Datensammlung • Welche Rechte hat ein Benutzer (bzw. GENERATE_RESULT Übertragen der gesammelten Daten in das Data Dictionary eine Applikation) bei der Verwendung einer Anwendung mindestens einmal Löschen einer Policy inkl. der gesammelten DROP_CAPTURE Daten benötigt und wie hat er dieses Recht bekommen? Löschen eines einzelnen Durchlaufes inkl. der DELETE_RUN gesammelten Daten • Welche Rechte hat ein Benutzer bekom- men, die aber nicht benötigt werden? CAPTURE_DEPENDENCY_PRIVS Sammelt Rechte, die bei der Kompilierung von PL/SQL-Objekten (definer’s and invoker’s rights) erforderlich sind. Privilege Analysis hat Oracle mit der Da- tenbank-Version 12c Release 1 (12.1) ein- Tabelle 1: Prozeduren des Packages DBMS_PRIVILEGE_CAPTURE geführt. Leider gab es damals einen li- zenztechnischen Haken: Das Feature war mit Database Vault verknüpft, einer Opti- Tabelle/View Inhalt on, die nur die wenigsten Kunden lizen- ziert haben. Erst im November 2018 hat DBA_PRIV_CAPTURES Zeigt die vorhandenen Policies und die Testläufe Oracle die Lizenzierungsbedingungen ge- PRIV_CAPTURE$ (Grundlage für DBA_PRIV_CAPTURES) ändert und Privilege Analysis für alle Kun- CAPTURED_PRIV$ Genutzte Rechte, Grundlage für die Ergebnis-Views den der Enterprise Edition verfügbar ge- macht. Nutzer der Datenbank Standard CAPTURE_RUN_LOG$ Informationen über die durchgeführten Testläufe, inkl. Start- und Ende-Zeitpunkt Edition 2 können – wenn sie ihre Daten- menge auf 12 GB oder weniger reduzie- Tabelle 2: Data-Dictionary-Tabellen und -Views Red Stack Magazin 04/2021 35
Datenbank nutzerverhalten gezogen werden. Daher Views für vergebene, aber nicht kann es ratsam sein, vorher den Betriebs- Views für genutzte Rechte genutzte Rechte rat zu kontaktieren. Stichwort: Überwa- Überblick (alle Rechte) chung der Mitarbeiter. DBA_USED_PRIVS DBA_UNUSED_PRIVS Public-Rechte Der Arbeitsablauf DBA_USED_PUBPRIVS DBA_UNUSED_PUBPRIVS System-Rechte Zuerst muss mittels CREATE_CAPTURE eine Policy definiert, also festgelegt wer- DBA_USED_SYSPRIVS DBA_UNUSED_SYSPRIVS den, was protokolliert werden soll (siehe DBA_USED_SYSPRIVS_PATH DBA_UNUSED_SYSPRIVS_PATH Listing 1 und 2). Dafür gibt es vier Möglich- Objekt-Rechte keiten: DBA_USED_OBJPRIVS DBA_UNUSED_OBJPRIVS 1. Protokollierung aller Aktivitäten in der DBA_USED_OBJPRIVS_PATH DBA_UNUSED_OBJPRIVS_PATH Datenbank (Type G_DATABASE) User-Rechte 2. Protokollierung aller Aktivitäten, für DBA_USED_USERPRIVS DBA_UNUSED_USERPRIVS die eine bestimmte Rolle benötigt wird DBA_USED_USERPRIVS_PATH DBA_UNUSED_USERPRIVS_PATH (G_ROLE) 3. Protokollierung auf Basis eines Kon- Tabelle 3: Ergebnis-Views textes (SYS_CONTEXT) (G_CONTEXT) 4. Kombination von Rolle und Kontext (G_ROLE_CONTEXT) Procedure DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE Argument Name Type In/Out Default? Für die Einschränkungen des Kontextes --------------- ----------------- ------ -------- können alle Möglichkeiten der Funktion NAME VARCHAR2 IN SYS_CONTEXT genutzt werden, wie zum DESCRIPTION VARCHAR2 IN DEFAULT Beispiel: TYPE NUMBER IN DEFAULT ROLES ROLE_NAME_LIST IN DEFAULT • SESSION_USER (angemeldeter Daten- CONDITION VARCHAR2 IN DEFAULT bank-Benutzer, siehe Beispiel) • HOST (Rechner, von dem aus der Be- Listing 1: Definition der Prozedur CREATE_CAPTURE fehl aufgerufen wurde) • OS_USER (Betriebssystembenutzer, der den Befehl aufgerufen hat) • MODULE und ACTION (via DBMS_AP- REM policy to capture all database activities execute DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE( PLICATION_INFO) name => 'POLICY_ALL_DB_ACTIVITIES', description =>'captures all database privileges', Eigene Kontexte können über DBMS_SES- type => DBMS_PRIVILEGE_CAPTURE.G_DATABASE SION.SET_CONTEXT definiert werden. ); Bevor die Tests gestartet werden, muss die jeweilige Policy aktiviert werden REM which DBA privileges are used by a specific user execute DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE( (siehe Listing 3). Es gilt, dass pro Policy im- name => 'POLICY_CAPTURE_SCOTT_DBA', mer nur ein „Run“ aktiv sein darf und dass description =>'captures all required privileges granted to public', immer nur eine auf Rolle oder Kontext ba- type => DBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT, sierende Rolle aktiv sein darf. Allerdings roles => 'DBA', darf eine datenbankweite Sammlung zu- condition=> q'[sys_context('USERENV','SESSION_USER') = 'SCOTT']' ); sätzlich gleichzeitig genutzt werden. Der Parameter „run_name“ ist optio- nal, aber empfehlenswert, insbesondere Listing 2: Beispiele für die Definition von Policies wenn für eine Policy mehrere Testläufe durchgeführt werden sollen. Sobald eine Policy aktiviert ist, können die Tests beziehungsweise Benutzerakti- Execute DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE( name => 'POLICY_CAPTURE_SCOTT', vitäten beginnen. Dabei ist wichtig, um- run_name => 'TEST_RUN_20191110'); fassend zu testen, damit nicht irgendeine Funktion vergessen wird, die besondere Rechte benötigt. Bei einer späteren Redu- Listing 3: Aktivieren einer Policy 36 www.aoug.at • www.doag.org • www.soug.ch
zierung der Rechte auf Basis der „Privile- Analysis auf die Datenbank-Performance Wichtig: Zu diesem Zeitpunkt sind die ge Analysis“ würde diese Funktion sonst sehr gering, sodass eine derartige Ana- Ergebnisse der Datensammlung noch nicht nicht mehr fehlerfrei laufen. Wenn Sie ein lyse auch in einem Produktionssystem persistent, sondern nur im Hauptspeicher komplettes Set von automatisierten Tests durchgeführt werden kann. der Datenbank-Instanz vorhanden. für Ihre Applikation haben, dann spielen Wenn die Tests abgeschlossen sind, Das heißt insbesondere, dass beim Ab- Sie alle Tests einmal durch. Nach meinen dann kann die Policy, wie in Listing 4 dar- sturz der Instanz sämtliche gesammelten Erfahrungen ist der Einfluss von Privilege gestellt, deaktiviert werden. Daten verloren gehen. Erst mit dem Befehl DBMS_PRIVILEGE_ CAPTURE.GENERATE_RESULT werden die Execute DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE( Daten in die Datenbank geschrieben und name => 'POLICY_CAPTURE_SCOTT'); können dann ausgewertet werden (siehe Listing 5). Listing 4: Deaktivieren einer Policy Auswertung der Ergebnisse Execute DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT ( name => 'POLICY_CAPTURE_SCOTT', Oracle stellt leider über die DBA_USED_%- run_name => 'TEST_RUN_20191110'); und DBA_UNUSED_%-Views hinaus keine Hilfsmittel bereit, mit denen die Ergebnis- Listing 5: Schreiben der gesammelten Daten in die Datenbank se ausgewertet und die Korrekturen im- plementiert werden können. Hier ist man auf eigene Abfragen angewiesen (siehe SQL> select USED_ROLE,SYS_PRIV,PATH Listing 6). 2 from DBA_USED_SYSPRIVS_PATH Im Beispiel (siehe Listing 6) sieht man, 3 where CAPTURE='POLICY_CAPTURE_SCOTT' dass der User SCOTT die Rechte „SELECT 4 and RUN_NAME= 'TEST_RUN_20191110'; ANY TABLE“ und „ANALYZE ANY“ über die USED_ROLE SYS_PRIV PATH ------------ ----------------- ------------------------------- Rolle „SECRET“ bekommen hat. SECRET SELECT ANY TABLE GRANT_PATH('SCOTT', 'SECRET') Auf Basis der gesammelten Daten kön- SECRET ANALYZE ANY GRANT_PATH('SCOTT', 'SECRET') nen dann GRANT-Befehle generiert werden, CONNECT CREATE SESSION GRANT_PATH('SCOTT', 'CONNECT') mit denen einem Benutzer die benötigten Rechte zugewiesen werden (siehe Listing 7). Listing 6: Beispielabfrage auf DBA_USED_SYSPRIVS_PATH Listing 8 wandelt Objekt-Zugriffe, für die im Test „ANY“-Rechte genutzt wurden, in objektspezifische GRANT-Befehle um SQL> SELECT 'grant '||sys_priv||' to SCOTT_ROLE;' GRANT_PRIV und macht so die kritischen „ANY-Rechte“ 2 FROM DBA_USED_PRIVS where SYS_PRIV not like '%ANY%' überflüssig. 3 and CAPTURE='POLICY_CAPTURE_SCOTT' Hat der Nutzer eigene Views oder PL/ 4 and RUN_NAME= 'TEST_RUN_20191110'; SQL-Objekte, die auf fremde Objekte ver- weisen, so sind direkte Grants erforder- Listing 7: Generieren der gemäß Analyse erforderlichen System-Rechte lich. In diesem Fall sollten die Abfragen gegebenenfalls mit DBA_DEPENDENCIES verknüpft werden, um solche Abhängig- SQL> SELECT DISTINCT 'grant '|| keiten zu ermitteln. 2 CASE SYS_PRIV 3 WHEN 'SELECT ANY TABLE' THEN 'SELECT' 4 WHEN 'EXECUTE ANY PROCEDURE'THEN 'EXECUTE' Privilege Analysis im Oracle 5 WHEN 'INSERT ANY TABLE' THEN 'INSERT' 6 WHEN 'UPDATE ANY TABLE' THEN 'UPDATE' Enterprise Manager Cloud 7 WHEN 'DELETE ANY TABLE' THEN 'DELETE' Control 8 WHEN 'ANALYZE ANY' THEN 'ANALYZE' 9 WHEN 'SELECT ANY SEQUENCE' THEN 'SELECT' Auch mit dem Enterprise Manager kann 10 ELSE man Policies definieren, aktivieren und 11 OBJ_PRIV sich die Ergebnisse anzeigen lassen (siehe 12 END 13 ||' on '||OBJECT_OWNER||'.'|| OBJECT_NAME|| Abbildung 2). Die in Abbildung 1 aufgeführ- 14 ' to SCOTT_ROLE;' GRANT_PRIV te Policy ORA$DEPENDENCY dient dazu, 15 FROM DBA_USED_PRIVS where capture='POLICY_CAPTURE_SCOTT' zusätzlich benötigte Rechte für den Zu- 16 AND object_name is not null; griff auf Funktionen, Prozeduren etc. zu protokollieren, und sollte bei einer Aus- Listing 8: Generieren der erforderlichen Objekt-Rechte (basierend auf [2]) wertung nicht vergessen werden. Red Stack Magazin 04/2021 37
Datenbank Abbildung 1: Anzeige der vorhandenen Policies im OEM (Quelle: Markus Flechtner) Abbildung 2: Anzeige der Ergebnisse im OEM (Quelle: Markus Flechtner) Fazit Quellen und weitere https://docs.oracle.com/en/database/ oracle/oracle-database/19/dbseg/performing- Informationen privilege-analysis-find-privilege-use. Privilege Analysis ist ein sehr hilfreiches [1] Jerry H. Saltzer, Mike D. Schroeder (Sep- html#GUID-44CB644B-7B59-4B3B-B375- Werkzeug, um das Least-Privilege-Prin- tember 1975). “The protection of infor- 9F9B96F60186 zip für Datenbank-Applikationen zu errei- mation in computer systems”. http://web.mit.edu/Saltzer/www/ chen. Durch die Änderung der Lizenzie- publications/protection/ rung im November 2018 hat Oracle die Proceedings of the IEEE. 63 Über den Autor Nutzung dieses Werkzeugs erfreulicher- [2] Norman Sibbing: Least Privileges mit Privilege Analysis: weise einem größeren Anwenderkreis er- https://apex.oracle.com/pls/apex/germancom- Markus Flechtner begann seine Tätigkeit möglicht. munities/dbacommunity/tipp/7141/index.html im Oracle-Umfeld in den 1990ern als Soft- Privilege Analysis sollte schon in Tests [3] Dokumentation zu DBMS_PRIVILEGE_ ware-Entwickler in den Bereichen PL/SQL, CAPTURE: eingesetzt werden, um etwaige Sicher- https://docs.oracle.com/en/database/oracle/ Oracle-Forms und Oracle-Reports. Spä- heitslücken frühzeitig zu erkennen. We- oracle-database/19/arpls/DBMS_PRIVILEGE_ ter wechselte der Diplom-Mathematiker sentlich ist aber, dass diese Tests alle CAPTURE.html#GUID-6522AC3E-A457- in den Oracle Support und spezialisierte 4C7B-8996-B065957F73E4 Funktionen der Anwendung beinhalten, sich auf die Tätigkeit als Datenbankadmi- [4] Database Security Guide, Chapter 5 um wirklich alle benötigten Rechte zu er- “Performing Privilege Analysis to Find nistrator. Seit 2008 ist er als Consultant bei mitteln. Privilege Use”: Trivadis. Seine Schwerpunkte sind Oracle- 38 www.aoug.at • www.doag.org • www.soug.ch
Hochverfügbarkeit sowie Upgrade- bezie- Bei der Deutschen Oracle-Anwender hungsweise Migrationsprojekte. gruppe (DOAG) ist er seit 2015 Delegier- Als Hauptreferent ist er bei Triva- ter der jährlichen Delegiertenversamm- dis verantwortlich für die Kurse „Oracle lung und seit 2019 verantwortlich für den Database New Features für DBAs“, Themenbereich „Open-Source-Daten- „Oracle Multitenant“ und „PostgreSQL banken“. Er ist Mitautor des Buches „Der für Oracle-DBAs“; weiterhin ist er Refe- Oracle DBA: Handbuch für die Administ- rent für den Kurs „Oracle Real Applica- ration der Oracle Database 12c“ und wur- tion Clusters“. de 2020 zum Oracle ACE ernannt. Markus Flechtner Markus.flechtner@trivadis.com 16. - 18. November ONLINE LY B EAR ZUM IRD BIS EPT. 30. S 2021.doag.org iJUG Eventpartner: Verbund Red Stack Magazin 04/2021 39
Sie können auch lesen