Segue abaixo como ativar auditoria para comandos de DDL, se for necessário para comandos DMLs por tabela, essa configuração foi realizada no Oracle Database 11g.
--
-- O parâmetro AUDIT_TRAIL deve estar em DB_EXTENDED.
ALTER SYSTEM SET AUDIT_SYS_OPERATIONS = TRUE SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_TRAIL = DB_EXTENDED SCOPE=SPFILE;
--
-- Verificar se o processo automático de expurgo da auditoria está inicializado.
SET SERVEROUTPUT ON
BEGIN
IF NOT DBMS_AUDIT_MGMT.IS_CLEANUP_INITIALIZED(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD)
THEN
DBMS_OUTPUT.PUT_LINE('CLEANUP NOT INITIALIZED' );
ELSE
DBMS_OUTPUT.PUT_LINE('CLEANUP INITIALIZED' );
END IF;
END;
/
--
-- Habilitar o CLEANUP.
EXEC SYS.DBMS_AUDIT_MGMT.INIT_CLEANUP(AUDIT_TRAIL_TYPE => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD, DEFAULT_CLEANUP_INTERVAL => 24);
--
-- Criar uma tablespace, mover a AUD$ para esta TABLESPACE.]
SELECT FILE_ID, FILE_NAME FROM DBA_DATA_FILES;
CREATE TABLESPACE TS_AUDIT DATAFILE '/u01/oracle/oradata/ORCL/TS_AUDIT_01.DBF' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
SELECT COUNT(*) FROM SYS.AUD$;
NOAUDIT ALL;
NOAUDIT ALL PRIVILEGES;
NOAUDIT EXEMPT ACCESS POLICY;
NOAUDIT ALL ON DEFAULT;
TRUNCATE TABLE SYS.AUD$;
SELECT COUNT(*) FROM SYS.AUD$;
EXEC DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, AUDIT_TRAIL_LOCATION_VALUE => 'TS_AUDIT');
--
-- Criar um Scheduler para marcar diariamente os registros de auditoria conforme a retenção. Nesse exemplo, anteriores a 90 dias.
EXEC DBMS_SCHEDULER.DROP_JOB(JOB_NAME => 'AUDIT_LAST_ARCHIVE_TIME');
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
JOB_NAME => 'AUDIT_LAST_ARCHIVE_TIME',
JOB_TYPE => 'PLSQL_BLOCK',
JOB_ACTION => 'BEGIN
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, LAST_ARCHIVE_TIME => SYSTIMESTAMP-32);
END;',
START_DATE => SYSTIMESTAMP,
REPEAT_INTERVAL => 'FREQ=DAILY; BYHOUR=19; BYMINUTE=0; BYSECOND=0;',
END_DATE => NULL,
ENABLED => TRUE,
COMMENTS => 'Automatically set audit last archive time.');
END;
/
--
-- Criar o processo de limpeza (roda a cada 24 horas) dos registros que foram marcados pelo scheduler anterior.
BEGIN
SYS.DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(
AUDIT_TRAIL_TYPE => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
AUDIT_TRAIL_PURGE_INTERVAL => 24,
AUDIT_TRAIL_PURGE_NAME => 'AUDIT_PURGE_ALL_TRAILS',
USE_LAST_ARCH_TIMESTAMP => TRUE
);
END;
/
--
-- Se for necessário alterar o horário, utilize este bloco.
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE (
NAME => 'AUDIT_PURGE_ALL_TRAILS',
ATTRIBUTE => 'REPEAT_INTERVAL',
VALUE => 'FREQ=DAILY; BYHOUR=04; BYMINUTE=0; BYSECOND=0;');
END;
/
--
-- Alterar a quantidade de linhas deletadas no processo batch. Default é 10000.
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
AUDIT_TRAIL_PROPERTY => DBMS_AUDIT_MGMT.DB_DELETE_BATCH_SIZE,
AUDIT_TRAIL_PROPERTY_VALUE => 1000000);
END;
/
--
-- Limpar agora o que foi marcado como antigo.
EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, USE_LAST_ARCH_TIMESTAMP => TRUE);
--
-- Limpar a Auditoria.
SELECT COUNT(*) FROM SYS.AUD$;
NOAUDIT ALL;
NOAUDIT ALL PRIVILEGES;
NOAUDIT EXEMPT ACCESS POLICY;
NOAUDIT ALL ON DEFAULT;
TRUNCATE TABLE SYS.AUD$;
SELECT COUNT(*) FROM SYS.AUD$;
--
-- Auditoria Básica de DDL.
AUDIT ALTER DATABASE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT UPDATE, DELETE ON SYS.AUD$ BY ACCESS;
AUDIT ALTER SYSTEM BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SYSTEM AUDIT BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SYSTEM GRANT BY ACCESS WHENEVER SUCCESSFUL;
AUDIT DIRECTORY BY ACCESS WHENEVER SUCCESSFUL;
AUDIT CREATE ANY DIRECTORY BY ACCESS WHENEVER SUCCESSFUL;
AUDIT DATABASE LINK BY ACCESS WHENEVER SUCCESSFUL;
AUDIT PUBLIC DATABASE LINK BY ACCESS WHENEVER SUCCESSFUL;
AUDIT INDEX BY ACCESS WHENEVER SUCCESSFUL;
AUDIT MATERIALIZED VIEW BY ACCESS WHENEVER SUCCESSFUL;
AUDIT PROCEDURE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT GRANT PROCEDURE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT PROFILE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT ROLE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SEQUENCE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT ALTER SEQUENCE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT GRANT SEQUENCE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SYNONYM BY ACCESS WHENEVER SUCCESSFUL;
AUDIT PUBLIC SYNONYM BY ACCESS WHENEVER SUCCESSFUL;
AUDIT TABLE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT ALTER TABLE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT GRANT TABLE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT TABLESPACE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT TRIGGER BY ACCESS WHENEVER SUCCESSFUL;
AUDIT USER BY ACCESS WHENEVER SUCCESSFUL;
AUDIT ALTER USER BY ACCESS WHENEVER SUCCESSFUL;
AUDIT VIEW BY ACCESS WHENEVER SUCCESSFUL;
AUDIT TYPE BY ACCESS WHENEVER SUCCESSFUL;
AUDIT CREATE SESSION WHENEVER NOT SUCCESSFUL;
AUDIT NETWORK BY ACCESS;
AUDIT NOT EXISTS BY ACCESS WHENEVER SUCCESSFUL;
--
-- Exemplos expecíficos:
AUDIT SELECT, INSERT, UPDATE, DELETE ON SIGA.SRA010 BY ACCESS;
Abs!