Auditoría en Oracle

Sistemas Gestores de Base de Datos
Juan Javier Rodríguez Guisado

SGBD

la auditoría es una parte importante de la seguridad del sistema que no debe olvidarse. Análizar los redo logs con LogMiner. destruir.AUDITORÍA EN ORACLE SGBD AUDITORÍA EN ORACLE Objetivos:        Aprender a activar la auditoría en ORACLE. aunque la emplea en algunas actividades de la misma (auditoría obligatoría): el encendido y apagado. Para activar la auditoría estándar en Oracle. o Podemos prevenir ataques y detectar posibles intrusos. podemos ver el estado de este parámetro con el comando “show parameter audit” El comando para activar la auditoría en oracle es el siguiente: ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE.ora (por defecto “none”). donde se almacena la información de auditoría. Conocer las posibilidades que ofrece Enterprise Manager para llevar a cabo auditorías.  Inconvenientes: o Mayor consumo de recursos del sistema. etc. o Privilegios del sistema. o Protegeremos mejor nuestro sistema. necesitamos cambiar el paramétro Audit_trail del init. Oracle. 2 . Conocer la forma de auditar: o Inicios de sesión en la base de datos o Ejecución de sentencias concretas o Acciones de cada usuario.D. Aprender a redactar una documentación concisa y útil sobre procedimientos de administración. por defecto no trae activada la auditoría (Hasta la versión 11g). Activación de la auditoría en Oracle La auditoría en Oracle consiste en la monitorización y almacenamiento de información de nuestro servidor Oracle. conexiones como sysdba y sysoper. Dominar las vistas del D. Gestionar registros de auditoría (proteger.).  Ventajas: o Dispondremos de información de las operaciones del sistema. o Acciones sobre cada objeto.

así que reiniciaremos para aplicar los cambios. con todos los registros guardados directamente    en el sistema operativo (en un di rectoio y archivos concretos).AUD$ (tablespace SYSTEM por defecto). Para este documento vamos a usar el tipo de auditoría db.AUDITORÍA EN ORACLE SGBD Las modificaciones del archivo init. xml activa la auditoría de la base de datos.ora requieren el reinicio de la base de datos para que surjan efecto.AUD$. Los valores más comunes que podemos asigar al parámetro audit_trail son los siguientes:    none  La auditoría está desactivada. extended  La auditoría está activada los datos se almacenarán en la taba SYS. para ello hacemos lo siguiente: SQL> ALTER SYSTEM SET audit_sys_operations=true SCOPE=SPFILE. que principalmente son: 3 . Xml. los registros serán escritos en el formato XML del sistema operativo. Además se escribirán los valores correspondientes en las columnas SqlText y SqlBind de la tabla SYS. los sucesos será escritos en ficheros XML del sistema operativo. a nosotros nos insteresan las vistas con relación a la auditoría. además se incluirán los valores de SqlText y SqlBind. os  La auditoría está activada. extended  activa la auditoría de la base de datos. el más común y el que viene por defecto en oracle a partir del 11g. Tambien podemos activar la auditoría de operaciones de usuarios con privilegios de sistema.AUD$. db  La auditoría está activada con todos y guarda los registros en la tabla SYS. Vistas del D. está opción depende del sistema operativo.D. db. con relación a la auditoría Nota: Estas vistas serán usadas en ejemplos más adelante en este mismo documento Las vistas del diccionario de datos nos muestran información útil de nuestro sistema.

