jueves, 15 de mayo de 2014

Auditoria en Oracle 11g

AUDITORIA EN ORACLE

VERSIÓN: 11G




  1. Auditoria informática
  2. Auditoria en Oracle
  3. Tablas y Vistas
  4. Comprobar activación de auditoria
  5. Comandos audit y noaudit
  6. Consultas de auditoria
  7. Descripción de tablas de auditoria

Auditoria informática

Consiste en recoger, agrupar y evaluar evidencias para determinar si un sistema de información salvaguarda el activo empresarial, mantiene la integridad de los datos, lleva a cabo eficazmente los fines de la organización, utiliza eficientemente los recursos, y cumple con las leyes y regulaciones establecidas.

Auditoria para Oracle

En el caso de Oracle, la auditoría es un conjunto de características que permite al administrador de la base de datos y a los usuarios hacer un seguimiento del uso de la base de datos. El administrador de base de datos puede definir la actividad de auditoría predeterminada. La información de las auditorías se almacena en el diccionario de datos, en la tabla SYS.AUD$ o en la pista de auditoría del sistema operativo (si lo permite). Lo anterior viene definido en el parámetro audit_trail
.
Se pueden auditar tres tipos de acciones: intentos de inicio de sesión, accesos a objetos y acciones de la base de datos. Cuando se realizan auditorías, la funcionalidad de la base de datos es dejar constancia de los comandos correctos e incorrectos. Esto puede modificarse cuando se configura cada tipo de auditoría.

 Tablas y Vistas

Oracle almacena en la tabla SYS.AUD$ o en la pista de auditoría del sistema operativo (si lo permite).

Existen varias vistas que se usan para ayudar a la extracción de los datos  deseado en una auditoria en esta tabla (SYS.AUD$).
  • ALL_AUDIT_POLICIES
  • ALL_AUDIT_POLICY_COLUMNS
  • ALL_DEF_AUDIT_OPTS
  • ALL_REPAUDIT_ATTRIBUTE
  • ALL_REPAUDIT_COLUMN
  • APEX_DEVELOPER_AUDIT_LOG
  • DBA_AUDIT_EXISTS
  • DBA_AUDIT_OBJECT
  • DBA_AUDIT_POLICIES
  • DBA_AUDIT_POLICY_COLUMNS
  • DBA_AUDIT_SESSION
  • DBA_AUDIT_STATEMENT
  • DBA_AUDIT_TRAIL
  • DBA_COMMON_AUDIT_TRAIL
  • DBA_FGA_AUDIT_TRAIL
  • DBA_OBJ_AUDIT_OPTS
  • DBA_PRIV_AUDIT_OPTS
  • DBA_REPAUDIT_ATTRIBUTE
  • DBA_REPAUDIT_COLUMN
  • DBA_STMT_AUDIT_OPTS
  • GV_$XML_AUDIT_TRAIL
  • KU$_AUDIT_DEFAULT_VIEW
  • KU$_AUDIT_OBJ_BASE_VIEW
  • KU$_AUDIT_OBJ_VIEW
  • KU$_AUDIT_VIEW
  • KU$_PROC_AUDIT_VIEW
  • KU$_PROCDEPOBJ_AUDIT_VIEW
  • KU$_PROCOBJ_AUDIT_VIEW
  • KU$_10_1_AUDIT_VIEW
  • MGMT$AUDIT_LOG
  • MGMT$ESA_AUDIT_SYSTEM_REPORT
  • SM$AUDIT_CONFIG
  • USER_AUDIT_OBJECT
  • USER_AUDIT_POLICIES
  • USER_AUDIT_POLICY_COLUMNS
  • USER_AUDIT_SESSION
  • USER_AUDIT_STATEMENT
  • USER_AUDIT_TRAIL
  • USER_OBJ_AUDIT_OPTS
  • USER_REPAUDIT_ATTRIBUTE
  • USER_REPAUDIT_COLUMN
  • V_$XML_AUDIT_TRAIL
Estas vistas se pueden ver ejecutando la consulta SQL:
SELECT view_name
FROM dba_views
WHERE view_name LIKE '%AUDIT%'
ORDER BY view_name
Las principales son:

- DBA_AUDIT_OBJECT: guarda la información relativa a la auditoría de

