Wie in einem anderen Post beschrieben, kann in der Oracle Database 23ai/26ai die SQL Firewall verwendet werden. Neben der Konfiguration mittels PL/SQL-Package, kann es auch in der OCI mittels Datasafe verwendet werden.
Dieser Step-by-Step Guide soll die Vorbereitung und Einrichtung der SQL-Firewall in OCI Datasafe zeigen.
1. Hinzufügen der Target im Datasafe
Um eine Datenbank oder PDB in Datasafe für beispielsweise die SQL Firewall nutzen zu können, muss die Datenbank/PDB in Datasafe als Target hinzugefügt werden.
Dazu im Bereich „Oracle AI Database“ auf „Data Safe – Database Security“ –> „Overview“:

Dann auf „Target databases“ –> „Register database via wizard“

Anschließend in dem entsprechenden Bereich „Start wizard“. Im Beispiel ist es ein Base Database Service, daher start ich den Wizart im Bereich „Oracle cloud databases“:

Im sich öffnenden Fenster können dann das Compartment, das DB System und die PDB ausgewählt werden:


Dann muss für Datasafe ein Benutzer in der PDB angelegt werden. Um die richtigen Berechtigungen zu vergeben, muss das Script datasafe_privileges.sql heruntergeladen und ausgeführt werden:

Anlege und Berechtigen des Benutzers DATASAFE_ADMIN in der PDB:
SQL> alter session set container=PDB_SQLFW;
Session altered.
SQL> CREATE USER DATASAFE_ADMIN identified by "SQLFW_demo#2026"
DEFAULT TABLESPACE "USERS"
TEMPORARY TABLESPACE "TEMP";
2 3
User created.
SQL> GRANT CONNECT, RESOURCE TO DATASAFE_ADMIN;
Grant succeeded.
SQL> @datasafe_privileges.sql DATASAFE_ADMIN GRANT ALL
Enter value for USERNAME (case sensitive matching the username from dba_users)
Setting USERNAME to DATASAFE_ADMIN
Enter value for TYPE (grant/revoke)
Setting TYPE to GRANT
Enter value for MODE (audit_collection/audit_setting/data_discovery/masking/assessment/sql_firewall/all)
Setting MODE to ALL
Granting AUDIT_COLLECTION privileges to "DATASAFE_ADMIN" ...
"ORA_DSCS_AUDIT_COLLECTION"
Created role "ORA_DSCS_AUDIT_COLLECTION"
Granting AUDIT_SETTING privileges to "DATASAFE_ADMIN" ...
"ORA_DSCS_AUDIT_SETTING"
Created role "ORA_DSCS_AUDIT_SETTING"
Granting SQL_FIREWALL privileges to "DATASAFE_ADMIN" ...
"ORA_DSCS_SQL_FIREWALL"
Created role "ORA_DSCS_SQL_FIREWALL"
Granting DATA_DISCOVERY role to "DATASAFE_ADMIN" ...
"ORA_DSCS_DATA_DISCOVERY"
Created role "ORA_DSCS_DATA_DISCOVERY"
Granting MASKING role to "DATASAFE_ADMIN" ...
"ORA_DSCS_MASKING"
Created role "ORA_DSCS_MASKING"
Granting ASSESSMENT role to "DATASAFE_ADMIN" ...
"ORA_DSCS_ASSESSMENT"
Created role "ORA_DSCS_ASSESSMENT"
Disconnected from Oracle AI Database 26ai EE High Perf Release 23.26.2.0.0 - Production
Version 23.26.2.0.0
Alternativ könnte auch nur SQL_FIREWALL statt ALL angegeben werden, wenn keine andere Funktionen in Datasafe genutzt werden sollen:
SQL> @datasafe_privileges.sql DATASAFE_ADMIN GRANT SQL_FIREWALL
Enter value for USERNAME (case sensitive matching the username from dba_users)
Setting USERNAME to DATASAFE_ADMIN
Enter value for TYPE (grant/revoke)
Setting TYPE to GRANT
Enter value for MODE (audit_collection/audit_setting/data_discovery/masking/assessment/sql_firewall/all)
Setting MODE to SQL_FIREWALL
Granting SQL_FIREWALL privileges to "DATASAFE_ADMIN" ...
"ORA_DSCS_SQL_FIREWALL"
Dann muss im Registration Wizard noch ein Private Endpoint im Subnet angelegt oder ausgewählt werden. In meinem Fall habe ich bereits einen und wähle ihn aus. Der Wizard kann auch einen anlegen, wenn keiner vorhanden ist.

Im letzten Abschnitt werden noch die Security Lists ausgewählt, in welchen die entsprechenden Ingress und Egress Rules eingetragen werden sollen:


Dann kann die PDB als Target registiert werden. Anschließend ist das Target wie folgt im Datasafe:

Zu sehen sind unter anderem auch, welche Berechtigungen der DATASAFE_ADMIN User bekommen hat.
2. SQL-Firewall aktivieren
Im Bereich Datasafe –> SQL Firewall kann die SQL Firewall für die Targets aktiviert werden. Dazu muss im Bereich „Target summary“ die Target Database ausgewählt werden:

Dann kann oben rechts die SQL Firewall aktiviert werden:

3. SQL Collection erstellen und starten
Um eine Colletion für SQLs und Context zu starten, kann im Bereich „SQL collections“ die Collection erzeugt und gestartet werden:

Es öffnet sich folgendes Fenster für die Konfiguration der Collection, wo der Benutzer ausgewählt werden kann und ob es eine Top-level Collection ist, oder nicht:

Anschließend kann für den Benutzer APP der SQL Workload ausgeführt werden, der später erlaubt sein soll.
In den SQL Insights sind die Inhalte der Collection zu sehen:

4. Firewall Policy erstellen
Sobald der Testzeitraum abgeschlossen ist, oder die Unique SQL Statements wieder gegen 0 sind, kann die Collection über „Actions“ –> „Stop“ wieder gestoppt werden.
Anschließend kann aus der Collection eine Firewall Policy erstellt werden: „Actions“ –> „Genereate firewall policy“:

In dieser Collection sind dann die erfassten SQL und Konext Informationen zu sehen:


Über den Button „Deploy and enforce“ kann dann die Policy aktiviert werden. Dazu können ein paar Parameter nach Wunsch und Anforderung eingestellt werden:

In diesem Fall werden SQL Statements und Session Kontext überprüft und auch geblockt, wo etwas nicht erlaubt ist.
5. Monitor Violations
Unter „Violation reports“ können dann SQL- und Kontext-Violations überwacht werden:

Hier sind beispielsweise 3 SQLs zu sehen, die geblockt wurden.
Die Policy kann auch modifiziert werden. Entweder können aus Violations SQLs der Policy hinzugefügt werden, oder auch session Kontext verändert werden:


Neben der SQL Firewall gibt es noch mehrere andere Security Features im Datasafe, und auch onPremises Datenbanken können eingebunden werden.