Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:unified_auditing_oracle_migration_23ai

Oracle Unified Auditing – Pflicht in 23ai - Umstellung von Klassischen/Mixed Audit auf Unified Auditing in der 19c als Vorbereitung für die 23ai Migration

In Arbeit, demächst mehr dazu

Aufgabe Sicherheit und Compliance zukunftsfähig machen – den Umstieg auf Oracle 23ai rechtzeitig vorbereiten.

Mit Oracle 23ai ist Unified Auditing verpflichtend. Eine Migration auf 23ai oder höher ist nur möglich, wenn bereits jetzt unter Oracle 19c auf Unified Auditing umgestellt wird.

Doch viele produktive 19c-Systeme verwenden nach wie vor klassisches oder Mixed Auditing – was zu Problemen bei Upgrade und Compliance führen kann.

Im ersten Schritt werden daher in allen Datenbank erstmal der klassische Audit Log „gepflegt“ und das Audit in einen eigenen Tablespace umgezogen für beide Methoden.

Das kann online bei nicht so kritischen System erfolgen, auch das Verkleinern des SYSAUX Tablespace ist online möglich solange nicht andere Objekte in dem Tablespace das verhindern.

Für die Pflege der Logs werden die notwendigen Jobs angelegt und in die Überwachung integriert.

Dann wird eine Audit Policy für die drei Typen (DEV / QS / Prod) der Datenbank nach dem Firmen Vorschriften erarbeitet, diese ersetzt dann später alle „alten“ Audit Regeln / default Policies.

Wenn das alles vorbereitet ist, wird die erste Datenbank komplett umgestellt, da dazu eine Downtime notwendig ist bietet sich das an mit einem geplanten Patch zu kombinieren.

Alle weiteren System werden dann nach dem gleichen Muster umgestellt.

Ablauf:

  1. Prüfen ob sich die 19c im Mixed Mode befindet und Audit Status ermitteln
  2. Downtime 1
    1. Audit Tabellen (Klassich und Unified ) in eigenen Tablespace umziehen
    2. Bei Bedarf SYSAUX Tablespace verkleinern wenn möglich
    3. Lösch Jobs für die Logs erstellen
  3. Einstellungen des Klassischen Auditing in Unified Audit Policis umwandeln bzw. eigene Poilices definieren
  4. Prüfen ob Lösch Jobs angelegt wurden bzw. aktiveren
  5. Prüfen wer die Audit Daten verwendet und ob „etwas“ die Audits aus der Datenbank ließt
    1. Falls im Einsatz Überwachungstools entsprechend umstellen bzw. Umstellung für die Downtime planen
  6. Downtime 2 - Kann nur offline erfolgen!
    1. Umstellen auf Unified Auditing
    2. Überwachungstools anpassen bei Bedarf
  7. Aufräumen
  8. Lösch Jobs überwachen

Was ist in der 19c aktiviert? Ist Status prüfen

SYS auf 19c

SELECT PARAMETER, VALUE 
  FROM V$OPTION
WHERE PARAMETER='Unified Auditing';
 
 
PARAMETER             VALUE                                                           
--------------------  --------
Unified Auditing      FALSE   
 
 
-- gibt es aber schon Log einträge
 
SELECT COUNT(*)   FROM UNIFIED_AUDIT_TRAIL;
 
 COUNT(*)
----------
      1783

Die Aussage „Unified Auditing=FALSE“ und die Anzahl <> 0 von Datensätzen in der UNIFIED_AUDIT_TRAIL zeigt uns an, das wir die Datenbank 19c im Mixed Mode betreiben, also das klassisches Auditing noch aktiv ist, und gleichzeitig Unified Audition in Teilen aktiviert ist.

Wieviele Log Einträge gibt es schon seit wann in der DB

Plugable DB Umgebung beachten!

