Minimale database privileges hoe controleer ik dat?

Minimale database privileges, hoe controleer ik dat?
Security van applicatie en informatie systemen is al jaren de een belangrijk onderwerp. Dit geldt voor de hele applicatie stack. Inclusief de database. Een van de centrale paradigma’s in dit veiligheidsbeleid is sturen op ‘minimale rechten’. In de database kan je dit vertalen naar enkele richtlijnen, voorbeelden zijn:

  • gebruik geen standaard Oracle rollen
  • gebruik geen ‘* any priviliges’
  • gebruik rollen

Zelfs met deze richtlijnen blijft het mogelijk een systeem te ontwikkelen waarbij rechten worden uitgedeeld die niet worden gebruikt. Het is de uitdaging deze rechten te identificeren en door developement en beheer gericht te verwijderen. De vraag is hoe je dit eenvoudig doet. De Oracle database (Enterprise Edition) biedt hiervoor het package DBMS_PRIVILEGE_CAPTURE. Dit package biedt de interface om analyses te doen over de (on)gebruikte privileges in een bepaalde periode, voor specifieke sessies.

Met de onderstaande flow:

In deze flow herkennen we de volgende stappen:

  1. create_capture.
    Dit is de belangrijkste fase. We definiëren hier op welke privileges welke scope we hanteren: welke rollen, gebruikers of context we gebruiken. Ook is het mogelijk alle gebruikte privileges in de database te checken. Zo is het bijvoorbeeld mogelijk alleen het gebruik vanuit een applicatie te controleren.
  2. Enable_capture.
    Hiermee wordt de in stap 1 gedefinieerde capture aangezet. Vanaf nu worden de (on) gebruikte privileges geteld.
  3. Database Load
    de database draait nu zoals we dat gewend zijn. De normale database load wordt uitgevoerd. Of dit nu enkele minuten, een week of enkele maanden is. Bij een langere periode zal wel gelden dat het geheugen gebruik van de capture kan toenemen. Voordeel van een langere periode is dat ook incidenteel gebruikt functionaliteit geraakt zal worden.
  4. Disable_capture
    De informatieverzameling is nu compleet. Nieuwe database acties worden niet meer gevolgd.
  5. generate_result
    Dit zorgt er voor dat de verzamelde informatie beschikbaar wordt gemaakt via diverse data dictionary views.
  6. dba_used_privs & dba_usused_privs
    Met deze en bijbehorende views kan nu een analyse gestart worden over de privileges die gebruikt zijn en via welk pad de grannt heeft plaatsgevonden. Met deze resultaten kan er gekeken worden of alle privileges nodig zijn. En mogelijk of deze vervangen kunnen worden door een privilege met een minder grote reikwijdte.
  7. drop_capture

Met het laatste commando wordt de analyse weer vrijgegeven. De resultaten zijn hierna verdwenen. Hiermee is het bijvoorbeeld mogelijk een identieke capture opnieuw uit te voeren.

In code ziet dit er bijvoorbeeld als volgt uit:


1.	exec DBMS_PRIVILEGE_CAPTURE.create_capture(name => 'test_capture'
                    ,type => DBMS_PRIVILEGE_CAPTURE.g_role_and_context
                    ,roles => role_name_list('DBA','CONNECT',‘MY_APP_ROLE’)
                    ,condition   => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') 
        IN (''DEMO'',''APP_USER'')');

2.	exec DBMS_PRIVILEGE_CAPTURE.enable_capture('test_capture');

3.	database activiteit

4.	exec DBMS_PRIVILEGE_CAPTURE.disable_capture('test_capture');

5.	exec DBMS_PRIVILEGE_CAPTURE.generate_result('test_capture');

6.	analyse

7.	exec DBMS_PRIVILEGE_CAPTURE.drop_capture('test_capture');

Deze feature is in Oracle 12 geïntroduceerd als onderdeel van een apart licenseerbare optie. Ondertussen is het een standaard onderdeel van Oracle Enterprise Editie, zoals zichtbaar is in table 1-10 in de licensing manual. Hiermee is dit een bruikbare feature geworden om in een bestaande database informatie te verzamelen over overvloedig uitgedeelde rechten.  Met de analyse is het mogelijk een feitelijke discussie met developer of applicatie leverancier te hebben over de ontstane situatie.

Heb je wat gehad aan dit artikel, Minimale database privileges, hoe controleer ik dat? Mocht je hulp nodig hebben of je hebt vragen n.a.v. dit artikel, laat het ons dan weten.

Oracle Security en patching

Scroll to Top