1. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
AUDITORIA ORACLE 10G
La auditoría es una de las funciones del servidor de Oracle, con la finalidad de proporcionar la
capacidad de rastrear el flujo de información dentro de una base de datos, incluidos los intentos
de conexión, las sentencias DDL, y DML.
Tenemos la opción de seleccionar los acontecimientos que se desee monitorear, cabe recalcar que
una serie de eventos en Oracle son auditados por defecto, por ejemplo: inicio, lugar de cierre, y los
intentos de conexión a la base de datos con privilegios administrativos. Usted puede optar por
especificar las opciones personalizadas de auditoría para controlar otros eventos.
Configuración de Auditoria:
Para la auditoria en Oracle 10g debemos tomar en cuenta ciertos parámetros, los cuales los
podemos visualizar utilizando el comando show parameter audit, para lo cual debemos estar
logeados con un usuario que tenga los suficientes privilegios, utilizamos el usuario sysdba.
SHOW PARAMETER AUDIT;
Para habilitar la auditoría, se debe fijar el parámetro AUDIT_TRAIL que se encuentra en el
fichero init.ora. Los registros de auditoría se almacenan en la tabla SYS.AUD$ o bien su gestión se
deja al SO. Cuando se decide utilizar la tabla SYS.AUD$ esta debe revisarse periódicamente, por si
hiciera falta truncarla debido a que su aumento de tamaño puede causar problemas de espacio en
el tablespace system.
Haremos una descripcion de cada parametro que utiliza audit_trail:
AUDIT_TRAIL = { none | os | db | db,extended | xml | xml,extended }
• None: deshabilita la auditoria
• Db: habilita la auditoria, escribiendo en la tabla SYS.AUD$
Página 1
2. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
• Os: habilita la auditoria, dejando al SO su gestión
• .db,extended – como db, pero el SQL_BIND y el SQL_TEXT tienen columnas llenas.
• xml- la auditoria esta activada, con todos los archivos de auditoría almacenados en
formato xml en los archivos del SO.
• xml,extended - como xml, pero el SQL_BIND y el SQL_TEXT tiene columnas llenas.
En Oracle 10g Realease 1, db_extended se utiliza en lugar de db,extended. La opción XML es nueva
en esta versión de Oracle 10g.
El parámetro estático AUDIT_SYS_OPERATIONS activa o desactiva la auditoría de las operaciones
emitidos por los usuarios que se conectan con los privilegios de SYSDBA o SYSOPER, incluido el
usuario SYS. Todos los registros de auditoría se escriben en el sistema operativo de auditoría.
El parámetro AUDIT_FILE_DEST especifica el directorio utilizado para la pista de auditoría cuando
se active os y xml se utilicen estas opciones. También es la ubicación de auditoría obligatoria para
todas las especificaciones para el parámetro AUDIT_SYS_OPERATIONS.
Para habilitar la auditoría directa y los registros de auditoría a la base de datos debemos hacer lo
siguiente:
SQL> ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE;
SQL> SHUTDOWN
SQL> STARTUP
Para una mejor comprensión haremos el siguiente ejemplo primero creamos un nuevo usuario
llamado AUDIT_TEST.
CONNECT sys/password AS SYSDBA
CREATE USER audit_test IDENTIFIED BY password
Página 2
3. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
Le damos los respectivos privilegios al usuario:
GRANT connect TO audit_test;
GRANT create table, create procedure TO audit_test;
Estas son todas las operaciones de auditoría para el usuario audit_test, para lo cual utilizamos el
comando AUDIT (activa la auditoría sobre algún objeto), en el caso que se desee desactivar la
auditoria utilizamos NOAUDIT.
CONNECT sys/password AS SYSDBA
AUDIT ALL BY audit_test BY ACCESS;
AUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE, DELETE TABLE BY audit_test BY ACCESS;
AUDIT EXECUTE PROCEDURE BY audit_test BY ACCESS;
AUDIT CONNECT;
Tomando en cuenta que la tabla para monitorear el seguimiento de auditoría es dba_audit_trail
(con el usuario sys).
Página 3
4. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
Vamos a crear una tabla y un registro en la misma para una mejor ilustración de la auditoria.
Página 4
5. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
Para apreciar el contenido de la tabla $sys.aud, tenemos dos opciones ver directamente su
contenido o a través de las siguientes vistas, con la siguiente sentencia:
SELECT view_name
FROM dba_views
WHERE view_name LIKE 'DBA%AUDIT%'
ORDER BY view_name;
Las tres principales vistas son:
• DBA_COMMON_AUDIT_TRAIL : En Oracle 10gR2, el nivel de FGA y vistas de auditoría se
han combinado para facilitar la visualización en DBA_COMMON_AUDIT_TRAIL.
Además, ahora es posible escribir las pistas de auditoría de información, ya sea
en XML o ampliar los formatos XML a archivos externos. Una nueva vista de Oracle 10g, V$
XML_AUDIT_TRAIL, pueden consultarse directamente para ver el contenido de la pista de
auditoría generada en un archivo XML.
DBA_AUDIT_TRAIL
La vista más básica de la base de datos de auditoría es provista por el
DBA_AUDIT_TRAIL (AUD$) contiene una amplia variedad de información. Para visualizarlo
utilizaremos la siguiente consulta:
SELECT username, extended_timestamp, owner, obj_name, action_name
FROM dba_audit_trail
Página 5
6. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
WHERE owner = 'AUDIT_TEST'
ORDER BY timestamp;
Cuando la pista de auditoría está dirigida a un archivo de formato XML OS, se puede leer con un
editor de texto o a través de la V$XML_AUDIT_TRAIL, contiene información similar a la
DBA_AUDIT_TRAIL
Página 6
7. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
SELECT db_user, extended_timestamp, object_schema, object_name, action
FROM v$xml_audit_trail
WHERE object_schema = 'AUDIT_TEST'
ORDER BY extended_timestamp;
La auditoría debe ser planificada cuidadosamente para controlar la cantidad de información que
se generará con la misma, con el tiempo se puede mejorar el nivel de auditoría para que coincida
con las necesidades.
La modificación de los datos en la pista de auditoría sí puede lograr utilizando la siguiente
declaración:
AUDIT INSERT, UPDATE, DELETE ON sys.aud$ BY ACCESS;
Página 7
8. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
DBA_FGA_AUDIT_TRAIL
Fine-grained auditing only (from FGA_LOG$) a través de una paquete llamado DBMS_FGA, este
paquete permite aplicar la auditoría en un nivel extremadamente bajo de granularidad en
cualquier tabla en la base de datos a través de un objeto de base de datos llamada política
de FGA. Una política asegura que la auditoría sólo se realizará cuando se haga referencia a una o
más columnas en una tabla o vista. Por ejemplo, se puede decir que se ejecute una auditoría a la
sentencia SELECT solo cuando haga referencia a una o más columnas especificadas.
También se puede configurar una política FGA para que la auditoría sólo se active cuando
un subconjunto específico de datos haya sido afectado. Por ejemplo, se puede hacer un trigger
para iniciar una auditoría sólo cuando una fila de datos sea cambiada a través de un UPDATE que
satisfaga los criterios especificados. Oracle 10g también permite la especificación de una condición
NULL si no hay condiciones para aplicar.
FGA es independiente de AUDIT_TRAIL, todos los registros de auditoría se almacenan en tabla
FGA_LOG$, en lugar de la tabla AUD$.
El siguiente ejemplo muestra como se utiliza FGA:
Nos logeamos con el usuario audit_test, luego creamos una tabla con sus respectivos campos, e
insertamos dos o las filas que se desee:
CONN audit_test/password
CREATE TABLE emp (empno NUMBER(4) NOT NULL, ename VARCHAR2(10),
job VARCHAR2(9), mgr NUMBER(4), hiredate DATE,
sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2));
INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Tim', 1);
INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Larry', 50001);
COMMIT;
Página 8
9. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
Ahora vamos a crear una política de auditoría, la misma que audite los sueldos superiores a 50000.
conn / as sysdba;
begin
dbms_fga.add_policy(
object_schema=>’AUDIT_TEST’,
object_name => 'EMP',
policy_name => 'SALARY_CHK_AUDIT',
audit_condition => 'SAL > 50000',
audit_column => 'SAL'
);
end;
/
(Presenta errores..)
Página 9
10. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
Ahora manipulamos la tabla emp para saber si la auditoria esta funcionando:
conn audit_test/password
select sal from emp where ename = 'tim';
select sal from emp where ename = 'larry';
conn sys/password as sysdba
select sql_text
from dba_fga_audit_trail;
(no se selecciona porque el procedimiento creado anteriormente no se creó )
Página 10
11. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
El paquete DBMS_FGA contiene los siguientes procedimientos:
• ADD_POLICY
• DROP_POLICY
• ENABLE_POLICY
• DISABLE_POLICY
FGA en Oracle9i se limitó en queries, pero en Oracle 10g se ha ampliado para incluir sentencias
DML, como se demuestra el siguiente ejemplo:
conn sys/password as sysdba
truncate table fga_log$;
select sql_text from dba_fga_audit_trail;
Aplicar la política para la columna sal de la table emp
begin
dbms_fga.add_policy(
object_schema => 'audit_test',
object_name => 'emp',
policy_name => 'sal_audit',
audit_condition => null, -- equivalent to true
audit_column => 'sal',
statement_types => 'select,insert,update,delete');
end;
/
Comprobación de la política anteriormente aplicada:
conn audit_test/password
select * from emp where empno = 9998;
insert into emp (empno, ename, sal) values (9998, 'bill', 1);
update emp set sal = 10 where empno = 9998;
delete emp where empno = 9998;
rollback;
Página 11
12. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA
GRUPO DE DESARROLLO DE SOFTWARE
AUDITORIA EN ORACLE 10g
Verificando los datos en audit trail.
conn sys/password as sysdba
select sql_text from dba_fga_audit_trail;
Elimanción de la politica de auditoria
conn sys/password as sysdba
begin
dbms_fga.drop_policy(
object_schema => 'audit_test',
object_name => 'emp',
policy_name => 'sal_audit');
end;
/
Página 12