USER_AUDIT_POLICIES Describe exhaustivamente las columnas de políticas de auditoría en las tablas y vistas accesibles por el usuario actual. REVOKE. USER_OBJ_AUDIT_OPTS Describe las opciones de auditoría en todos los objetos que posee el usuario actual. AUDIT. USER_AUDIT_OBJECT Lista los registros auditados para sentencias que conciernen objetos accesibles para el usuario actual. DBA_AUDIT_OBJECT Lista los registros de auditoría de todos los objetos del sistema. USER_AUDIT_TRAIL Lista todas las entradas de auditoría estándares de la tabla AUD$ sobre 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. NOAUDIT y ALTER SYSTEM emitidas por el usuario actual. NOAUDIT y ALTER SYSTEM de toda la base de datos. incluye SYS y los registros obligatorios escritos en formato XML. AUDIT_ACTIONS Lista las acciones que pueden ser auditadas. 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. DBA_COMMON_AUDIT_TRAIL Combina los logs estándares con los exhaustivos. BDA_AUDIT_STATEMENT Lista los registros auditados que conciernen a GRANT. AUDIT. DBA_AUDIT_TRAIL Lista todas las entradas estándares que hay en la tabla AUD$. DBA_PRIV_AUDIT_OPTS Describe los privilegios de sistema actuales que estan siendo auditados por algún usuario. DBA_FGA_AUDIT_TRAIL Lista los registros completos de una auditoría. ALL_AUDIT_POLICY_COLUMNS Define las políticas de auditoría en las tablas y vistas accesibles para el usuario actual. DBA_STMT_AUDIT_OPTS Describe todas las opciones de auditoría actuales de todo el sistema y por usuario. STMT_AUDIT_OPTION_MAP Describe información sobre los tipos de códigos de auditoría 4 . DBA_AUDIT_POLICIES Lista toda la información sobre las políticas de auditoría del sistema. REVOKE.AUDITORÍA EN ORACLE SGBD Vista ALL_AUDIT_POLICIES Descripción Define las políticas en las tablas y vistas accesibles al usuario actual. DBA_AUDIT_EXISTS Lista las entradas auditadas producidas por AUDIT NOT EXISTS. DBA_OBJ_AUDIT_OPTS Describe las opciones de auditoría en todos los objetos. DBA_AUDIT_POLICY_COLUMNS Lista las columnas de política en las tablas y vistas de toda la base de datos. DBA_AUDIT_SESSION Lista todos los registros que conciernen a CONNECT y DISCONNECT.

