Tuesday, March 27, 2012

Auditing DDL Statements on Database


CREATE TABLE AUDIT_LOG_DDL
(
  STMT_ISSUED_ON             DATE,
  OSUSER        VARCHAR2(255 BYTE),
  CURRENT_USER  VARCHAR2(255 BYTE),
  HOST          VARCHAR2(255 BYTE),
  TERMINAL      VARCHAR2(255 BYTE),
  OWNER         VARCHAR2(30 BYTE),
  TYPE          VARCHAR2(30 BYTE),
  NAME          VARCHAR2(30 BYTE),
  SYSEVENT      VARCHAR2(30 BYTE)
)


CREATE OR REPLACE TRIGGER TRG_AUDIT_DDL_SCHEMA before DDL on schema
declare hostname varchar2(40);
begin
  if (ora_sysevent='COMMENT')
  then
    null;
  else
    hostname:=sys_context('USERENV','IP_ADDRESS');
   
    insert into audit_log_ddl(stmt_issued_on, osuser,current_user,host,terminal,owner,type,name,sysevent)
    values(
      sysdate,
      sys_context('USERENV','OS_USER') ,
      sys_context('USERENV','CURRENT_USER') ,
      sys_context('USERENV','HOST') ,
      sys_context('USERENV','TERMINAL') ,
      ora_dict_obj_owner,
      ora_dict_obj_type,
      ora_dict_obj_name,
      ora_sysevent
    );
  end if;
end;
/

No comments: