Oracle Audit: differenze tra le versioni

Da Emigar.
Jump to navigation Jump to search
 
(28 versioni intermedie di uno stesso utente non sono mostrate)
Riga 3: Riga 3:
Da manualistica: "Oracle recommends that you include the BY ACCESS clause for all AUDIT statements, which results in a more detailed audit record."
Da manualistica: "Oracle recommends that you include the BY ACCESS clause for all AUDIT statements, which results in a more detailed audit record."


Generalmente, tutto ciò che per essere fatto necessita di un privilegio, può essere tracciato.
Impostazioni minime (12.2):
è conveniente redirigere tutti gli eventi di audit nel syslog:
AUDIT SESSION BY ACCESS;
AUDIT DBA BY ACCESS;
AUDIT ALL STATEMENTS BY <username> BY ACCESS;


ALTER SYSTEM SET AUDIT_TRAIL='OS' SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_SYS_OPERATIONS=TRUE SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_SYSLOG_LEVEL='SYSLOG.INFO' SCOPE=SPFILE;

==Vedere cosa viene tracciato==
Per verificare quali eventi sono tracciati:
Per verificare quali eventi sono tracciati:


Riga 13: Riga 16:
col user_name for a20
col user_name for a20
col proxy_name for a20
col proxy_name for a20
SELECT * from DBA_STMT_AUDIT_OPTS;
SELECT * FROM ALL_DEF_AUDIT_OPTS;
SELECT * FROM DBA_PRIV_AUDIT_OPTS;
SELECT * FROM DBA_STMT_AUDIT_OPTS ORDER BY AUDIT_OPTION;
SELECT * FROM DBA_PRIV_AUDIT_OPTS ORDER BY PRIVILEGE;


Privilegi sugli oggetti soggetti a tracciatura:
col owner for a20
col owner for a20
col object_name for a20
col object_name for a20
SELECT * FROM DBA_OBJ_AUDIT_OPTS;
SELECT * FROM DBA_OBJ_AUDIT_OPTS ORDER BY OWNER,OBJECT_NAME;


==Configurare regole di tracciamento==
Impostazioni minime (12.2)
Tracciare chi si connette:
AUDIT SESSION BY ACCESS;
Tracciare tutte le operazioni privilegiate (sconsigliato perché molto oneroso e prolisso):
AUDIT DBA BY ACCESS;
oppure, con logica per utente:
AUDIT ALL PRIVILEGES BY <username> BY ACCESS;
tracciamento di tutto ciò che fa un utente:
AUDIT ALL STATEMENTS BY <username> BY ACCESS;

Con logica più granulare:
Elencare tutti i privilegi:
select distinct privilege from dba_sys_privs order by 1;

Attivare tracciamento solo sui privilegi distruttivi, come <code>DROP ANY</code>,<code>UPDATE ANY</code>,<code>DELETE ANY</code>.

audit delete table,update table,insert table,index,procedure by <username> by access;

AUDIT TABLE,INDEX,PROCEDURE BY <username> BY ACCESS;

Per avere un elenco degli statement:
create user bubba identified by bubba;
audit all statements by bubba by access;
select * from dba_stmt_audit_opts where user_name='BUBBA';
noaudit all statements by bubba;
drop user bubba cascade;

==Cancellare regole di tracciamento==
per disattivare auditing:

NOAUDIT ALL;
NOAUTID ALL STATEMENTS;
NOAUDIT ALL PRIVILEGES;

Con questi comandi vengono cancellate alche le regole di audit di default. Per ripristinarle è necessario lanciare:
@?/rdbms/admin/secconf


=Unified Audit=
=Unified Audit=
https://oracle-base.com/articles/12c/auditing-enhancements-12cr1

Può essere rediretto sul syslog solo dalle versione 18.0 in avanti. Nella 12.2 esiste, ma scrive solo nel database.

==abilitare unified audit==
How To Enable The New Unified Auditing In 12c ? (Doc ID 1567006.1)

SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';

