Auditoria en BD de las Sesiones Web

22
© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Auditoría en BD de las sesiones web Bernabé Nicolás García

Transcript of Auditoria en BD de las Sesiones Web

Page 1: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Auditoría en BD de las sesiones web

Bernabé Nicolás García

Page 2: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Contenido

1.- Presentación del problema

2.- Contextos

3.- Solución

Page 3: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Presentación del problema

Auditoría Cliente servidor

Page 4: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Presentación del problema

Auditoría Web

Page 5: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Presentación del problema

Trigger base de datos

Page 6: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Contextos

http://www.um.es/atica/sql---contextos

Un contexto Oracle (o contexto de aplicación o también namespace), es algo así como una agrupación de variables globales. Oracle permite crear contextos (con el privilegio CREATE ANY CONTEXT), y dentro de cada contexto se pueden definir atributos (similares a variables globales), de forma que una vez que le asigno valor a un atributo lo tendré disponible en cualquier momento dentro de la misma sesión (incluso entre sesiones si defino el contexto como global). Otra sesión puede tener un valor diferente para el mismo atributo anterior.

Para crear un contexto, primero tengo que crear un paquete que me permita definir atributos para dicho contexto (proporcionando seguridad a la citada definición de atributos); de modo que no puedo definir atributos en un contexto ejecutando directamente DBMS_SESSION.SET_CONTEXT (obtendría un error "ORA-01031 Privilegios Insuficientes"), sino que tengo que hacerlo desde el paquete del contexto, por ejemplo:

SQL> create context ctx_prueba using pkg_ctx_prueba ACCESSED GLOBALLY;;Context created.

Page 7: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Contextos

Paquete de base de datos para la gestión de contextos

Page 8: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Solución

Modificaciones en la base de datos:

Page 9: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Solución

Modificación del Trigger de auditoría

Page 10: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Solución

Función f_usuario_auditoria. Varias aplicaciones, cada una en un Contexto diferente.

Page 11: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Solución

Función get_value.

Page 12: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Solución

Modificaciones en la aplicación Web:

Page 13: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Solución

Establecemos la variable dni del contexto en la aplicación Web.

Page 14: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Solución

Set_client_identifier

Page 15: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Solución

Set_dni

Page 16: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Solución

Obtenemos…

Page 17: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Alternativa Solución (Aún no probada)

En el POM Principal de la aplicación hay que añadir:

<properties>        <fundeweb-jpa-extend.version>1.2.6.CR1</fundeweb-jpa-extend.version></properties>

En la clase ServicioGenericoPao la declaramos como clase abstracta:

Page 18: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Alternativa Solución

Le añadimos los siguientes métodos:

protected DataSource getDataSource() { return this.dataSource;}

Page 19: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Alternativa Solución

Le añadimos los siguientes métodos:

/** * Metodo utilzado para obtener una conexion del datasource pasado como parametro, configurada con los parámetros de * identificación de la 'acción' a realizar por un 'usuario' de una 'aplicción'. * * @param dataSource * -- un DataSource del que se obtiene la conexion. * @param action * -- la acción realizada * @param application * -- la aplicación donde se realiza la acción * @param user * -- el usuario que realiza la acción * @return Connection -- una conexion JDBC. * @throws SQLException * - si se produce algun error */ protected Connection getConnectionWithClientId(DataSource dataSource, String action, String program, String user) throws SQLException { return dataSource == null ? null : OracleUtils.setClientIdToConnection(dataSource.getConnection(), action, program, user); }

Page 20: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Alternativa Solución

Le añadimos los siguientes métodos:

/** * Metodo utilzado para obtener una conexion del datasource obtenido mediante el método getDataSource(), * configurada con los parámetros de identificación de la 'acción' a realizar por un 'usuario' de una 'aplicción'. * * @param action * -- la acción realizada * @param application * -- la aplicación donde se realiza la acción * @param user * -- el usuario que realiza la acción * @return Connection -- una conexion JDBC. * @throws SQLException * - si se produce algun error */ protected Connection getConnectionWithClientId(String action, String program, String user) throws SQLException { return getDataSource() == null ? null : OracleUtils.setClientIdToConnection(getDataSource().getConnection(), action, program, user); }

Page 21: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Alternativa Solución

Ahora en las llamadas JDBC tienes que obtener la conexión con el método getConnectionWithClientId, pasándole los parámetros de la acción, aplicación y usuario.

ATENCION: Este método solo funciona con el driver OJDBC de Oracle sin DMS. En el OC4J se esta cargando el driver con DMS, por lo que este método no funciona.

Page 22: Auditoria en BD de las Sesiones Web

© 2009. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.

Fin

Gracias por vuestra atención

¿Alguna pregunta?