La vista dba_audit_trail tambien nos da información interesante cuando registra que el usuario Juanla se ha conectado o desconectado: SQL > Select username. extended_timestamp. 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. action_name from user_audit_session. SQL > Select Username. timestamp. priv_used from dba_audit_trail where username='JUANLA'. action_name. Auditar una sentencia concreta Pongámonos en la situación que por ejemplo vamos a auditar todas las sentencias que creen una tabla. Podemos filtrar los registros de conexiones si han sido correctas o fallida de la siguiente manera. usuario2.” Al igual que el comando AUDIT tenemos el comando NOAUDIT para desactivarla política de auditoría previamente activada. comment_text. También podemos comprobar que funciona con la siguiente línea si estamos con la cuenta de usuario: SQL > Select Username. extended_timestamp. SQL>audit session whenever successful. action_name from dba_audit_session where username='JUANLA'. para este ejemplo vamos a auditar los create table de juanma. para verlas todas podemos usar esta sentencia: SELECT view_name FROM dba_views WHERE view_name LIKE '%AUDIT%' ORDER BY view_name Auditar los inicios de sesión de la base de datos Para auditar los inicios de sesión de la base de datos usaremos la sentencia “AUDIT SESSION” (la cual podemos filtrar por usuarios de la siguiente forma “AUDIT SESSION BY usuario1. 5 .AUDITORÍA EN ORACLE SGBD Hay bastantes vistas más. userhost. si no lo filtramos nos registrará los 2 tipos: SQL>audit session whenever not successful. userhost.

owner. vamos a hacer algunas operaciones y vemos si las registra: 1. action_name. Nos conectamos con el usuario “Hard” y creamos una tabla SQL > Select username.priv_used.obj_name. priv_used from dba_audit_trail where username='HARD' 6 .timestamp FROM dba_audit_object where username='JUANMA'. Auditar acciones de cada usuario Si vamos a auditar las acciones de cada usuario. se auditarán todas. userhost. lo primero vamos a definir en Oracle que registre todas las actividades que hacen: Ahora. obj_name.timestamp FROM dba_audit_object where username=SCOTT. Así podemos ver que quedan auditados los crete table de Juanma. en este caso: SQL > Select username. en el caso que no pongamos el by nombreusuario. timestamp. SQL > Select * from dba_stmt_audit_opts where user_name='JUANMA'.action_name.obj_name.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'.action_name. Al crear la tabla con juanma habíamos definido un “Audit create table by juanma”. para comprobar si está auditando correctamente. como por ejemplo si creamos una tabla nueva con SCOTT (en el caso que auditemos a todos los usuarios): SQL > Select username.priv_used.owner.

3. vamos a ver como se audita una tabla. userhost. hacemos un Select a una tabla que ha creado. userhost. SQL > Select username. SQL > Select username. Nos conectamos con Hard2.AUDITORÍA EN ORACLE SGBD 2. Hacemos un insert en alguna tablal con Hard2. timestamp. timestamp. Borramos la tabla creada con Hard2. para ello crearemos una tabla con el usuario “Ejemplo” llamada “tablaobjeto”: La sentencia para auditar sobre un objeto es la siguiente (Vamos a auditar la tabla que acabamos de crear. obj_name. para que haya algún registro interesante vamos a hacerle un insert con otro usuario “juanma”): 7 . action_name. priv_used from dba_audit_trail where username='HARD2' Auditar acciones sobre cada objeto Auditando acciones sobre objetos tendremos seguirdad sobre la actividad de los usuarios que han interactualo con ese objeto. priv_used from dba_audit_trail where username='HARD2' 3. action_name. SQL > Select * from dba_audit_trail where username='HARD2'. obj_name.

8 . timestamp. Como en sesiones podemos filtrar los privilegios que se terminan correctamente y los que no. obj_name. owner. El final de la sentencia “by access” nos guardará un registro nuevo por cada sentencia que se trague. Claro que también acaparará más recursos del sistema Gestionar registros de Auditoría Para gestionar los registros de auditoría de oracle debemos tener claro que cualquier usuario que se conecte con privilegios de administrador puede borrar estos archivos. Auditar privilegios del sistema Para auditar un privilegio de sistema simplemente debemos de usar la orden audit seguida del privilegio de sitema que necesitemos: SQL > AUDIT DELETE ANY TABLE BY ACCESS. siendo un registro más exhaustivo que con la orden “by session” que solo nos guaradaría uno por sesión. userhost. action_name from dba_audit_object where username='JUANMA'.AUDITORÍA EN ORACLE SGBD Resultado al hacer un insert con juanma: SQL > Select username. 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. aunque es “visible” que han sido borrados siempre que tengamos activado el parámetro audit_sys_operations=true tal y como está explicado arriba. Podemos ver todos los privilegios de la base de datos con la siguiente sentencia: SQL > Select privilege from dba_sys_privs. SQL > Select * from dba_audit_trail where username=’SCOTT’. Para auditar todas las acciones de esa misma tabla haríamos: SQL > audit all on CONTABILIDAD by access.

9 . depende de dos factores:  Número de opciones de auditoría activadas.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.

10 . podemos ver inicialmente el valor de la siguiente manera: Pues ya sabemos modificar parámetros estáticos y que conllevan a reiniciar la BBDD: SQL > alter system set utl_file_dir='C:\LogMiner' scope=spfile.AUDITORÍA EN ORACLE SGBD  Frecuencia con la que se producen esas auditorias. Analizar Redo logs con Log Miner Log Miner es una herramienta que Oracle incorpora en su BBDD que nos ayudan a hacer más sencillo e interpretable los redo logs. Para activarlo tenemos que definir una ruta de archivos en el parámetro “utl_file_dir”. no podremos usarla con otro usuario porque trabaja con la sesión de SYS (Recuerda usar un directorio que exista o crearlo manualmente). Ahora al reiniciar la base de datos tenemos que tener en cuenta que la sesión de LogMiner es la de SYS.

ahroa solo nos queda iniciar la sesión de LOGminer para ver el redo02. la principal es v$logmnr_contents.log que es el redo que hemos montado. Ahora solamente tenemos que indicarle a logminer los ficheros redo que necesitamos estudiar.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. para ello escribimos las ordenes siguientes (agregar archivo redo y eliminarlo): SQL> exec DBMS_LOGMNR.ora'.START_LOGMNR(DICTFILENAME=>’ruta del diccionario’) .add_logfile('nombrearchivo').remove_logfile (LOGFILENAME => 'nombrearchivo'). Como vemos.BUILD( DICTIONARY_FILENAME =>'logminer. añadimos dos archivos redo y eliminamos uno para que se vean las sentencias ejecutándose. por ejemplo: SQL > exec DBMS_LOGMNR_D. SQL> exec DBMS_LOGMNR. Ahora tenemos algunas vistas que nos ayudaran a interpretar la información de los redo. 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 . SQL > exec DBMS_LOGMNR. DICTIONARY_LOCATION => 'C:\LogMiner').