Im klassischen Auditing hat die CDB eine AUD$ und jede PDB eine eigene AUD$ Tabelle und auf der jeweiligen Ebene muss im Dateil das Auditing betrachtet werden. Ein Grund mehr auf Unified Audit umzustellen.

select count(*) as cnt,'AUD' as tab,CON_ID  from CONTAINERS("SYS"."AUD$") group by CON_ID
union all
select count(*) as cnt,'UN' as tab,CON_ID   from AUDSYS.AUD$UNIFIED group by CON_ID;
 
 
 
select count(*) as cnt,'AUD' as tab,CON_ID  from CONTAINERS("SYS"."DBA_AUDIT_TRAIL") group by CON_ID
union all
select count(*) as cnt,'UN' as tab,CON_ID   from CDB_UNIFIED_AUDIT_TRAIL group by CON_ID;
 
 
select count(*) as cnt,'AUD' as tab,CON_ID,min(timestamp) as first_log,max(timestamp) as last_log  from CONTAINERS("SYS"."DBA_AUDIT_TRAIL") group by CON_ID
union all
select count(*) as cnt,'UN' as tab,CON_ID,min(EVENT_TIMESTAMP ) as  first_log,max(EVENT_TIMESTAMP )  as  last_log  from CDB_UNIFIED_AUDIT_TRAIL group by CON_ID;

Audit Tabellen (Klassich und Unified ) in eigenen Tablespace umziehen

Wo liegen aktuell die Audit Tabellen

Was ist eingestellt über die View DBA_AUDIT_MGMT_CONFIG_PARAMS:

SELECT PARAMETER_NAME, PARAMETER_VALUE, AUDIT_TRAIL 
   FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
;
 
 
PARAMETER_NAME, PARAMETER_VALUE, AUDIT_TRAIL
 
DB AUDIT TABLESPACE	SYSAUX	STANDARD AUDIT TRAIL
DB AUDIT TABLESPACE	SYSAUX	FGA AUDIT TRAIL
DB AUDIT TABLESPACE	SYSAUX	UNIFIED AUDIT TRAIL

Per Default liegt alles im SYSAUX Tablespace.

Wo sind die Audit Tabellen und wie groß ist das ganze?

SELECT t.OWNER,t.TABLE_NAME,s.TABLESPACE_NAME,s.PARTITION_NAME, t.BLOCKS ,nvl(p.PARTITIONING_TYPE,'NONE') AS PARTITIONING_TYPE 
  FROM dba_tables t
 LEFT JOIN DBA_PART_TABLES p ON ( p.TABLE_NAME = t.TABLE_NAME AND p.owner=t.owner)   
 INNER JOIN DBA_SEGMENTS s ON (s.SEGMENT_NAME=t.TABLE_NAME  AND s.owner=t.owner)   
  WHERE t.table_name LIKE  'AUD$%' AND t.owner IN ('SYS','AUDSYS')
ORDER BY 1,2;
 
OWNER   TABLE_NAME TABLESPACE_NAME PARTITION_NAME BLOCKS PARTITIONING_TYPE 
 
AUDSYS	AUD$UNIFIED	SYSAUX	SYS_P202	1391	RANGE	
 
SYS	AUD$	        SYSAUX                  54444	NONE

Nun können wir erkennen das unsere Audit Tabelle AUD$ für das Klassische Auditing noch im SYSAUX Tablespace (default) liegt und das die neue Audit log Tabelle für das Unified Audit „AUD$UNIFIED“ ebenfalls im SYSAUX liegt, nun allerdings als Partitionierte Tabelle!

Vor dem Aktiveren des Unifed Audits den Tablespace umstellen! Ansonsten verbleiben die bereits existierenden Partition im SYSAUX Tablespace und erst nach einem Intervall (default Monat) wird in den neuen Tablespace geschrieben mit einer neuen Partition (Partition Typ = RANGE )

Audit Daten bereinigen

Können alte Daten gelöscht werden? Am einfachsten alles löschen? Aufdie Plubable Umgebung achten! als SYS per Hand:

SELECT COUNT(*) AS cnt,'AUD' AS tab FROM sys.aud$
UNION
SELECT COUNT(*) AS cnt,'UN' AS tab FROM AUDSYS.AUD$UNIFIED
 
-- alles
-- truncate table aud$;
 
-- delete alles älter als 180 Tage
DELETE aud$ WHERE TIMESTAMP# < (systimestamp - 180) 
commit;

Eleganter über die DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL Methode:

--lösche alles in der 19c
 
BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
     audit_trail_type         => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL
   , use_last_arch_timestamp => FALSE
   , container                => DBMS_AUDIT_MGMT.CONTAINER_ALL
 );
END;
/
 
SELECT COUNT(*) AS cnt,'AUD' AS tab FROM sys.aud$
UNION
SELECT COUNT(*) AS cnt,'UN' AS tab FROM AUDSYS.AUD$UNIFIED
 
0
 
/code>
 
**Problem: ORA-46258: Cleanup NOT initialized FOR the audit trail**
 
Lösung: da wir noch nicht komplett auf Unified Audit umgestellt haben muss erst das init erfolgen:
<code sql>
BEGIN
DBMS_AUDIT_MGMT.INIT_CLEANUP(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, default_cleanup_interval => 24);
END;
/

Umziehen auf den neuen Tablespace

Audit Tablespace anlegen

Passenden Tablespace anlegen wie AUDITLOG mit uniform Size allocation.

CREATE SMALLFILE TABLESPACE "AUDITLOG"  LOGGING DATAFILE '&&AUDITLOG_TAB_LOC' 
	   SIZE 100M AUTOEXTEND ON NEXT 120M MAXSIZE 32000M 
           EXTENT MANAGEMENT LOCAL 
           UNIFORM SIZE 1M;
 
/
Klassisches Audit umziehen
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
       audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
       audit_trail_location_value =>  'AUDITLOG');
END;
/

Prüfen das keine Objekte in der Datenbank ungültig wurden! Bei Bedarf neu übersetzen!

@?/rdbms/admin/utlrp.sql
Unfied Audit umziehen
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
          audit_trail_type            => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED
       ,  audit_trail_location_value  => 'AUDITLOG');
END;
/
Prüfen ob sich SYSAUX wieder verkleiner läßt

Meist hat man keine Glück, da am Ende des Tablespace sich oft noch weitere Objekte befinden und der SYSAUX Tablespace nur bedingt reorganisert werden kann.

Bzgl. dem Wachstum in SYSAUX Tablespace siehe auch Das Oracle AWR Repository - Abfrage und Pflege

Speicher Parameter der Unified Audit Tabelle prüfen

Die Tabelle AUDSYS.AUD$UNIFIED ist in 19c/24ai partitioniert nach Range (Datum des Log Eintrages), das erzeugen von neuen Partitionen kann über die Methode DBMS_AUDIT_MGMT.ALTER_PARTITION_INTERVAL gesteuert werden.

BEGIN
 DBMS_AUDIT_MGMT.ALTER_PARTITION_INTERVAL(
   interval_number       => 14,        --  Each number of   interval_frequency   -- in this example all 14 Days
   interval_frequency    => 'DAY');     -- YEAR, MONTH, and DAY.
 END;

Lösch Jobs einrichten

Siehe auch Die Audit Logs der Datenbank unter Oracle 11g/12c mit DBMS_AUDIT_MGMT "aufräumen"

Das Problem bei Schreiben von Logs ist am Ende immer das man die Daten ja auch wieder löschen muss, sonst läuft alles recht schnell voll.

-- Auditlog init ---------------------------
 
BEGIN
  DBMS_AUDIT_MGMT.INIT_CLEANUP(
      audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
      default_cleanup_interval => 24 /* hours */);
END;
/
 
--  Delete all after 180 Days
 