- DBA_AUDIT_SESSION: guarda la información relativa a la auditoría de los inicios de sesión de los usuarios.

- DBA_AUDIT_TRAIL: muestra la auditoría estándar (de la tabla AUD$)

- USER_AUDIT_TRAIL: muestra la auditoría estándar (de la tabla AUD$) relativa al usuario actual

- DBA_FGA_AUDIT_TRAIL: muestra información de auditoría de grano fino (obtenida de FGA_LOG$). La auditoría de grano fino (FGA) extiende la auditoría estándar y, además, captura la sentencia SQL que ha sido ejecutada.

Nota: Todo lo anterior estará condicionado al tipo de auditoría que se haya establecido para la base de datos Oracle,

Comprobar activación de auditoría

La activación de la auditoría en Oracle  viene definida por el valor del parámetro: audit_trail.

Para comprobar si la auditoría de la base de datos está activa ejecutamos el siguiente query :
select name, value
from v$parameter
where name like 'audit_trail'
Valores:

- none: desactiva la auditoría de la base de datos.


- os: activa la auditoría de la base de datos. Los sucesos auditados se escribirán en la pista de auditoría del sistema operativo, no se auditará en Oracle sino en el sistema operativo anfitrión. Esta opción funcionará dependiendo del sistema operativo.


db: activa la auditoría y los datos se almacenarán en la taba SYS.AUD$ de Oracle.

db, extended: activa la auditoría y los datos se almacenarán en la taba SYS.AUD$ de Oracle. Además se escribirán los valores correspondientes en las columnas SQLBIND y SQLTEXT de la tabla SYS.AUD$.


xml: activa la auditoría de la base de datos, los sucesos será escritos en ficheros XML del sistema operativo.


xml, extended: activa la auditoría de la base de datos, los sucesos será escritos en el formato XML del sistema operativo, además se incluirán los valores de SqlText y SqlBind.


Activa la auditoria
ALTER SYSTEM SET audit_trail = "DB" SCOPE=SPFILE;
Desactivar la auditoria
ALTER SYSTEM SET audit_trail = "NONE" SCOPE=SPFILE;
Nota: En Oracle 11g la auditoria viene activada por defecto, el valor del parámetro "audit_trail" está a "DB".

Comandos audit y noaudit

Audit

Este comando puede funcionar aunque no esté activada la auditoría de la base de datos. Pero no dejara registro alguno guardado.

Auditorías de inicio de sesión

audit session;
Nota: Auditará tanto los intentos fallidos como los aciertos.
             Sólo los intentos fallidos : audit session whenever not successful;
             Sólo los intentos fallidos : audit session whenever  successful;

Auditorías de acción

Nota: Cualquier acción que afecte a un objeto de la base de datos (tabla, enlace de base de datos, espacio de tablas, sinónimo, segmento de anulación, usuario, índice, etc.) puede auditarse
audit role; 
Nota: Este comando activará la auditoría de las acciones: create rolealter roledrop role y set role.
Auditar a un usuario al realizar la acción "update" :
audit update table by nombre_usuario;

Auditorías de objeto

Auditar las acciones de manipulación de datos sobre objetos.
Por ejemplo, para auditar los "insert" realizados sobre una  tabla:
audit insert on <TABLA> by access;

Nota: al indicar "by access" hay que tener cuidado pues registrará un suceso de auditoría por cada insert, esto puede afectar al rendimiento. De ser así siempre será mejor optar por "by session" que sólo registrará un suceso de auditoría por sesión, aunque es menos exaustivo.
Sintaxis
AUDIT { sql_statement_clause | schema_object_clause | NETWORK } [ BY { SESSION | ACCESS } ] [ WHENEVER [ NOT ] SUCCESSFUL ] ; 
  • sql_statement_clause: activa la auditoría para una sentencia SQL concreta.
  • schema_object_clause: activa la auditoría para un objeto concreto de la base de datos.
  • WHENEVER SUCCESSFUL: activa la auditoría sólo para operaciones e instrucciones SQL en objetos de esquema que se completen con éxito.
  • WHENEVER NOT SUCCESSFUL: activa la auditoría sólo para operaciones e instrucciones SQL en objetos de esquema que originen error.