VALUE
----------------------------------------------------------------
FALSE

Da sistema operativo come utente oracle:

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

SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';

VALUE
----------------------------------------------------------------
TRUE

==configurazione minima verso rsyslog==
alter session set unified_audit_systemlog='SYSLOG.INFO' scope=spfile sid='*';
alter session set unified_audit_common_systemlog='SYSLOG.INFO' scope=spfile sid='*';

==prime regole di audit==
https://www.oracle.com/it/a/tech/docs/dbsec/unified-audit-best-practice-guidelines.pdf

CREATE AUDIT POLICY table_pol PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE;
SELECT *
FROM audit_unified_policies
WHERE policy_name = 'TABLE_POL';

AUDIT POLICY table_pol;
SELECT policy_name, enabled_option, entity_name
FROM audit_unified_enabled_policies
WHERE policy_name = 'TABLE_POL';
=Fine Grane Audit (FGA)=

Elenca le policy
SELECT
object_schema,
object_name,
policy_name,
enabled,
sel,
ins,
upd,
del
FROM
dba_audit_policies;

Consulta gli eventi di audit
SELECT
timestamp,
db_user,
os_user,
sql_text,
sql_bind,
object_schema,
object_name
FROM
dba_audit_trail
WHERE
object_name = 'NOME_TABELLA'
AND statement_type = 'DELETE'
ORDER BY
timestamp DESC;

Eventi di audit con maggiori informazioni
select * from dba_fga_audit_trail;

Per eliminare una policy

BEGIN
DBMS_FGA.DROP_POLICY(
object_schema => 'MIOSCHEMA',
object_name => 'MIATABELLA',
policy_name => 'MIAPOLICY_MIATABELLA'
);


Così mettiamo sotto audit solo coloro che accedono alla tabella tramite una specifica role
<pre>
DBMS_FGA.ADD_POLICY(
object_schema => 'MIOSCHEMA',
object_name => 'MIATABELLA',
policy_name => 'MIAPOLICY',
statement_types => 'INSERT,UPDATE,DELETE',
audit_condition => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''MIA_ROLE_CHE_CONSENTE_INSERT_UPDATE_DELETE'') = ''TRUE''',
audit_column => NULL,
enable => TRUE,
audit_trail => DBMS_FGA.DB + DBMS_FGA.EXTENDED
);
END;
/
</pre>
[[Categoria:Oracle]]
[[Categoria:Oracle]]
[[Categoria:Database]]
[[Categoria:Database]]

Versione attuale delle 15:25, 21 lug 2026

Audit Classico

Da manualistica: "Oracle recommends that you include the BY ACCESS clause for all AUDIT statements, which results in a more detailed audit record."

Generalmente, tutto ciò che per essere fatto necessita di un privilegio, può essere tracciato. è conveniente redirigere tutti gli eventi di audit nel syslog:

ALTER SYSTEM SET AUDIT_TRAIL='OS' SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_SYS_OPERATIONS=TRUE SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_SYSLOG_LEVEL='SYSLOG.INFO' SCOPE=SPFILE;

Vedere cosa viene tracciato

Per verificare quali eventi sono tracciati:

set linesize 200 pagesize 200
col user_name for a20
col proxy_name for a20
SELECT * FROM ALL_DEF_AUDIT_OPTS;
SELECT * FROM DBA_STMT_AUDIT_OPTS ORDER BY AUDIT_OPTION;
SELECT * FROM DBA_PRIV_AUDIT_OPTS ORDER BY PRIVILEGE;

Privilegi sugli oggetti soggetti a tracciatura:

col owner for a20
col object_name for a20
SELECT * FROM DBA_OBJ_AUDIT_OPTS ORDER BY OWNER,OBJECT_NAME;


Configurare regole di tracciamento

Impostazioni minime (12.2) Tracciare chi si connette:

AUDIT SESSION BY ACCESS;

Tracciare tutte le operazioni privilegiate (sconsigliato perché molto oneroso e prolisso):

AUDIT DBA BY ACCESS;

oppure, con logica per utente:

AUDIT ALL PRIVILEGES BY <username> BY ACCESS;

tracciamento di tutto ciò che fa un utente:

AUDIT ALL STATEMENTS BY <username> BY ACCESS;

Con logica più granulare: Elencare tutti i privilegi:

select distinct  privilege from dba_sys_privs order by 1;

Attivare tracciamento solo sui privilegi distruttivi, come DROP ANY,UPDATE ANY,DELETE ANY.

audit delete table,update table,insert table,index,procedure by <username> by access;
AUDIT TABLE,INDEX,PROCEDURE BY <username> BY ACCESS;

Per avere un elenco degli statement:

create user bubba identified by bubba;
audit all statements by bubba by access;
select * from dba_stmt_audit_opts where user_name='BUBBA';
noaudit all statements by bubba;
drop user bubba cascade;

Cancellare regole di tracciamento

per disattivare auditing:

NOAUDIT ALL;
NOAUTID ALL STATEMENTS;
NOAUDIT ALL PRIVILEGES;

Con questi comandi vengono cancellate alche le regole di audit di default. Per ripristinarle è necessario lanciare:

@?/rdbms/admin/secconf

Unified Audit

https://oracle-base.com/articles/12c/auditing-enhancements-12cr1

Può essere rediretto sul syslog solo dalle versione 18.0 in avanti. Nella 12.2 esiste, ma scrive solo nel database.

abilitare unified audit

How To Enable The New Unified Auditing In 12c ? (Doc ID 1567006.1)

SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
VALUE
----------------------------------------------------------------
FALSE

Da sistema operativo come utente oracle:

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle
SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
VALUE
----------------------------------------------------------------
TRUE

configurazione minima verso rsyslog

alter session set unified_audit_systemlog='SYSLOG.INFO' scope=spfile sid='*';
alter session set unified_audit_common_systemlog='SYSLOG.INFO' scope=spfile sid='*';

prime regole di audit

https://www.oracle.com/it/a/tech/docs/dbsec/unified-audit-best-practice-guidelines.pdf

CREATE AUDIT POLICY table_pol PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE;
SELECT *
 FROM audit_unified_policies
 WHERE policy_name = 'TABLE_POL';
AUDIT POLICY table_pol;
SELECT policy_name, enabled_option, entity_name
 FROM audit_unified_enabled_policies
 WHERE policy_name = 'TABLE_POL';

Fine Grane Audit (FGA)

Elenca le policy

SELECT 
   object_schema, 
   object_name, 
   policy_name, 
   enabled, 
   sel, 
   ins, 
   upd, 
   del 
FROM 
   dba_audit_policies;

Consulta gli eventi di audit

SELECT 
   timestamp,
   db_user,
   os_user,
   sql_text,
   sql_bind,
   object_schema,
   object_name
FROM 
   dba_audit_trail 
WHERE 
   object_name = 'NOME_TABELLA'
   AND statement_type = 'DELETE'
ORDER BY 
   timestamp DESC;

Eventi di audit con maggiori informazioni

select * from dba_fga_audit_trail;

Per eliminare una policy

BEGIN
 DBMS_FGA.DROP_POLICY(
   object_schema   => 'MIOSCHEMA',
   object_name     => 'MIATABELLA',
   policy_name     => 'MIAPOLICY_MIATABELLA'
 );

Così mettiamo sotto audit solo coloro che accedono alla tabella tramite una specifica role

DBMS_FGA.ADD_POLICY(
    object_schema   => 'MIOSCHEMA',
    object_name     => 'MIATABELLA',
    policy_name     => 'MIAPOLICY',
    statement_types => 'INSERT,UPDATE,DELETE',
    audit_condition => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''MIA_ROLE_CHE_CONSENTE_INSERT_UPDATE_DELETE'') = ''TRUE''',
    audit_column    => NULL,
    enable          => TRUE,
    audit_trail     => DBMS_FGA.DB + DBMS_FGA.EXTENDED
 );
END;
/