Registro de un DDL

 

Retomando un poco el tema de auditoria

 

Tengo activada la auditoria en una db 11g y se que los DDL que son por sesion de usuario diferente a SYS se registran en la tabla DBA_AUDIT_TRAIL, pero por ejemplo si reviso la columna LAST_DDL_TIME de la tabla DBA_OBJECTS me aparece que en el objeto TABLA1 el last DDL fue del dia 10/04/2013 y si reviso ese objeto en la tabla dba_audit_trail no tengo ningun registro referente a ese objeto. 

 

Como puedo saber que DDL (ALTER, CREATE, DROP, etc) se ejecuto en ese objeto? 

 

 

Suponiendo que la auditoría estaba activada el día que indicas, yo creo que ya vas bien consultando la DBA_AUDIT_TRAIL, pero te debe haber fallado algo en el proceso de preparar la auditoría.

Te enlazo este post de Oracle-base, que está bastante bien explicado, si lo sigues paso a paso seguro que sacas sin problemas todas las DDL de DBA_AUDIT_TRAIL.

 

Excelente calos, gracias por la informacion, siguiendo las notas te comento que realice lo siguiente.

 

La auditoria que esta activa es la estandar en la base de datos es decir AUDIT_TRAIL=DB.

El seguimiento de DDL que quiero realizar es por que hay usuarios con rol de DBA que no deberian de tener, sin embargo aprovechando la bondad de tener el rol de DBA se crearon varias aplicaciones productivas, lo que intento es asignar solo los privilegios necesarios a cada usuario y quitar esa brecha de seguridad.

Por lo pronto habilite un trigger de sistema para comenzar con la auditoria, dejo el script que me encontre por si le sirve a alguien. Primero se crea la tabla donde se almacenaran los registros y posteriormente el trigger, recomiendo sea con un usuario de soporte y un tablespace controlado para evitar problemas de storage.

 

CREATE TABLE NOMBREDELATABLA ( FECHA date, OSUSER varchar2(255), CURRENT_USER varchar2(255), HOST varchar2(255), TERMINAL varchar2(255), owner varchar2(30), type varchar2(30), name varchar2(30), sysevent varchar2(30)); create or replace trigger NOMBREDELTRIGGER after ddl on database begin    insert into NOMBREDELATABLA(FECHA, 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;/

 

Saludos

 

En respuesta a por OMARE

Gracias por compartir el script.

Me parece una buena opción para poder ajustar los privilegios que necesita cada usuario con cierta seguridad. Esta situación es más común de lo que debería, ya que en los arranques de proyectos, sobretodo si la base de datos es nueva, no siempre se da la importancia que merece a la seguridad de la base de datos, y toca actuar cuando empiezan a surgir los problemas. Seguro que va a ser de utilidad a mucha gente.

Un saludo,