O salir de la sesión de SYS y automáticamente se cerrará la base de datos.END_LOGMNR. para ello usaremos el usuario Juanla y crearemos una tabla con algunos datos: Creamos la política en PL/SQL con la orden dbms_fga.AUDITORÍA EN ORACLE SGBD Obtendremos un resultado parecido a esto: Para finalizar la sesión de LogMiner solo es necesario ejecutar el siguiente comando: SQL > exec DBMS_LOGMNR. 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. 12 . 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.add_policy(). Auditoría “Fine-Grained” Oracle contempla 2 tipos generales de auditoría. La política controlará los salarios de más de 5550 de valor.

add_policy(). obviamente consume más recursos y hay que tener claro por qué. cuanto tiempo vamos a activarla. dónde.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. Enterprise Manager y las auditorías Enterprise manager nos brinda una consola web con miles de opciones. entre ellas las relacionadas con la auditoría que lo que hacen es hacerla más cómoda al ojo del administrador. Como conclusión la auditoría fine-grained es mucho más avanzada que la normal. aparte del texto sql ejecutado podemos ver más datos. entre ellos destaco los siguientes: Obviamente podemos eliminar la política con la orden: dbms_fga. hay más campos que pueden ser ú til dependiendo del uso que se le esté dando. por eso me pareció interesante comentar un poco en el trabajo. 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. son más complejas pero merecen la pena por el resultado que dan y que la auditoría estándar no puede ofrecer. para llegar a ella nos loguearemos y ireamos a las opciones de auditoría desde la siguiente manera: 13 . Nota: Decir que los campos de las select en los ejemplos son los m ás significativos.

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. En primer lugar vamos a auditar un privilegio desde la consola web. los usuarios privilegiados están auditados y cual es el directorio de la auditoría (si la hacemos por sistema operativo o XML) Esta consola web.AUDITORÍA EN ORACLE SGBD En la pestaña “Servidor”. para ello seleccionamos el usuario y pulsamos en añadir. Como información principal vemos si la auditoría está activada. nos permite añadir políticas de auditoría así como lo hacemos desde consola. o la exhaustivida del registro. vamos a ver algunos ejemplos. que son el filtrado por usuario. 14 . vamos al apartado de seguridad y vemos “Configuración de Auditoría” entramos en ella y tendremos abierto el apartado web relacionado con la auditoría. para el usuario JUANLA. por resultado de ejecución (satisfactoria o no) .

secuencia. entre ellos están: (Contexto. La podemos añadir con la herramienta de búsqueda de oracle: Podemos elegir opciones de audición. procedimiento. Probaremos a insertar un dato y hacer un select de la misma tabla y vamos a “Objetos Auditados” donde encontraremos: 15 . sinónimo. paquete.. llamada prueba1) Vamos a “Añadir objeto auditado”: Oracle nos permite elegir un tipo de objeto. Libreria.AUDITORÍA EN ORACLE SGBD Ahora solo tenemos que pulsar en el botón “Ok” y ya empezará a auditar sobre ese privilegio. filtro de resultado. Directorio. como son las sentencias auditadas. tabla y vista) Nosotros elegiremos tabla. exhaustividad de la sentencia. Función. Vista materializada. tipo objeto. Si creamos una tabla con el usuario juanla y en la consola web vamos a “Privilegios Auditado” podemos encontrarnos un resultado parecido a este: Si necesitaramos auditar algún objeto (Vamos a partir de la tabla que acabamos de crear.

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. muy amigable y sencillo como en las demás opciones de auditoría: Como vemos las opciones que podemos dar son parecidas o las mismas de un modo u otro a cada tipo de auditoría que ofrece la consola web. vamos a hacer un update y un drop table y vemos que nos muestra: Como vemos es una manera más cómoda (pero más lenta) de hacer auditoría en nuestro sistema. la consola web de oracle nos permite auditar sentencias concretas. Eso sí. y como tal seguimos de la misma forma que en las demás opciones. vamos a ver un ejemplo con un update y un drop table de la tabla “prueba1”. 16 . una alternativa que puede sernos útil en algnos momentos para crear políticas o consultar registros.AUDITORÍA EN ORACLE SGBD Por último. vamos a “Añadir sentencia auditada” y la consola nos mostrará lo que debemos elegir.

Sign up to vote on this title
UsefulNot useful