DOAG Datenbank Kolumne: Stolpern über neue Systemprivilegien in Oracle 23ai

  • Erstellt von Cornelia Heyde
  • Datenbank Kolumne, Oracle, Datenbank

Cornelia Heyde erläutert, was bei einem Test der 19c VPD Policy unter Oracle 23ai passieren kann.

Eigentlich wollte ich nur per Skript eine 19c VPD Policy unter Oracle 23ai testen. Als privilegierter Benutzer erwartete ich keine Probleme. Und dann kam überraschend folgender Fehler: ORA-01031: insufficient privileges.

Bei genauer Analyse hatte der Benutzer die notwendigen Privilegien einschließlich das EXECUTE-Privileg für das Package. Aber leider reichte das bei Oracle 23ai nicht mehr. Es wird zusätzlich das neue Systemprivileg ADMINISTER ROW LEVEL SECURITY POLICY benötigt.

Beispiel mit einer VPD Policy:

Der Benutzer HANS hat die notwendigen Privilegen, z.B. das EXECUTE für DBMS_RLS.

SQL@PDB1>     CONNECT HANS/<password>@PDB1

HANS@PDB1> BEGIN

                        DBMS_RLS.ADD_POLICY (object_schema => 'scott',  object_name  => 'dept',. . .)

                        ERROR at line 1: 

                        ORA-01031: insufficient privileges

                        ORA-06512: at "SYS.DBMS_RLS", line 3 

 

Hans erhält nun zusätzlich das Privileg ADMINISTER ROW LEVEL SECURITY POLICY.

 

SQL@PDB1> CONNECT SYS/<password>@PDB1 as sysdba

         GRANT administer row level security policy to HANS;

SQL@PDB1> CONNECT HANS/<password>@PDB1

HANS@PDB1> BEGIN

                          DBMS_RLS.ADD_POLICY (object_schema => scott', object_name => 'dept',. . .)

                          PL/SQL procedure successfully completed.

 

Und schon kann Hans das Package erfolgreich ausführen.

Es gibt ab Oracle 23ai folgende neue Systemprivilegien: 

ADMINISTER ROW LEVEL SECURITY POLICYDBMS_RLS PL/SQL package
ADMINISTER FINE GRAINED AUDIT POLICYDBMS_FGA PL/SQL package
ADMINISTER REDACT POLICYDBMS_REDACT PL/SQL package

 

Die Vergabe des Systemprivilegs erfolgt pro Container (CDB oder PDB). Das Systemprivileg kann entweder direkt an einen NON-SYS Benutzer oder eine Rolle vergeben oder auf ein Schema beschränkt werden. 

     GRANT system_privilege TO NON-SYS Benutzer;

     GRANT system_privilege ON SCHEMA <schema> TO NON-SYS Benutzer;

Dieses Beispiel zeigt, dass in der Datenbank 23ai verschiedene Security-Voraussetzungen hinzugefügt wurden. Bei Tests mit 23ai sollte immer geprüft werden, welche neuen Privilegien für die verschiedenen Aufgaben notwendig sind. Ein Blick in oradiff zeigt auch die neuen System-Privilegien. 

 → siehe Abbildung rechts (zur Vegrößerung bitte anklicken)

Cornelia Heyde

© wpoeschl
oradiff