Publicado el Dejar un comentario

Auditar una tabla o usuario en #Oracle 10g

Antes de auditar una tabla o usuario de la base de datos Oracle, es necesario que ésta esté habilitada para ello. Los pasos aquí mostrados se deben hacer siempre con un usuario conectado con permisos administrativos (AS SYSDBA) como el usuario SYS.

Para saber si Oracle está habilitada para generar auditorías listamos el valor del parámetro AUDIT desde sqlplus o sqldeveloper autentificados con un usuario administrativo, por ejemplo SYS:

show parameter audit;

NAME                 TYPE    VALUE                       
-------------------- ------- --------------------------- 
audit_file_dest      string  /opt/oracle/admin/instancia/adump 
audit_syslog_level   string                              
audit_sys_operations boolean TRUE                        
audit_trail          string  DB_EXTENDED

En mi caso la auditoría ya esta habilitada. Esto lo indica el parámetro audit_trail que tiene asignado el valor DB_EXTENDED. Por defecto, cuando se instala Oracle, la auditoría esta deshabilitada y este parámetro tiene el valor NONE

El valor DB_EXTENDED le indica a Oracle registrar los eventos de auditoría en la tablas SYS.AUD$. DB_EXTENDED registra, además de otros datos, tanto las variables encadenadas (bind) como las consultas ejecutadas, en los campos SQL_BIND y SQL_TEXT respectivamente.

Cambiemos el valor de audit_trail en caso de que tenga el valor NONE:

ALTER SYSTEM SET audit_trail=db_extended SCOPE=SPFILE;

Para que este parámetro estático tome efecto y Oracle permita auditorías, es necesario dar baja y luego dar alta nuevamente la base de datos con los comandos SHUTDOWN y STARTUP respectivamente:

SHUTDOWN

Database closed.
Database dismounted.
ORACLE instance shut down.

STARTUP

ORACLE instance started.

Total System Global Area  289406976 bytes
Fixed Size                  1248600 bytes
Variable Size              71303848 bytes
Database Buffers          213909504 bytes
Redo Buffers                2945024 bytes
Database mounted.
Database opened.

Bien, si vamos a auditar una tabla por cualquier operación que se haga sobre ella, ejecutaríamos la siguiente sentencia sql:

audit all on pagos.facturas by access;

Le estamos indicando de cualquier operación o sentencia sql que se haga sobre la tabla facturas del esquema pagos, sea registrada. BY ACCESS indica que insertará un registro en las tablas de auditoría por cada operación que se haga en la tabla, la otra opción BY SESSION, registraría todas las operaciones a la tabla de una sesión de usuario en un sólo registro de auditoría.

Ahora si queremos auditar todas las operaciones de inserción, actualización y borrado a cualquier tabla que haga un usuario específico:

audit update table, delete table, insert table by pancho by access;

En este ejemplo estaremos auditando los insert, delete y update que haga en usuario pancho a cualquier tabla y registrando un registro en las tablas de auditoría por cada operación.

Para listar las operaciones de auditoría que ha registrado Oracle, podemos usar la vista dba_audit_trail:

select * from dba_audit_trail;

Para más opciones de auditoría ver la ayuda de Oracle 10g. Espero y les ayude este post.

¡Visita los patrocinadores por favor!

¡Saludos!

 

 

 

 

 

Publicado el 7 comentarios

Borrar archivos viejos o antiguos en Windows desde linea de comando

Aunque esto lo podríamos hacer desde el el explorador de archivo de windows, ordenando los archivos por fecha y seleccionando los que cumplan la condición requerida de antigüedad, existe una forma más práctica de hacerlo usando el comando FORFILES desde la linea de comandos (CMD) del mismo windows. Este comando puede ser usado interactivamente o en un archivo de procesamiento por lotes (batch).

Por ejemplo en el siguiente uso del comando FORFILES:

forfiles /p "C:\Documentos" /s /m *.doc /d -30 /c "cmd /c del @path"

Indica buscar en la carpeta C:\Documentos (/p “C:\Documentos”) y todas las carpetas contenidas en ella (/s), recursivamente,  aquellos archivos con la extensión .doc (/m *.doc) de 30 días o más de antigüedad (/d -30) y borrar dichos archivos con el comando del (/c “cmd /c del @path”).

También se le puede indicar la fecha exacta de antigüedad:

forfiles /p "C:\Documentos" /s /m *.doc /d -01/01/2017 /c "cmd /c del @path"

En este caso borrará los archivos igual o anterior a la fecha del primero de enero del 2017 (/d -01/01/2017), el formato de la fecha como puedes observar es dd/mm/aaaa (día/mes/año).

Más información y usos de este comando lo pueden encontrar aquí.

¡Espero les sirva!

¡No olviden visitar a los patrocinadores!

 

 

Publicado el Dejar un comentario

¿Cómo encontrar un texto o palabra dentro de todas las funciones, procedimientos, disparadores y otros objetos en Oracle?

A veces nos vemos en la necesidad de saber dónde hacemos uso de un nombre de una tabla, función, variable, campo o un simple texto dentro del código fuente de los diferentes objectos de la base de datos Oracle.

Para localizar dónde se usa cierto nombre, palabra o texto podemos ejecutar la siguiente sentencia con el usuario SYS preferentemente:

select * from SYS.ALL_SOURCE where upper(TEXT) like '%VENTAS%';

En el ejemplo anterior estamos buscando el texto o palabra “VENTAS” dentro de todos los códigos fuente que definen los objectos de Oracle, como son procedimientos, funciones, disparadores.

Si encuentra la palabra buscada la consulta nos  como resultado el propietario, nombre de objeto, tipo del objeto, la linea donde encontró el texto y el texto completo de la linea.

Espero y les sea útil. ¡Hasta pronto!