Auditoria

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Boa tarde,

Gostaria de criar uma auditoria em que cada comando DDL do usuário fosse auditado, e que armazenasse a query que foi utilizada. alguém pode me ajudar por favor.
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:
________________________________
Douglas - Madmax.

Heraldo,

O Audit_Trail do banco Oracle não te atende ?

Por Default ele vem habilitado no banco e você consegue verificar os DDL com o select abaixo.

Selecionar tudo

select * from DBA_AUDIT_OBJECT WHERE OBJ_NAME LIKE 'GA_%'
AND ACTION_NAME = 'ALTER TABLE' order by 5 desc 

SELECT * FROM DBA_COMMON_AUDIT_TRAIL
WHERE STATEMENT_TYPE LIKE '%ALTER TABLE%'
ORDER BY 6 DESC
Senão você terá que fazer trigger nas tabelas que você quer auditar para guardar os ddls em tabelas de LOGs, aí e mais complicado.

Espero ter ajudado.
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

Um ponto que é muito importante e vejo que muita gente não sabe é que ao habilitar auditoria você estará consumindo recursos extras do BD e consequentemente degradando a performance das instruções SQL sendo auditadas e do BD como um todo.

Para mais informações leia o artigo http://www.fabioprado.net/2013/01/audit ... racle.html.

[]s
crishpg
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Sex, 12 Out 2012 11:26 am
Localização: Santa ROSA
Contato:
Cristiano Schmitt
Administrador de Banco de Dados e Tecnologia

ola você pode usar uma solução via trigger.
comando para criação da tabela que vai guardar os dados auditados

Selecionar tudo

 	CREATE TABLE ddl_log (
operation   VARCHAR2(30),
obj_owner   VARCHAR2(30),
object_name VARCHAR2(30),
sql_text    VARCHAR2(64),
attempt_by  VARCHAR2(30),
attempt_dt  DATE);

comando para criar a trigger que audita os objetos.

Selecionar tudo

CREATE OR REPLACE TRIGGER ddl_trigger
BEFORE CREATE OR ALTER OR DROP
ON SCHEMA

DECLARE
 oper ddl_log.operation%TYPE;
 sql_text ora_name_list_t;
 i        PLS_INTEGER;
BEGIN
  SELECT ora_sysevent
  INTO oper
  FROM DUAL;

  i := sql_txt(sql_text);

  IF oper IN ('CREATE', 'DROP') THEN
    INSERT INTO ddl_log
    SELECT ora_sysevent, ora_dict_obj_owner,
    ora_dict_obj_name, sql_text(1), USER, SYSDATE
    FROM DUAL;
  ELSIF oper = 'ALTER' THEN
    INSERT INTO ddl_log
    SELECT ora_sysevent, ora_dict_obj_owner,
    ora_dict_obj_name, sql_text(1), USER, SYSDATE
    FROM sys.gv_$sqltext
    WHERE UPPER(sql_text) LIKE 'ALTER%'
    AND UPPER(sql_text) LIKE '%NEW_TABLE%';
  END IF;
END ddl_trigger;
/
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 18 visitantes