Noaudit

La instrucción noaudit se utiliza para detener la actividad de auditoría que se había activado previamente con la instrucción audit.

La instrucción noaudit debe tener la misma sintaxis que la instrucción audit que queramos detener.

Por ejemplo, si hemos auditado un usuario con:
audit session by alonso;
Auditará los inicios de sesión para el usuario de Oracle "alonso", tanto los fallidos como los correctos. Para desactivar esta auditoría ejecutaremos el comando:
noaudit session by alonso;

Sintaxis

NOAUDIT { sql_statement_clause | schema_object_clause | NETWORK} [ WHENEVER [ NOT ] SUCCESSFUL ] ;  
  • sql_statement_clause: detiene la auditoria de una sentencia SQL concreta.
  • schema_object_clause: detiene la auditoría para un objeto concreto de la base de datos.
  • WHENEVER SUCCESSFUL: detiene la auditoría sólo para operaciones e instrucciones SQL en objetos de esquema que se completen con éxito.
  • WHENEVER NOT SUCCESSFUL: detiene la auditoría sólo para operaciones e instrucciones SQL en objetos de esquema que originen error.

Consultas de auditoria

  • Auditoria en inicio de sesión :
    select OS_Username Usuario_SO, Username Usuario_Oracle, Terminal ID_Terminal, DECODE (Returncode, '0', 'Conectado', '1005', 'Fallo - Null', 1017, 'Fallo', Returncode) Tipo_Suceso, TO_CHAR(Timestamp, 'DD-MM-YY HH24:MI:SS') Hora_Inicio_Sesion, TO_CHAR(Logoff_Time, 'DD-MM-YY HH24:MI:SS') Hora_Fin_Sesion from DBA_AUDIT_SESSION;
  • Auditoria por acción :
    select OS_Username Usuario_SO, 
      Username Usuario_Oracle, Terminal ID_Terminal,
      Owner Propietario_Objeto,
      Obj_Name Nombre_Objeto, 
      Action_Name Accion,
      DECODE (Returncode, '0', 'Realizado', 'Returncode') Tipo_Suceso,
      TO_CHAR (Timestamp,  'DD-MM-YY HH24:MI:SS') Hora
    from DBA_AUDIT_OBJECT;

    Descripción de tablas de auditoria

    Estructura de la tabla SYS.AUD$:
CampoTipo de datosTamañoPermite nulos
SESSIONIDNUMBER22N
ENTRYIDNUMBER22N
STATEMENTNUMBER22N
TIMESTAMP#DATE7Y
USERIDVARCHAR230Y
USERHOSTVARCHAR2128Y
TERMINALVARCHAR2255Y
ACTION#NUMBER22N
RETURNCODENUMBER22N
OBJ$CREATORVARCHAR230Y
OBJ$NAMEVARCHAR2128Y
AUTH$PRIVILEGESVARCHAR216Y
AUTH$GRANTEEVARCHAR230Y
NEW$OWNERVARCHAR230Y
NEW$NAMEVARCHAR2128Y
SES$ACTIONSVARCHAR219Y
SES$TIDNUMBER22Y
LOGOFF$LREADNUMBER22Y
LOGOFF$PREADNUMBER22Y
LOGOFF$LWRITENUMBER22Y
LOGOFF$DEADNUMBER22Y
LOGOFF$TIMEDATE7Y
COMMENT$TEXTVARCHAR24000Y
CLIENTIDVARCHAR264Y
SPARE1VARCHAR2255Y
SPARE2NUMBER22Y
OBJ$LABELRAW255Y
SES$LABELRAW255Y
PRIV$USEDNUMBER22Y
SESSIONCPUNUMBER22Y
NTIMESTAMP#TIMESTAMP(6)11Y
PROXY$SIDNUMBER22Y
USER$GUIDVARCHAR232Y
INSTANCE#NUMBER22Y
PROCESS#VARCHAR216Y
XIDRAW8Y
AUDITIDVARCHAR264Y
SCNNUMBER22Y
DBIDNUMBER22Y
SQLBINDCLOB4000Y
SQLTEXTCLOB4000Y
OBJ$EDITIONVARCHAR230Y

No hay comentarios:

Publicar un comentario