Using Auditing Policies in PDBs

Assim como é feito em bancos non-CDBs, a arquitetura Multitenant nos permite utilizar o recurso de políticas de auditoria também a nível de PDBs. Neste artigo vamos explorar alguns exemplos simples de como implementar isso.

Realizando reconhecimento do ambiente de laboratório:

[oracle@quiasma ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 18.0.0.0.0 - Production on Fri Jun 18 05:21:28 2021
Version 18.13.0.0.0
 
Copyright (c) 1982, 2018, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.13.0.0.0
 
SQL> SELECT NAME,OPEN_MODE,CDB FROM V$DATABASE;
 
NAME      OPEN_MODE            CDB
--------- -------------------- ---
ASWAN     READ WRITE           YES
 
SQL> SHOW PDBS;
 
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 HIPOFISE2                      READ WRITE NO
         4 HIPOFISE1                      READ WRITE NO

No PDB HIPOFISE1, vamos criar uma política de auditoria chamada BSS, que coletará os eventos de criação de tablespace:

[oracle@quiasma ~]$ sqlplus system/oracle@HIPOFISE1
 
SQL*Plus: Release 18.0.0.0.0 - Production on Fri Jun 18 05:29:37 2021
Version 18.13.0.0.0
 
Copyright (c) 1982, 2018, Oracle.  All rights reserved.
 
Last Successful login time: Thu Jun 10 2021 06:06:02 -03:00
 
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.13.0.0.0
 
SQL> CREATE AUDIT POLICY BSS ACTIONS CREATE TABLESPACE;
 
Audit policy created.
 
SQL> AUDIT POLICY BSS;
 
Audit succeeded.
 
SQL> col user_name format A10
SQL> col policy_name format A10
SQL> col entity_name format a10
SQL> SELECT * FROM AUDIT_UNIFIED_ENABLED_POLICIES WHERE POLICY_NAME='BSS';
 
USER_NAME  POLICY_NAM ENABLED ENABLED_OPTION  ENTITY_NAM ENTITY_ SUC FAI
---------- ---------- ------- --------------- ---------- ------- --- ---
ALL USERS  BSS        BY      BY USER         ALL USERS  USER    YES YES

Criando tablespace:

SQL> CREATE TABLESPACE TESTE;
 
Tablespace created.

Validando log da operação:

SQL> col dbusername format a12
SQL> col action_name format a20
SQL> col object_name format a12
SQL> col event_time format a19
SQL> SELECT DBUSERNAME, ACTION_NAME, OBJECT_NAME, to_char(EVENT_TIMESTAMP,'DD-MON-RR HH12:MI AM') EVENT_TIME FROM UNIFIED_AUDIT_TRAIL WHERE ACTION_NAME LIKE '%TABLESPACE%' ORDER BY EVENT_TIMESTAMP;
 
DBUSERNAME   ACTION_NAME          OBJECT_NAME  EVENT_TIME
------------ -------------------- ------------ -------------------
SYSTEM       CREATE TABLESPACE    TESTE        18-JUN-21 05:30 AM

Dropando tablespace e política:

SQL> DROP TABLESPACE TESTE INCLUDING CONTENTS AND DATAFILES;
 
Tablespace dropped.
 
SQL> NOAUDIT POLICY BSS;
 
Noaudit succeeded.
 
SQL> DROP AUDIT POLICY BSS;
 
Audit Policy dropped.

Agora vamos verificar as políticas nativas, que já vem implementadas nos PDBs:

SQL> col policy_name format a20
SQL> col user_name format a15
SQL> SELECT POLICY_NAME, USER_NAME FROM AUDIT_UNIFIED_ENABLED_POLICIES ORDER BY 1;
 
POLICY_NAME          USER_NAME
-------------------- ---------------
ORA_LOGON_FAILURES   ALL USERS
ORA_SECURECONFIG     ALL USERS

Vamos validar as operações que são auditadas da política ORA_SECURECONFIG:

SQL> col audit_option format a40
SQL> SELECT AUDIT_OPTION FROM AUDIT_UNIFIED_POLICIES WHERE POLICY_NAME ='ORA_SECURECONFIG' ORDER BY 1;
 
AUDIT_OPTION
----------------------------------------
ADMINISTER KEY MANAGEMENT
ALTER ANY PROCEDURE
ALTER ANY SQL TRANSLATION PROFILE
ALTER ANY TABLE
ALTER DATABASE
ALTER DATABASE DICTIONARY
ALTER DATABASE LINK
ALTER PLUGGABLE DATABASE
ALTER PROFILE
ALTER ROLE
ALTER SYSTEM
 
AUDIT_OPTION
----------------------------------------
ALTER USER
AUDIT SYSTEM
BECOME USER
CREATE ANY JOB
CREATE ANY LIBRARY
CREATE ANY PROCEDURE
CREATE ANY SQL TRANSLATION PROFILE
CREATE ANY TABLE
CREATE DATABASE LINK
CREATE DIRECTORY
CREATE EXTERNAL JOB
 
AUDIT_OPTION
----------------------------------------
CREATE PLUGGABLE DATABASE
CREATE PROFILE
CREATE PUBLIC SYNONYM
CREATE ROLE
CREATE SQL TRANSLATION PROFILE
CREATE USER
DROP ANY PROCEDURE
DROP ANY SQL TRANSLATION PROFILE
DROP ANY TABLE
DROP DATABASE LINK
DROP DIRECTORY
 
AUDIT_OPTION
----------------------------------------
DROP PLUGGABLE DATABASE
DROP PROFILE
DROP PUBLIC SYNONYM
DROP ROLE
DROP USER
EXECUTE
EXECUTE
EXEMPT ACCESS POLICY
EXEMPT REDACTION POLICY
GRANT ANY OBJECT PRIVILEGE
GRANT ANY PRIVILEGE
 
AUDIT_OPTION
----------------------------------------
GRANT ANY ROLE
LOGMINING
PURGE DBA_RECYCLEBIN
SET ROLE
TRANSLATE ANY SQL
 
49 rows selected.

Criando e deletando um local user dentro do PDB:

SQL> CREATE USER BRAZIL IDENTIFIED BY oracle;
 
User created.
 
SQL> DROP USER BRAZIL CASCADE;
 
User dropped.

Realizando consulta:

SQL> col dbusername format a12
SQL> col action_name format a20
SQL> col object_name format a12
SQL> col event_time format a19
SQL> SELECT DBUSERNAME, ACTION_NAME, OBJECT_NAME, to_char(EVENT_TIMESTAMP,'DD-MON-RR HH12:MI AM') EVENT_TIME FROM UNIFIED_AUDIT_TRAIL WHERE ACTION_NAME = 'CREATE USER' AND OBJECT_NAME='BRAZIL' ORDER BY EVENT_TIMESTAMP;
 
DBUSERNAME   ACTION_NAME          OBJECT_NAME  EVENT_TIME
------------ -------------------- ------------ -------------------
SYSTEM       CREATE USER          BRAZIL       18-JUN-21 05:45 AM

Caso precisemos realizar a consulta a partir do CDB$ROOT, basta usarmos a mesma query, mas usando a view CDB_UNIFIED_AUDIT_TRAIL:

SQL> conn / as sysdba
Connected.
SQL> SHOW CON_NAME;
 
CON_NAME
------------------------------
CDB$ROOT
SQL> col dbusername format a12
SQL> col action_name format a20
SQL> col object_name format a12
SQL> col event_time format a19
SQL> SELECT DBUSERNAME, ACTION_NAME, OBJECT_NAME, to_char(EVENT_TIMESTAMP,'DD-MON-RR HH12:MI AM') EVENT_TIME FROM CDB_UNIFIED_AUDIT_TRAIL WHERE ACTION_NAME = 'CREATE USER' AND OBJECT_NAME='BRAZIL' ORDER BY EVENT_TIMESTAMP;
 
DBUSERNAME   ACTION_NAME          OBJECT_NAME  EVENT_TIME
------------ -------------------- ------------ -------------------
SYSTEM       CREATE USER          BRAZIL       18-JUN-21 05:45 AM

Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laboratório pessoal para fins de aprendizado.

Leave a Comment

Your email address will not be published.