Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Auditoria en Oracle PDF
Auditoria en Oracle PDF
SGBD
AUDITORÍA EN ORACLE
SGBD
AUDITORÍA EN ORACLE
Objetivos:
Oracle, por defecto no trae activada la auditoría (Hasta la versión 11g), aunque la
emplea en algunas actividades de la misma (auditoría obligatoría): el encendido y
apagado, conexiones como sysdba y sysoper.
2
AUDITORÍA EN ORACLE
SGBD
Las modificaciones del archivo init.ora requieren el reinicio de la base de datos para que
surjan efecto, así que reiniciaremos para aplicar los cambios.
Los valores más comunes que podemos asigar al parámetro audit_trail son los
siguientes:
Para este documento vamos a usar el tipo de auditoría db, el más común y el que viene
por defecto en oracle a partir del 11g.
3
AUDITORÍA EN ORACLE
SGBD
Vista Descripción
ALL_AUDIT_POLICIES Define las políticas en las tablas y vistas accesibles
al usuario actual.
ALL_AUDIT_POLICY_COLUMNS Define las políticas de auditoría en las tablas y vistas
accesibles para el usuario actual.
ALL_DEF_AUDIT_OPTS Lista las opciones por defecto de auditoría que serán
aplicadas a los objetos que se crean.
AUDIT_ACTIONS Lista las acciones que pueden ser auditadas.
DBA_AUDIT_EXISTS Lista las entradas auditadas producidas por AUDIT
NOT EXISTS.
DBA_AUDIT_OBJECT Lista los registros de auditoría de todos los objetos
del sistema.
DBA_AUDIT_POLICIES Lista toda la información sobre las políticas de
auditoría del sistema.
DBA_AUDIT_SESSION Lista todos los registros que conciernen a
CONNECT y DISCONNECT.
DBA_AUDIT_POLICY_COLUMNS Lista las columnas de política en las tablas y vistas
de toda la base de datos.
BDA_AUDIT_STATEMENT Lista los registros auditados que conciernen a
GRANT, REVOKE, AUDIT, NOAUDIT y ALTER
SYSTEM de toda la base de datos.
DBA_AUDIT_TRAIL Lista todas las entradas estándares que hay en la
tabla AUD$.
DBA_COMMON_AUDIT_TRAIL Combina los logs estándares con los exhaustivos,
incluye SYS y los registros obligatorios escritos en
formato XML.
DBA_FGA_AUDIT_TRAIL Lista los registros completos de una auditoría.
DBA_OBJ_AUDIT_OPTS Describe las opciones de auditoría en todos los
objetos.
DBA_PRIV_AUDIT_OPTS Describe los privilegios de sistema actuales que
estan siendo auditados por algún usuario.
DBA_STMT_AUDIT_OPTS Describe todas las opciones de auditoría actuales de
todo el sistema y por usuario.
USER_AUDIT_OBJECT Lista los registros auditados para sentencias que
conciernen objetos accesibles para el usuario actual.
USER_AUDIT_POLICIES Describe exhaustivamente las columnas de políticas
de auditoría en las tablas y vistas accesibles por el
usuario actual.
USER_AUDIT_SESSION Lista todos los registros de auditoría relacionados a
conexiones y desconexiones del usuario actual.
USER_AUDIT_STATEMENT Lista todos los registros relacionados con las
sentencias GRANT, REVOKE, AUDIT, NOAUDIT
y ALTER SYSTEM emitidas por el usuario actual.
USER_AUDIT_TRAIL Lista todas las entradas de auditoría estándares de la
tabla AUD$ sobre el usuario actual.
USER_OBJ_AUDIT_OPTS Describe las opciones de auditoría en todos los
objetos que posee el usuario actual.
STMT_AUDIT_OPTION_MAP Describe información sobre los tipos de códigos de
auditoría
4
AUDITORÍA EN ORACLE
SGBD
Hay bastantes vistas más, para verlas todas podemos usar esta sentencia:
SELECT view_name FROM dba_views
WHERE view_name LIKE '%AUDIT%'
ORDER BY view_name
Como ejemplo vamos a ver las conexiones y desconexiones del usuario juanla (como
sys) Hay más campos en la vista dba_audit_session que pueden ser interesantes.
SQL > Select Username, userhost, extended_timestamp, action_name from
dba_audit_session where username='JUANLA';
También podemos comprobar que funciona con la siguiente línea si estamos con la
cuenta de usuario:
SQL > Select Username, userhost, extended_timestamp, action_name from
user_audit_session;
Podemos filtrar los registros de conexiones si han sido correctas o fallida de la siguiente
manera, si no lo filtramos nos registrará los 2 tipos:
5
AUDITORÍA EN ORACLE
SGBD
Con estas sentencias podemos ver que la auditoría de la sentencia create table ha sido
activada para ese usuario:
SQL > Select * from dba_priv_audit_opts where user_name='JUANMA';
SQL > Select * from dba_stmt_audit_opts where user_name='JUANMA';
Así podemos ver que quedan auditados los crete table de Juanma, en este caso:
SQL > Select username,owner,obj_name,action_name,priv_used,timestamp
FROM dba_audit_object where username='JUANMA';
Al crear la tabla con juanma habíamos definido un “Audit create table by juanma”, en el
6
AUDITORÍA EN ORACLE
SGBD
2. Nos conectamos con Hard2, hacemos un Select a una tabla que ha creado.
SQL > Select username, userhost, timestamp, obj_name, action_name,
priv_used from dba_audit_trail where username='HARD2'
La sentencia para auditar sobre un objeto es la siguiente (Vamos a auditar la tabla que
acabamos de crear, para que haya algún registro interesante vamos a hacerle un insert
con otro usuario “juanma”):
7
AUDITORÍA EN ORACLE
SGBD
Resultado al hacer un insert con juanma:
Podemos ver todos los privilegios de la base de datos con la siguiente sentencia:
SQL > Select privilege from dba_sys_privs;
Como en sesiones podemos filtrar los privilegios que se terminan correctamente y los
que no, con “WHENEVER (NOT) SUCCESSFUL” al final de la sentencia, si no se
define auditará todos los tipos. Si nos conectamos con SCOTT y borramos una tabla
podemos ver que dejamos “huella” de ello.
El final de la sentencia “by access” nos guardará un registro nuevo por cada
sentencia que se trague, siendo un registro más exhaustivo que con la orden
“by session” que solo nos guaradaría uno por sesión. Claro que también
acaparará más recursos del sistema
8
AUDITORÍA EN ORACLE
SGBD
Proteger
Eliminar
Gestión de tamaño
Un dba tiene que tener en cuenta que el tamaño de la tabla AUD$ (como hemos dicho
antes) puede aumentar mucho, depende de dos factores:
Número de opciones de auditoría activadas.
9
AUDITORÍA EN ORACLE
SGBD
Frecuencia con la que se producen esas auditorias.
Ahora al reiniciar la base de datos tenemos que tener en cuenta que la sesión de
LogMiner es la de SYS, no podremos usarla con otro usuario porque trabaja con la
sesión de SYS (Recuerda usar un directorio que exista o crearlo manualmente).
10
AUDITORÍA EN ORACLE
SGBD
Ahora debemos crear el diccionario que usa LogMiner para esto debemos asegurarnos
que estará en el mismo directorio que la ruta que dimos antes, por ejemplo:
SQL > exec DBMS_LOGMNR_D.BUILD( DICTIONARY_FILENAME =>'logminer.ora',
DICTIONARY_LOCATION => 'C:\LogMiner');
Ahora solamente tenemos que indicarle a logminer los ficheros redo que necesitamos
estudiar, para ello escribimos las ordenes siguientes (agregar archivo redo y eliminarlo):
SQL> exec DBMS_LOGMNR.add_logfile('nombrearchivo');
SQL> exec DBMS_LOGMNR.remove_logfile (LOGFILENAME => 'nombrearchivo');
Como vemos, añadimos dos archivos redo y eliminamos uno para que se vean las
sentencias ejecutándose, ahroa solo nos queda iniciar la sesión de LOGminer para ver el
redo02.log que es el redo que hemos montado.
Ahora tenemos algunas vistas que nos ayudaran a interpretar la información de los redo,
la principal es v$logmnr_contents, pero tambien tenemos algunas más:
V$LOGMNR_CONTENTS
V$LOGMNR_DICTIONARY
V$LOGMNR_LOGS
V$LOGMNR_PARAMETERS
Voy a mostrar un ejemplo (uno unas líneas para dar formato de salida a la select y así
poder verla desde la consola SQL PLUS)
11
AUDITORÍA EN ORACLE
SGBD
Obtendremos un resultado parecido a esto:
Auditoría “Fine-Grained”
Oracle contempla 2 tipos generales de auditoría, Auditoría estándar y Auditoría FGA
(más concreta) la cual se realiza mediante procedimientos en PL/SQL a través del
paquete DBMS_FGA, este tipo de auditoría es independiente de la estándar y todos sus
registros se guardan en latabla FGA_LOG$, en este trabajo no vamos a tratar PL/SQL
pero voy a dejar un ejemplo de auditoría fine-grained sencillo, para ello usaremos el
usuario Juanla y crearemos una tabla con algunos datos:
12
AUDITORÍA EN ORACLE
SGBD
Vamos a hacer alguna select con el usuario Juanla en la tabla finegrained para ver si las
registra o no.
Y ahora al conectarnos como SYS, podemos ver que hemos obtenido un registro:
Como vemos registro la select a la fila donde el salario era mayor a 5550, aparte del
texto sql ejecutado podemos ver más datos, entre ellos destaco los siguientes:
Nota: Decir que los campos de las select en los ejemplos son los m ás
significativos, hay más campos que pueden ser ú til dependiendo del
uso que se le esté dando.
13
AUDITORÍA EN ORACLE
SGBD
Esta consola web, nos permite añadir políticas de auditoría así como lo hacemos desde
consola, vamos a ver algunos ejemplos. En primer lugar vamos a auditar un privilegio
desde la consola web, para el usuario JUANLA, para ello seleccionamos el usuario y
pulsamos en añadir, ahí elegimos el privilegio:
Ahora vamos más abajo y vemos que Oracle nos ha preparado un apartado donde
podemos auditar roles:
Y aún más abajo vemos que oracle nos da a a elegir las demás opciones de auditoría que
nos quedan, que son el filtrado por usuario, por resultado de ejecución (satisfactoria o
no) , o la exhaustivida del registro.
14
AUDITORÍA EN ORACLE
SGBD
Ahora solo tenemos que pulsar en el botón “Ok” y ya empezará a auditar sobre ese
privilegio. Si creamos una tabla con el usuario juanla y en la consola web vamos a
“Privilegios Auditado” podemos encontrarnos un resultado parecido a este:
Oracle nos permite elegir un tipo de objeto, entre ellos están: (Contexto, Directorio,
Función, Libreria, Vista materializada, tipo objeto, paquete, procedimiento, secuencia,
sinónimo, tabla y vista) Nosotros elegiremos tabla. La podemos añadir con la
herramienta de búsqueda de oracle:
Podemos elegir opciones de audición, como son las sentencias auditadas, filtro de
resultado, exhaustividad de la sentencia.. Probaremos a insertar un dato y hacer un
select de la misma tabla y vamos a “Objetos Auditados” donde encontraremos:
15
AUDITORÍA EN ORACLE
SGBD
Por último, la consola web de oracle nos permite auditar sentencias concretas, vamos a
ver un ejemplo con un update y un drop table de la tabla “prueba1”, y como tal
seguimos de la misma forma que en las demás opciones, vamos a “Añadir sentencia
auditada” y la consola nos mostrará lo que debemos elegir, muy amigable y sencillo
como en las demás opciones de auditoría:
Como vemos es una manera más cómoda (pero más lenta) de hacer auditoría en nuestro
sistema, una alternativa que puede sernos útil en algnos momentos para crear políticas o
consultar registros. Eso sí, tiene limitaciones al mostrar los datos de registro pero no por
ello deja de ser útil para la administración de la base de datos.
16