BEGIN
-- Standard database audit records in the SYS.AUD$ table
  DBMS_AUDIT_MGMT.set_last_archive_timestamp(
       audit_trail_type  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD
     , last_archive_time => SYSTIMESTAMP-180);
 
--  Unified audit trail. In unified auditing, all audit records are written to the unified audit trail and are made --  available through the unified audit trail views, such as UNIFIED_AUDIT_TRAIL.
 DBMS_AUDIT_MGMT.set_last_archive_timestamp(
       audit_trail_type  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED
     , last_archive_time => SYSTIMESTAMP-180);
 
-- Operating system audit trail. This refers to the audit records stored in operating system files.
  DBMS_AUDIT_MGMT.set_last_archive_timestamp(
       audit_trail_type  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS
     , last_archive_time => SYSTIMESTAMP-180);
 
END;
/
 
-- Alternativ Alles mit 
 
 
BEGIN
-- delte all
  DBMS_AUDIT_MGMT.set_last_archive_timestamp(
       audit_trail_type  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL
     , last_archive_time => SYSTIMESTAMP-180);
END;
/
 
-- create the job to move the timeframe each day
BEGIN
 
  DBMS_SCHEDULER.CREATE_JOB (
    job_name   => 'AUDIT_ARCHIVE_BEFORE_TIMESTAMP',
    job_type   => 'PLSQL_BLOCK',
    job_action => 'DBMS_AUDIT_MGMT.set_last_archive_timestamp(
       audit_trail_type  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL
     , last_archive_time => SYSTIMESTAMP-180);
    ',
     start_date      => sysdate,
     repeat_interval => 'FREQ=HOURLY;INTERVAL=24',
     enabled         =>  TRUE,
     comments        => 'Set the point in time before delete all audit log entries'
  );
END;
/
 
 
-- Create Auditlog purge Job ------------------
 
BEGIN
  DBMS_AUDIT_MGMT.create_purge_job(
    audit_trail_type           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
    audit_trail_purge_interval => 24 /* hours */,  
    audit_trail_purge_name     => 'PURGE_ALL_AUDIT_TRAILS',
    use_last_arch_timestamp    => TRUE);
END;
/

Vorteil ist nun das nach dem späteren Umstellen dann auch noch das alte Log nach 180 Tage nach und nach gelöscht wird und für das neue Verfahren alles bereits eingerichtet ist.

Audit Policies definieren

siehe dazu https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/CREATE-AUDIT-POLICY-Unified-Auditing.html und https://www.oracle.com/docs/tech/dbsec/unified-audit-best-practice-guidelines.pdf .

Minimale Regel definieren wie:

  • CREATE USER - ALTER USER - DROP USER
  • CREATE ROLE - ALTER ROLE - DROP ROLE
  • CREATE PROFILE - ALTER PROFILE - DROP PROFILE
  • CREATE SYNONYM - ALTER SYNONYM - DROP SYNONYM
  • CREATE DATABASE - LINK - ALTER DATABASE LINK - DROP DATABASE LINK
  • CREATE PROCEDURE - ALTER PROCEDURE - DROP PROCEDURE
  • CREATE TRIGGER - ALTER TRIGGER - DROP TRIGGER
  • GRANT - REVOKE
  • ALTER SYSTEM
  • AUDSYS.AUD$UNIFIED delete - truncate actions
  • LOGON AND LOGOFF

Defaults prüfen und ausschalten:

SELECT * 
  FROM audit_unified_enabled_policies 
 WHERE policy_name IN (  'GPI_DB_MIN_SEC_AUDIT','GPI_SEC_AUDIT_TRUNC');
 
 
NOAUDIT POLICY ORA_SECURECONFIG;

Policy GPI_DB_MiN_SEC_AUDIT anlegen:

DROP AUDIT POLICY GPI_DB_MiN_SEC_AUDIT;
 
CREATE AUDIT POLICY GPI_DB_MiN_SEC_AUDIT
 ACTIONS
    -- User management
      CREATE USER
    , ALTER USER
    , DROP USER
    -- Role management
    , CREATE ROLE
    , ALTER ROLE
    , DROP ROLE
    -- Profile management
    , CREATE PROFILE
    , ALTER PROFILE
    , DROP PROFILE
    -- Synonym management
    , CREATE SYNONYM
    , ALTER SYNONYM
    , DROP SYNONYM
    -- Database link management
    , CREATE DATABASE LINK
    , ALTER DATABASE LINK
    , DROP DATABASE LINK
    -- Procedure management
    , CREATE PROCEDURE
    , ALTER PROCEDURE
    , DROP PROCEDURE
    -- Trigger management
    , CREATE TRIGGER
    , ALTER TRIGGER
    , DROP TRIGGER
    -- Privilege operations
    , GRANT
    , REVOKE
    -- System operations
    , ALTER SYSTEM
    -- Audit trail modifications
    , DELETE ON AUDSYS.AUD$UNIFIED
    , UPDATE ON AUDSYS.AUD$UNIFIED 
    -- Session Management
    , LOGON
    , LOGOFF
;
 
---
-- ===============
--  Define rule for truncate statement!
--
DROP AUDIT POLICY GPI_SEC_AUDIT_TRUNC;
 
CREATE AUDIT POLICY GPI_SEC_AUDIT_TRUNC
 ACTIONS TRUNCATE TABLE
    WHEN 'SYS_CONTEXT(''USERENV'',''CURRENT_SCHEMA'') = ''AUDSYS''     
     AND SYS_CONTEXT(''USERENV'',''CURRENT_OBJECT'') = ''AUD$UNIFIED'''
EVALUATE PER STATEMENT;
 

Aktiveren:

-- For the entire CDB (all PDBs):
--
AUDIT POLICY GPI_DB_MiN_SEC_AUDIT CONTAINER=ALL;
AUDIT POLICY GPI_SEC_AUDIT_TRUNC  CONTAINER=ALL;
 
 
-- For specific PDBs only:
-- OR for normal DB Settings
AUDIT POLICY GPI_DB_MiN_SEC_AUDIT ;
AUDIT POLICY GPI_SEC_AUDIT_TRUNC  ;

Überprüfen:

SELECT * 
  FROM audit_unified_enabled_policies 
 WHERE policy_name IN (  'GPI_DB_MIN_SEC_AUDIT','GPI_SEC_AUDIT_TRUNC');

Auswerten

SELECT event_timestamp
     , action_name
     , unified_audit_policies
     , dbusername
  FROM unified_audit_trail
 WHERE unified_audit_policies = 'GPI_DB_MIN_SEC_AUDIT'
 ORDER BY event_timestamp DESC;

Automatisch Lösch Routinen anlegen


Umstellen auf Unified Auditing

Ablauf Linux

  • Alle Datenbanken/Listner aus dem Oracle Home stoppen
  • Oracle DB Kernel neu linken
  • Alle Datenbanken/Listner aus dem Oracle Home starten

Linken des Kernels mit:

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle 
 

Windows: (muss noch getestet werden!)

Rem Enable
%ORACLE_HOME%/bin/orauniaud19.dll.dbl file to %ORACLE_HOME%/bin/orauniaud19.dll
 
Rem Disable
%ORACLE_HOME%/bin/orauniaud19.dll file to %ORACLE_HOME%/bin/orauniaud19.dll.dbl

Nach Neustart prüfen:

SELECT PARAMETER, VALUE 
  FROM V$OPTION
WHERE PARAMETER='Unified Auditing';
 
 
PARAMETER             VALUE                                                           
--------------------  --------
Unified Auditing      TRUE

Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
"Autor: Gunther Pipperr"
dba/unified_auditing_oracle_migration_23ai.txt · Zuletzt geändert: 2025/06/03 22:36 von gpipperr