TRAZABILIDAD DE ACCESOS A FICHEROS DE ALTO NIVEL DE SEGURIDAD Fecha 01/09/2008 02/12/2009 17/05/2010 Versión 1.0 1.1 1.2 Cambios Versión Inicial Campos obligatorios en trazabilidad Inclusión apartado Anexo V. En Documentum 1 TABLA DE CONTENIDO 1 TABLA DE CONTENIDO ................................................................................... 2 2 Introducción ...................................................................................................... 4 3 Objetivo.............................................................................................................. 4 4 Alcance .............................................................................................................. 4 5 Dónde se almacenan los accesos a datos de ALTO nivel de seguridad? . 5 6 Trazabilidad de los accesos a datos de ALTO nivel de seguridad ............... 9 7 6.1 Trazabilidad de las Consultas y Listados. ....................................................... 10 6.2 Trazabilidad de las actualizaciones (inserts, updates, deletes)................... 10 Ejemplos de implantación en los distintos entornos de desarrollo ........... 11 7.1 Ejemplo de implantación en desarrollos Forms.............................................. 11 7.2 Ejemplo de implantación en desarrollos Pro*C............................................... 12 7.3 Ejemplo de implantación en desarrollos Delphi (1.0 , 3.0 , 5.0)...................... 14 8 Análisis de trazas erróneas en Sistemas con tratamiento de ficheros de nivel alto.................................................................................................................. 16 9 ANEXOS........................................................................................................... 18 9.1 Anexo I. Estructura de tabla de almacenamiento de accesos....................... 18 9.2 Anexo II. Package estándar de envío y almacenamiento de trazas ............... 20 9.3 Anexo III. Modelo de trigger after delete, update o insert............................... 24 9.3.1 9.3.2 9.4 Ejemplo 1:........................................................................................................................ 24 Ejemplo 2:........................................................................................................................ 26 Anexo IV. En Java.............................................................................................. 28 9.4.1 Fichero de Cofiguración .................................................................................................. 28 9.4.2 Objetos requeridos en base de datos para realizar la trazabilidad en éste tipo de aplicaciones.................................................................................................................................. 29 9.4.3 Habilitar paquete estandar de envío de trazas ............................................................... 31 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.5.6 Anexo V. En Documentum ................................................................................ 36 Acceso con usuario nominal. .......................................................................................... 36 Acceso con usuario no nominal. ..................................................................................... 36 Desarrollos Java internos................................................................................................ 36 Paquete DOCU_PACK_LOG. ......................................................................................... 36 Formato de la traza. ........................................................................................................ 37 Integración de auditoría................................................................................................... 37 9.6 Anexo VI. Tratamiento y explotación de la información de ‘traza’ almacenada en tablas Oracle por aplicación SGUR antigua (FORMS)........................................... 37 9.6.1 9.6.2 9.6.3 9.6.4 Listado de Accesos realizados en un intervalo de tiempo por Fecha y hora.................. 38 Listado de Accesos realizados por un usuario en un intervalo de tiempo. ..................... 39 Listado de Accesos realizados a los datos de un interesado en un intervalo de tiempo 39 Listado de Accesos realizados por proceso en un interesado en un intervalo de tiempo 40 9.7 Anexo VII. Tratamiento y explotación de la información de ‘traza’ almacenada en tablas Oracle por aplicación SGUR nueva (Java-Web) .................... 41 9.8 Anexo VII. Explotación de la información por la nueva aplicación SGUR (Java-Web)..................................................................................................................... 41 2 Introducción El REAL DECRETO 1720/2007, de 21 de diciembre, por el que se aprueba el Reglamento de desarrollo de la Ley Orgánica 15/1999, de 13 de diciembre, de protección de datos de carácter personal regula en su articulado la necesidad de establecer, para los ficheros de nivel alto, un registro de accesos a los datos que éstos contienen. 3 Objetivo El objeto de la presente instrucción técnica es el de establecer las pautas de programación concretas orientadas al desarrollo evolutivo o correctivo de aquellos sistemas de información de la Comunidad de Madrid que precisen de la implantación de mecanismos de trazabilidad y registro de los accesos que realicen los usuarios a ficheros que contengan datos personales de nivel alto. Representa un conjunto de instrucciones válido para cualquier tipo de aplicación con independencia del entorno de desarrollo que se haya utilizado: Java, Oracle Forms, Pro*C, Delphi (3.0, 5.0), etc. Este documento es de aplicación para todas las aplicaciones desarrolladas con Oracle 4 Alcance Este conjunto de instrucciones afecta a todos los Sistemas de Información de la Comunidad de Madrid, que estén dentro del ámbito de responsabilidad de la Agencia de Informática y Comunicaciones de la Comunidad de Madrid, que realicen o permitan realizar cualquier tipo de tratamiento de los datos de carácter personal contenidos en ficheros de nivel alto. Las pautas establecidas en el presente documento son de aplicación en las siguientes dos situaciones: 1) Durante las fases iniciales del ciclo de vida del software de todo Sistema de Información o Aplicativo nuevo que vaya a tratar ficheros con datos de carácter personal clasificados de nivel alto, y ,… 2) En aquellos Sistemas que, estando en producción, se encuentren en las mismas circunstancias que los anteriores. En este caso deberán ser modificados tanto desde un rediseño funcional del Sistema de Información como del desarrollo o programación de las modificaciones identificadas. Se garantizará de esta manera la adecuación de sus mecanismos internos, la recuperación de la trazabilidad de los accesos a los datos y la explotación posterior, a través de SGUR, de la información generada. ___________________________________________________________________ ________ Página 4 5 Dónde se almacenan los accesos a datos de ALTO nivel de seguridad? El “trace” de los accesos realizados a datos de alto nivel de seguridad se guardará en tablas específicas en la base de datos bajo la cual se ejecuta la aplicación. La información de estas tablas posteriormente podrá ser explotada mediante la aplicación SGUR antigua (GLIS) o SGUR_WEB (java nueva. Consultar anexos) La información que se envía al proceso de recogida de este tipo de información se realizará mediante la utilización de unos caracteres de limitación de campo, de este tratamiento se ocupa un paquete específico que se creará para cada aplicación y que se verá a detalle en el Anexo II. Package estándar de envío y almacenamiento de trazas La estructura de los datos que se almacenan se define en las siguientes tablas: 1.- Tabla de descripción de campos Atributo Descripción DSDBNAME Nombre de la Base de Datos a la que se accede (nivel2, decebtrl, sigp, etc.). (*1) DSMACHINE Máquina en la que se encuentra la Base de datos (icm45, etc.) (*1) COD_APLICACION Es el código con el que se da de alta el proyecto en POAPS y en Midax, cuando este se inicializa. COD_USUARIO Login del usuario que realiza el acceso. (*1) FCACCESO Fecha y hora en la que se realiza el Acceso a los datos. (*1) DSFICH_LOGICO Nombre del Fichero inscrito en el registro de la APD CDTPOPER_LOGICO A --> Alta. B --> Baja M --> Modificación C --> Consulta L --> Listado AC --> Actualización (Modificación de carácter genérico). CDTPACCESO_LOGICO I --> Acceso individual. M --> Acceso masivo DSTABLA_FISICA Nombre de la Tabla Física a la que se accede para realizar la actualización o consulta. CDTPOPER_FISICA A --> Alta. ___________________________________________________________________ ________ Página 5 B --> Baja M --> Modificación C --> Consulta CDCLAVE CDCLAVE_VALOR CDIDENT CDIDENTDUP Se almacenará los nombres de los campos de la PK de la tabla. El tamaño de este campo es de 250 caracteres, si el nombre de las columnas fuese superior se podrán acortar dichos nombres procurando que se pueda identificar de que campos se trata. Si la PK está compuesta por varios campos se separaran sus nombres por el carácter ^ Ej.: CD_NIF^CD_DEPTO^CD_CONTRATO Se informará con el valor de la PK del registro correspondiente. El tamaño de este campo es de 750 caracteres, si la concatenación de los valores de la PK fuese superior se almacenarán solamente los primeros 40 caracteres. La información completa se podrá obtener de otros campos de la traza. Si la PK es compuesta por varios campos se separaran sus valores por el carácter ^ Ejemplo: 12345678G^346^08/38475894 En este campo se introducirá el NIF, CIF, Pasaporte, o número de documento que identifica a la persona de la cual se están solicitando los datos de nivel alto. Indicador de duplicidad del código de identificación. Si hay dos códigos idénticos se grabará ‘SI’ En caso contrario se grabará null. DSTERMINAL Terminal desde el que se realiza el acceso (*1) CDPROCESO Valor que identifica la operativa que desencadena la generación de la traza. Ej. ALTSINDC, APLS0011 etc. Este código debe ser el mismo que: se defina en el Análisis Funcional se implemente en la Plantilla de Requerimientos SGUR para la identificación de Etiqueta Fichero. DSPROCESO Descripción de la operativa que desencadena la generación de la traza Ej. ‘Alta de interviniente’, ‘Consulta de empleado con sindicato’ DSPROGRAMA Programa desde el que se realiza el acceso. (*1) DSFICH_FISICO Nombre del Fichero Físico de impresión, descarga, etc. DSIMPRESORA Identificación de la impresora por la que se imprime el listado. DSSQL Sentencia SQL que se ejecuta para realizar la acción sobre los datos de alto nivel. Si el proceso que desencadena la traza es una consulta o listado que devuelve varios registros se almacenará la sentencia SQL. En el caso que dicha sentencia sea muy larga se dará prioridad a la parte where. Sería recomendable, en este caso, almacenar los parámetros por los que se realiza la búsqueda en los campos DSPARAM_X y ___________________________________________________________________ ________ Página 6 DSPARAM_X_VALOR. DSURL Dirección URL DSPARAM_1 Masivos. Criterio selección. DSPARAM_1_VALOR Masivos. Criterio selección. DSPARAM_2 Masivos. Criterio selección. DSPARAM_2_VALOR Masivos. Criterio selección. DSPARAM_3 Masivos. Criterio selección. DSPARAM_3_VALOR Masivos. Criterio selección. DSPARAM_4 Masivos. Criterio selección. DSPARAM_4_VALOR Masivos. Criterio selección. DSPARAM_5 Masivos. Criterio selección. DSPARAM_5_VALOR Masivos. Criterio selección. DSPARAM_6 Masivos. Criterio selección. DSPARAM_6_VALOR Masivos. Criterio selección. DSPARAM_7 Masivos. Criterio selección. DSPARAM_7_VALOR Masivos. Criterio selección. DSPARAM_8 Masivos. Criterio selección. DSPARAM_8_VALOR Masivos. Criterio selección. DSPARAM_9 Se graba el literal: ‘CENPROP’ En la traza se graba el valor sin comillas DSPARAM_9_VALOR Código de Centro Directivo, Órgano Judicial, Departamento, etc. al que pertenecen los datos sobre los que se realiza el acceso. DSPARAM_10 Se graba el literal: ‘CENDIR’ En la traza se graba el valor sin comillas DSPARAM_10_VALOR DSOBSERV Código de Centro Directivo, Órgano Judicial, Departamento, etc., al que pertenece el usuario que realiza el acceso a los datos de Nivel Alto. En el supuesto de que el valor de este atributo no esté embebido en el código de la aplicación se deberá proceder del siguiente modo: 1. Definir el código en la fase de Análisis Funcional 2. Incluir en este atributo el valor “genérico” definido en la fase de análisis o el correspondiente al Centro Directivo Propietario. En el segundo caso, el Responsable Funcional que revise la trazabilidad debe saber que el control habilitado para identificar usuarios que acceden a datos de otros centros no estará disponible en SGUR. Texto Libre de Observaciones ___________________________________________________________________ ________ Página 7 (*1) Este dato es cumplimentado automáticamente por el package standard 2.- Tabla de detalle de los campos Nombre de Atributo Nombre de Columna Tipo de dato Obligatorio Base de Datos DSDBNAME VARCHAR2(20) SI Máquina DSMACHINE VARCHAR2(20) SI Código de Aplicación COD_APLICACION VARCHAR2(12) SI Código de Usuario COD_USUARIO VARCHAR2(12) SI Fecha y Hora de Acceso FCACCESO DATE SI Fichero Lógico de datos DSFICH_LOGICO VARCHAR2(40) SI Tipo de Operación que se realiza sobre la tabla Lógica CDTPOPER_LOGICO VARCHAR2(2) SI Tipo de Acceso al Fichero Lógico de datos CDTPACCESO_LOGICO VARCHAR2(2) SI Tabla Física accedida DSTABLA_FISICA VARCHAR2(30) NO Tipo de Operación que se realiza sobre la tabla Física CDTPOPER_FISICA VARCHAR2(2) Clave de Acceso CDCLAVE VARCHAR2(250) Valor Clave de Acceso. CDCLAVE_VALOR VARCHAR2(750) Código de Identificación CDIDENT VARCHAR2(15) NO Duplicado Identificación CDIDENTDUP VARCHAR2(2) NO Terminal DSTERMINAL VARCHAR2(40) NO Código del Proceso CDPROCESO VARCHAR2(10) SI Descripción del Proceso DSPROCESO VARCHAR2(60) SI Programa DSPROGRAMA VARCHAR2(50) NO Fichero Físico de impresión, descarga, etc. DSFICH_FISICO VARCHAR2(100) NO Impresora DSIMPRESORA VARCHAR2(20) NO Sentencia SQL DSSQL VARCHAR2(2000) NO Dirección URL DSURL VARCHAR2(140) NO Parámetro 1 - Criterio DSPARAM_1 VARCHAR2(20) NO NO NO NO ___________________________________________________________________ ________ Página 8 Parámetro 1 - Valor DSPARAM_1_VALOR VARCHAR2(40) NO Parámetro 2 - Criterio DSPARAM_2 VARCHAR2(20) NO Parámetro 2 - Valor DSPARAM_2_VALOR VARCHAR2(40) NO Parámetro 3 - Criterio DSPARAM_3 VARCHAR2(20) NO Parámetro 3 - Valor DSPARAM_3_VALOR VARCHAR2(40) NO Parámetro 4 - Criterio DSPARAM_4 VARCHAR2(20) NO Parámetro 4 - Valor DSPARAM_4_VALOR VARCHAR2(40) NO Parámetro 5 - Criterio DSPARAM_5 VARCHAR2(20) NO Parámetro 5 - Valor DSPARAM_5_VALOR VARCHAR2(40) NO Parámetro 6 - Criterio DSPARAM_6 VARCHAR2(20) NO Parámetro 6 - Valor DSPARAM_6_VALOR VARCHAR2(40) NO Parámetro 7 - Criterio DSPARAM_7 VARCHAR2(20) NO Parámetro 7 - Valor DSPARAM_7_VALOR VARCHAR2(40) NO Parámetro 8 - Criterio DSPARAM_8 VARCHAR2(20) NO Parámetro 8 - Valor DSPARAM_8_VALOR VARCHAR2(40) NO Parámetro 9 - Criterio DSPARAM_9 VARCHAR2(20) SI Parámetro 9 - Valor DSPARAM_9_VALOR VARCHAR2(40) SI Parámetro 10 - Criterio DSPARAM_10 VARCHAR2(20) SI Parámetro 10- Valor DSPARAM_10_VALOR VARCHAR2(40) SI Observaciones DSOBSERV VARCHAR2(256) NO Campos que se rellenan automáticamente por el package Standard: Base de Datos, Máquina, Código de Usuario, Fecha y Hora de Acceso, Terminal , Programa. En el Anexo I. Estructura de tabla de almacenamiento de accesos se puede ver la estructura de la tabla bajo la cual se almacena esta información en la base de datos. 6 Trazabilidad de los accesos a datos de ALTO nivel de seguridad ___________________________________________________________________ ________ Página 9 A continuación pasamos a describir la solución propuesta para la trazabilidad de los accesos realizados por los usuarios a datos de nivel de seguridad ALTO. Dicha solución es válida para cualquier tipo de Aplicación Oracle, independientemente del entorno de desarrollo utilizado: Java, Oracle Forms, Pro*C, Delphi (3.0, 5.0), etc 6.1 Trazabilidad de las Consultas y Listados. A nivel de programación cuando se realice el acceso a los datos considerados de nivel de seguridad ALTO. 1.- Generar una cadena del registro de log con caracteres delimitadores (formato sqlunload de ICM). Este proceso se realizará mediante la ejecución de la función: - STANDARD_PACK_LOG.CREAR_REG_LOG almacenada en el núcleo de Oracle. Ésta función además envia el registro de log generado en el punto anterior a un PIPE genérico –TRAZ_PIPE-(cuya información es almacenada en la SGA de Oracle a espera de un proceso que la recoja) Internamente ejecutando la función. ENVIAR_REG_LOG 2.- Tratar la información enviada al PIPE. Este proceso se realizará mediante la ejecución de un procedimiento general y común a todas las aplicaciones: - TRAZ_PROC_RECOGE_LOG (que se encuentra siempre en escucha) encargado de almacenar en tabla Oracle la información transferida al PIPE (TRAZ_PIPE). Por lo tanto es necesario crear un paquete por aplicación similar al que podemos ver en el Anexo II. Package estándar de envío y almacenamiento de trazas del que se partirá como código base y que se llamara como: - XXXX_PACK_LOG (siendo XXXX el código de la aplicación bajo la cual se crea el PIPE) Este paquete está constituido por dos funciones: - CREAR_REG_LOG, con los parámetros recibidos crea una cadena y la envía al PIPE de tratamiento de esta información. - ENVIAR_REG_LOG, ejecuta la función propia de envío de información al PIPE. (Ésta función es llamada internamente por la función CREAR_REG_LOG) 6.2 Trazabilidad de las actualizaciones (insert s, update s, delete s) Para no tener que modificar ninguna línea de código en las actuales aplicaciones, se propone crear un Trigger AFTER DELETE, UPDATE, INSERT asociado a cada una de las tablas que contengan datos considerados de nivel de seguridad ALTO. Dicho Trigger llamará internamente a la función XXXX_PACK_LOG.CREAR_REG_LOG, que tal y como se indicó anteriormente crea y envía al PIPE de tratamiento de Log el registro de Trace. En el Anexo III. Modelo de trigger after delete, update o insert se puede ver un modelo de como pueden codificarse dichos Triggers. ___________________________________________________________________ ________ Página 10 Es posible que en determinadas aplicaciones sea conveniente crear estos triggers de forma que se lancen únicamente cuando se ha modificado algún dato de especial interés, como pueden ser: diagnósticos, anotaciones médicas, etc. Con la creación de estos Triggers tendremos el trace de todos las actualizaciones que se realicen en las tablas de nivel de seguridad ALTO, bien desde las aplicaciones (Forms, Pro*C, Delphi, etc.), o bien por operaciones realizadas directamente desde SQL u otra herramienta de acceso directo a la base de datos. 7 Ejemplos de implantación en los distintos entornos de desarrollo A continuación vamos a mostrar ejemplos de como se implementaría la solución propuesta en el punto anterior, en los distintos entornos de desarrollo (Forms, Pro*C, Delphi), 7.1 Ejemplo de implantación en desarrollos Forms declare ....... w_status NUMBER; begin ....... Aquí va el código particular de la aplicación para acceder a los Datos de un interesado ....... --------------------------------------------------------------------- Generar y enviar registro de Log a PIPE. -------------------------------------------------------------------w_status := slab_pack_log.crear_reg_log ( 'SLAB' 'FICHERO DE ANOTACION' , 'C' , 'I' , 'SLAB_EMP_ANOTACION' , 'C' , 'NIF' ,0 to_char (:b10.CDNIFNRO) || :b10.CDNIFDUP , to_char (:b10.CDNIFNRO) , :b10.CDNIFDUP , 'ANOTHCL' , 'Anotaciones en Historial Cínico' , 'FICHERO DE ANOTACION' , ‘ICMPRXX’, -- impresora 'select * from .............................................' , null, --URL ‘PAR1’ :b10.CDFICH, ___________________________________________________________________ ________ Página 11 null, null, null, null, null, null, null, null, null, null, null, null, null, null, ‘CENPROP’, ‘CD_AA’ , ‘CENDIR’, ‘CD_BB’ , ‘Observaciones’ ); -if w_status != 0 then message ('Se ha producido un error en el envío del registro' || 'de Log. Error: ' || to_char (w_status) || '. Avisar a ICM'); end if; end; 7.2 Ejemplo de implantación en desarrollos Pro*C void Ontener_Datos_Interesado () { EXEC SQL BEGIN DECLARE SECTION; ....... int status; EXEC SQL END DECLARE SECTION; ....... Aquí va el código particular de la aplicación para acceder a los Datos de un interesado ....... /* */ /* -- Generar y enviar registro de Log a PIPE. /* */ EXEC SQL EXECUTE BEGIN :status := slab_pack_log.crear_reg_log ( 'SLAB' , 'FICHERO DE ANOTACION' , -- */ ___________________________________________________________________ ________ Página 12 'C' , 'I' , 'SLAB_EMP_ANOTACION' , 'C' , 'NIF' , to_char (:b10.CDNIFNRO) || :b10.CDNIFDUP , to_char (:b10.CDNIFNRO) , :b10.CDNIFDUP , 'ANOTHCL' , 'Anotaciones en Historial Clínico' , 'FICHERO DE ANOTACION' , 'ICMPRXX', 'select * from .............................................' , null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, ‘CENPROP’, ‘CD_AA’ , ‘CENDIR’, ‘CD_BB’ , ‘Observaciones’ ); END; END EXEC; if (status != 0) { fprintf(stderr, "\nError al enviar el registro de Log. Error = %d\n?, status); exit(1); } } ___________________________________________________________________ ________ Página 13 Nombre del manual NIVELES DE SOFTWARE 7.3 Ejemplo de implantación en desarrollos Delphi (1.0 , 3.0 , 5.0) Se ha creado un componente (llamado TLOG) para el tratamiento común del Log de Seguridad en todas las Aplicaciones Delphi. Dicho componente residiría la librería de componentes de ICM. Propiedades: Implementación: A continuación pasamos a mostrar un ejemplo de como se hace referencia al componente desde un Form: procedure TFchcl.ObtenerDatosEmpleado(Sender: TObject); var ....... begin ....... Aquí va el código particular de la aplicación para acceder a los Datos del empleado ....... //--------------------------------------------------------------------//-- Control de Seguridad. -//--------------------------------------------------------------------FMenu.Log1.ClaveAcceso := 'NIF'; FMenu.Log1.ClaveAccesoValor := FloatToStr(Vcdnifnro) + Vcdnifctrl; FMenu.Log1.CodIdent := FloatToStr(Vcdnifnro) + Vcdnifctrl; FMenu.Log1.CodIdentDup := Vcdnifdup; FMenu.Log1.FicheroLogico.Nombre := 'SLAB_EMP'; FMenu.Log1.Proceso := Caption; FMenu.Log1.FicheroLogico.TipoAcceso := Log_Individual; FMenu.Log1.FicheroLogico.TipoOperacion := Log_Consulta; Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 14 Nombre del manual NIVELES DE SOFTWARE FMenu.Log1.TablaFisica.Nombre := 'SLAB_EMP'; FMenu.Log1.TablaFisica.TipoOperacion := Log_Consulta; FMenu.Log1.Crea_Log; ....... end; Se ha creado un componente (llamado TLOG) para el tratamiento común del Log de Seguridad en todas las Aplicaciones Delphi. Dicho componente residiría la librería de componentes de ICM. Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 15 Nombre del manual NIVELES DE SOFTWARE 8 Análisis de trazas erróneas en Sistemas con tratamiento de ficheros de nivel alto. Se presenta en este apartado un ejemplo para el seguimiento y consulta de trazas erróneas. Se considera una traza errónea aquella que no ha podido ser registrada en el sistema de trazabilidad de forma adecuada debido generalmente al uso incorrecto de la función CREAR_REG_LOG la hora de enviar los parametros de entrada, estas trazas quedan registradas en la tabla TRAZ_ERR_LOG_ACCESOS Los usuarios de la herramienta serán, principalmente, aquellos Grupos Técnicos que realicen mantenimiento de aplicaciones de la Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales (DAMADI). Una vez implementada la trazabilidad de un sistema de información y durante la fase de traspaso de conocimientos a los responsables de su mantenimiento, el Responsable Funcional del sistema informará a aquellos, de la obligación de revisar mensualmente las trazas que se graben erróneamente. Para ello deberán consultar la tabla TRAZ_ERR_LOG_ACCESOS, que tiene definida visibilidad pública. En este ejemplo se analizan las trazas cuyo código de aplicación es ‘SFFZ’ (se supone que el código de aplicación se está grabando correctamente). select * from traz_err_log_accesos WHERE substr(registro, instr(registro,'^',1,5)+1, instr(registro,'^',1,6)-instr(registro,'^',1,5)-1) = 'SFFZ' En las trazas erróneas se almacena de forma encapsulada toda la información de la traza en el campo TRAZ_ERR_LOG_ACCESOS.REGISTRO, para desencapsular y consultar los datos de la tra za se puede utilizar la siguiente sentencia SQL: select mensaje_err , substr(registro, instr(registro,'^',1,1) +1, instr(registro,'^',1,2)-instr(registro,'^',1,1)-1) as DSDBNAME , substr(registro, instr(registro,'^',1,3) +1, instr(registro,'^',1,4)-instr(registro,'^',1,3)-1) as DSMACHINE , substr(registro, instr(registro,'^',1,5)+1, instr(registro,'^',1,6)-instr(registro,'^',1,5)-1) as COD_APLICACION , substr(registro, instr(registro,'^',1,7)+1, instr(registro,'^',1,8)-instr(registro,'^',1,7)-1) as COD_USUARIO , to_date( substr(registro, instr(registro,'^',1,9)+1, instr(registro,'^',1,10)-instr(registro,'^',1,9)1),'YYYY/MM/DD HH24:mi:ss') as FCACCESO , substr(registro, instr(registro,'^',1,11)+1, instr(registro,'^',1,12)-instr(registro,'^',1,11)-1) as DSFICH_LOGICO , substr(registro, instr(registro,'^',1,13)+1, instr(registro,'^',1,14)-instr(registro,'^',1,13)-1) as CDTOPERACION Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 16 Nombre del manual NIVELES DE SOFTWARE , substr(registro, instr(registro,'^',1,15)+1, instr(registro,'^',1,16)-instr(registro,'^',1,15)-1) as CDTPACCESO_LOGICO , substr(registro, instr(registro,'^',1,17)+1, instr(registro,'^',1,18)-instr(registro,'^',1,17)-1) as DSTABLA_FISICA , substr(registro, instr(registro,'^',1,19)+1, instr(registro,'^',1,20)-instr(registro,'^',1,19)-1) as CDTPOPER_FISICA , substr(registro, instr(registro,'^',1,21)+1, instr(registro,'^',1,22)-instr(registro,'^',1,21)-1) as CDCLAVE , substr(registro, instr(registro,'^',1,23)+1, instr(registro,'^',1,24)-instr(registro,'^',1,23)-1) as CDCLAVE_VALOR , substr(registro, instr(registro,'^',1,25)+1, instr(registro,'^',1,26)-instr(registro,'^',1,25)-1) as CDIDENT , substr(registro, instr(registro,'^',1,27)+1, instr(registro,'^',1,28)-instr(registro,'^',1,27)-1) as CDIDENTDUP2 , substr(registro, instr(registro,'^',1,29)+1, instr(registro,'^',1,30)-instr(registro,'^',1,29)-1) as Terminal_Machine , substr(registro, instr(registro,'^',1,31)+1, instr(registro,'^',1,32)-instr(registro,'^',1,31)-1) as CDPROCESO , substr(registro, instr(registro,'^',1,33)+1, instr(registro,'^',1,34)-instr(registro,'^',1,33)-1) as DSPROCESO , substr(registro, instr(registro,'^',1,35)+1, instr(registro,'^',1,36)-instr(registro,'^',1,35)-1) as DSPROGRAMA , substr(registro, instr(registro,'^',1,37)+1, instr(registro,'^',1,38)-instr(registro,'^',1,37)-1) as DSFICH_FISICO , substr(registro, instr(registro,'^',1,39)+1, instr(registro,'^',1,40)-instr(registro,'^',1,39)-1) as DSIMPRESORA , substr(registro, instr(registro,'^',1,41)+1, instr(registro,'^',1,42)-instr(registro,'^',1,41)-1) as DSSQL , substr(registro, instr(registro,'^',1,43)+1, instr(registro,'^',1,44)-instr(registro,'^',1,43)-1) as DSURL , substr(registro, instr(registro,'^',1,45)+1, instr(registro,'^',1,46)-instr(registro,'^',1,45)-1) as DSPARAM_1 , substr(registro, instr(registro,'^',1,47)+1, instr(registro,'^',1,48)-instr(registro,'^',1,47)-1) as DSPARAM_1_VALOR , substr(registro, instr(registro,'^',1,49)+1, instr(registro,'^',1,50)-instr(registro,'^',1,49)-1) as DSPARAM_2 , substr(registro, instr(registro,'^',1,51)+1, instr(registro,'^',1,52)-instr(registro,'^',1,51)-1) as DSPARAM_2_VALOR , substr(registro, instr(registro,'^',1,53)+1, instr(registro,'^',1,54)-instr(registro,'^',1,53)-1) as DSPARAM_3 , substr(registro, instr(registro,'^',1,55)+1, instr(registro,'^',1,56)-instr(registro,'^',1,55)-1) as DSPARAM_3_VALOR , substr(registro, instr(registro,'^',1,57)+1, instr(registro,'^',1,58)-instr(registro,'^',1,57)-1) as DSPARAM_4 , substr(registro, instr(registro,'^',1,59)+1, instr(registro,'^',1,60)-instr(registro,'^',1,59)-1) as DSPARAM_4_VALOR , substr(registro, instr(registro,'^',1,61)+1, instr(registro,'^',1,62)-instr(registro,'^',1,61)-1) as DSPARAM_5 , substr(registro, instr(registro,'^',1,63)+1, instr(registro,'^',1,64)-instr(registro,'^',1,63)-1) as DSPARAM_5_VALOR , substr(registro, instr(registro,'^',1,65)+1, instr(registro,'^',1,66)-instr(registro,'^',1,65)-1) as DSPARAM_6 , substr(registro, instr(registro,'^',1,67)+1, instr(registro,'^',1,68)-instr(registro,'^',1,67)-1) as DSPARAM_6_VALOR , substr(registro, instr(registro,'^',1,69)+1, instr(registro,'^',1,70)-instr(registro,'^',1,69)-1) as DSPARAM_7 , substr(registro, instr(registro,'^',1,71)+1, instr(registro,'^',1,72)-instr(registro,'^',1,71)-1) as DSPARAM_7_VALOR , substr(registro, instr(registro,'^',1,73)+1, instr(registro,'^',1,74)-instr(registro,'^',1,73)-1) as DSPARAM_8 Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 17 Nombre del manual NIVELES DE SOFTWARE , substr(registro, instr(registro,'^',1,75)+1, instr(registro,'^',1,76)-instr(registro,'^',1,75)-1) as DSPARAM_8_VALOR , substr(registro, instr(registro,'^',1,77)+1, instr(registro,'^',1,78)-instr(registro,'^',1,77)-1) as DSPARAM_9 , substr(registro, instr(registro,'^',1,79)+1, instr(registro,'^',1,80)-instr(registro,'^',1,79)-1) as DSPARAM_9_VALOR , substr(registro, instr(registro,'^',1,81)+1, instr(registro,'^',1,82)-instr(registro,'^',1,81)-1) as DSPARAM_10 , substr(registro, instr(registro,'^',1,83)+1, instr(registro,'^',1,84)-instr(registro,'^',1,83)-1) as DSPARAM_10_VALOR , substr(registro, instr(registro,'^',1,85)+1, instr(registro,'^',1,86)-instr(registro,'^',1,85)-1) as DSOSERV from traz_err_log_accesos WHERE substr(registro, instr(registro,'^',1,5)+1, instr(registro,'^',1,6)-instr(registro,'^',1,5)-1) = 'SFFZ' 9 ANEXOS 9.1 Anexo I. Estructura de tabla de almacenamiento de accesos A continuación se muestra la estructura de la tabla en donde se almacenarán los log de accesos a ficheros de ALTO nivel de seguridad. create table TRAZ_LOG_ACCESOS ( COD_APLICACION VARCHAR2(12), DSFICH_LOGICO VARCHAR2(40), DSDBNAME VARCHAR2(20), DSMACHINE VARCHAR2(20), CDTPOPERACION VARCHAR2(2), CDCLAVE VARCHAR2(250), CDCLAVE_VALOR VARCHAR2(750), COD_USUARIO VARCHAR2(12), FCACCESO DATE, CDIDENT VARCHAR2(15), CDIDENTDUP VARCHAR2(2), CDPROCESO VARCHAR2(10), DSPROCESO VARCHAR2(60), CDTPACCESO_LOGICO VARCHAR2(2), DSSQL VARCHAR2(2000), DSTABLA_FISICA VARCHAR2(30), DSURL VARCHAR2(140), CDTPOPER_FISICA VARCHAR2(2), DSTERMINAL VARCHAR2(40), Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 18 Nombre del manual NIVELES DE SOFTWARE DSPROGRAMA VARCHAR2(50), DSFICH_FISICO VARCHAR2(100), DSIMPRESORA VARCHAR2(20), DSPARAM_1 VARCHAR2(20), DSPARAM_1_VALOR VARCHAR2(40), DSPARAM_2 VARCHAR2(20), DSPARAM_2_VALOR VARCHAR2(40), DSPARAM_3 VARCHAR2(20), DSPARAM_3_VALOR VARCHAR2(40), DSPARAM_4 VARCHAR2(20), DSPARAM_4_VALOR VARCHAR2(40), DSPARAM_5 VARCHAR2(20), DSPARAM_5_VALOR VARCHAR2(40), DSPARAM_6 VARCHAR2(20), DSPARAM_6_VALOR VARCHAR2(40), DSPARAM_7 VARCHAR2(20), DSPARAM_7_VALOR VARCHAR2(40), DSPARAM_8 VARCHAR2(20), DSPARAM_8_VALOR VARCHAR2(40), DSPARAM_9 VARCHAR2(20), DSPARAM_9_VALOR VARCHAR2(40), DSPARAM_10 VARCHAR2(20), DSPARAM_10_VALOR VARCHAR2(40), DSOBSERV VARCHAR2(256) ); Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 19 Nombre del manual NIVELES DE SOFTWARE 9.2 Anexo II. Package estándar de envío y almacenamiento de trazas Partiendo de este package general se copiará a nivel de DBA de Aplicación cambiándole el nombre como en el ejemplo siguiente: Origen de la copia….: STANDARD_PACK_LOG Destino ……………..: XXXX_PACK_LOG Siendo XXXX el código de la aplicación que adoptará este nuevo paquete. A continuación se muestra el código del package genérico: create or replace package body STANDARD_PACK_LOG is ----- FUNCION CREAR_REG_LOG --FUNCTION crear_reg_log ( vi_COD_APLICACION IN varchar2 , -- Código de Aplicación vi_DSFICH_LOGICO IN varchar2 , -- Nombre del Fichero Lógico de datos vi_CDTPOPERACION IN varchar2 , -- Tipo de Operación que se realiza sobre la tabla Lógica vi_CDTPACCESO_LOGICO IN varchar2 , -- Tipo de Acceso al fichero lógico vi_DSTABLA_FISICA IN varchar2 default null , -- Tabla Física accedida vi_CDTOPER_FISICA IN varchar2 default null , -- Tipo de Operación que se realiza sobre la Tabla Física vi_CDCLAVE IN varchar2 default null , -- Clave de Acceso vi_CDCLAVE_VALOR IN varchar2 default null , -- Valor Clave de Acceso vi_CDIDENT IN varchar2 default null , -- Código de Identificación vi_CDIDENTDUP IN varchar2 default null , -- Duplicado de Identificación vi_CDPROCESO IN varchar2 default null , -- Código de Proceso vi_DSPROCESO IN varchar2 default null , -- Descripción del proceso vi_DSFICH_FISICO IN varchar2 default null , -- Nombre del Fichero Físico de Impresión, descarga,.. vi_DSIMPRESORA IN varchar2 default null , -- Impresora vi_DSSQL IN varchar2 default null , -- Sentencia SQL que se ejecuta vi_DSURL IN varchar2 default null , -- Dirección URL vi_DSPARAM_1 IN varchar2 default null , -- Criterio 1 vi_DSPARAM_1_VALOR IN varchar2 default null , -- Valor 1 vi_DSPARAM_2 IN varchar2 default null , -- Criterio 2 vi_DSPARAM_2_VALOR IN varchar2 default null , -- Valor 2 vi_DSPARAM_3 IN varchar2 default null , -- Criterio 3 vi_DSPARAM_3_VALOR IN varchar2 default null , -- Valor 3 vi_DSPARAM_4 IN varchar2 default null , -- Criterio 4 vi_DSPARAM_4_VALOR IN varchar2 default null , -- Valor 4 vi_DSPARAM_5 IN varchar2 default null , -- Criterio 5 vi_DSPARAM_5_VALOR IN varchar2 default null , -- Valor 5 vi_DSPARAM_6 IN varchar2 default null , -- Criterio 6 Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 20 Nombre del manual NIVELES DE SOFTWARE vi_DSPARAM_6_VALOR IN varchar2 default null , -- Valor 6 vi_DSPARAM_7 IN varchar2 default null , -- Criterio 7 vi_DSPARAM_7_VALOR IN varchar2 default null , -- Valor 7 vi_DSPARAM_8 IN varchar2 default null , -- Criterio 8 vi_DSPARAM_8_VALOR IN varchar2 default null , -- Valor 8 vi_DSPARAM_9 IN varchar2 default null , -- CENPROP vi_DSPARAM_9_VALOR IN varchar2 default null , -- Código de Centro Directivo, Órgano Judicial, Departamento, etc. al que pertenecen los datos sobre los que se realiza el acceso vi_DSPARAM_10 IN varchar2 default null , -- CENDIR vi_DSPARAM_10_VALOR IN varchar2 default null , -- Código de Centro Directivo, Órgano Judicial, Departamento, etc., al que pertenece el usuario que realiza el acceso a los datos de Nivel Alto vi_DSOBSERV IN varchar2 default null ) -- Observaciones RETURN Number IS -w_dbname varchar2(100); w_maquina varchar2(100); w_terminal varchar2(100); w_program varchar2(100); w_reglog varchar2(4000); w_usuario varchar2(100) := USER; status number; BEGIN -------------------------------------------------------------------- Inicializar variables. -------------------------------------------------------------------w_reglog := null; -------------------------------------------------------------------- Obtener Base de Datos -------------------------------------------------------------------SELECT VALUE INTO w_DBNAME FROM sis_nombre_bd; -------------------------------------------------------------------- Obtener nombre de la máquina de Base de Datos -------------------------------------------------------------------select rtrim(substr(substr(program, 1, instr(program,'(',1)-1), instr(program,'@',1)+1, 20)) into w_maquina from v$parameter, v$process where name = 'db_name' and pid = 2; --------------------------------------------------------------------- Obtener: --- el TTY (si se accede por Telnet) o el nombre del PC (si se -- accede desde windows); y el programa utilizado en Oracle --------------------------------------------------------------------- Si Audsid=0 ES UN JOB. IF SYS_CONTEXT('USERENV','SESSIONID') = 0 THEN --- Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 21 Nombre del manual NIVELES DE SOFTWARE w_terminal := vi_COD_APLICACION||'_JOB'; w_program := vi_COD_APLICACION||'_JOB'; ELSE select decode(ascii(substr(s.machine,length(s.machine),1)),0, substr(s.machine,1,length(s.machine)-1), s.machine), S.PROGRAM into w_terminal, w_program from sis_log_process P, sis_log_session S where P.Addr = S.Paddr and S.Audsid = SYS_CONTEXT('USERENV','SESSIONID'); END IF; --- ¡¡¡ INICIO - Programación sólamente para Aplicaciones WEB (JAVA, CGI) !!! --- Descomentar éstas 4 líneas para estas tecnologías que se apoyan en Pool de Conexiones -- Mediante la función SIS_FUNC_CONTROL_SESION se permite conocer el usuario lógico conectado a la aplicación a través del SESSION_ID /* status := sis_func_control_sesion('C',w_usuario); if (status > 0) then return(1); end if; */ --- ¡¡¡ FIN - Programación sólamente para Aplicaciones WEB (JAVA, CGI) !!! -- -------------------------------------------------------------------- Componer registro de Log. ------------------------------------------------------------------w_reglog := '^' || w_DBNAME || '^~^' || -- bd w_maquina || '^~^' || -- máquina de la bd vi_COD_APLICACION || '^~^' || -- código aplicación w_usuario || '^~^' || -- login usuario to_char (SYSDATE,'YYYY-MM-DD HH24:mi:ss') || '^~^' || -- día y hora vi_DSFICH_LOGICO || '^~^' || -- fichero lógico vi_CDTPOPERACION || '^~^' || -- tipo operación sobre el fichero lógico vi_CDTPACCESO_LOGICO|| '^~^' || -- tipo acceso al fichero lógico vi_DSTABLA_FISICA || '^~^' || -- tabla física vi_CDTOPER_FISICA || '^~^' || -- tipo operación sobre la tabla física vi_CDCLAVE || '^~^' || -- clave acceso vi_CDCLAVE_VALOR || '^~^' || -- valor clave vi_CDIDENT || '^~^' || -- código identificación vi_CDIDENTDUP || '^~^' || -- duplicado identificación w_terminal || '^~^' || -- terminal vi_CDPROCESO || '^~^' || -- proceso vi_DSPROCESO || '^~^' || -- descripción proceso w_program || '^~^' || -- programa vi_DSFICH_FISICO || '^~^' || -- Nombre del fichero físico de descarga, .. Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 22 Nombre del manual NIVELES DE SOFTWARE vi_DSIMPRESORA || '^~^' || -- impresora substr(vi_DSSQL,1,2000) || '^~^' || -- sql substr(vi_DSURL,1,140) || '^~^' || -- url vi_DSPARAM_1 || '^~^' || -- parámetros y valores vi_DSPARAM_1_VALOR|| '^~^' || vi_DSPARAM_2 || '^~^' || vi_DSPARAM_2_VALOR|| '^~^' || vi_DSPARAM_3 || '^~^' || vi_DSPARAM_3_VALOR|| '^~^' || vi_DSPARAM_4 || '^~^' || vi_DSPARAM_4_VALOR|| '^~^' || vi_DSPARAM_5 || '^~^' || vi_DSPARAM_5_VALOR|| '^~^' || vi_DSPARAM_6 || '^~^' || vi_DSPARAM_6_VALOR|| '^~^' || vi_DSPARAM_7 || '^~^' || vi_DSPARAM_7_VALOR|| '^~^' || vi_DSPARAM_8 || '^~^' || vi_DSPARAM_8_VALOR|| '^~^' || vi_DSPARAM_9 || '^~^' || vi_DSPARAM_9_VALOR|| '^~^' || vi_DSPARAM_10 || '^~^' || vi_DSPARAM_10_VALOR || '^~^' || vi_DSOBSERV || '^'; -- observaciones -status := enviar_reg_log(w_reglog); RETURN (status); EXCEPTION WHEN OTHERS THEN RETURN (SQLCODE); END Crear_Reg_Log; ----- FUNCION ENVIAR_REG_LOG --FUNCTION enviar_reg_log ( command VARCHAR2, timeout NUMBER DEFAULT 10) RETURN NUMBER IS status NUMBER; pipe_name VARCHAR2(30); BEGIN DBMS_PIPE.PACK_MESSAGE(command); status := DBMS_PIPE.SEND_MESSAGE('traz_pipe', timeout); IF status <> 0 THEN RAISE_APPLICATION_ERROR(-20010, 'Execute_system: Error while sending. Status = ' || status); END IF; RETURN status; END enviar_reg_log; Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 23 Nombre del manual NIVELES DE SOFTWARE end ; ¡¡¡ A TENER EN CUENTA!!! , si el tipo de aplicación es un WEB (JAVA, CGI) (bajo los cuales se realizan conexiones físicas a base de datos con el mismo usuario) se han de descomentar las líneas existentes en la función ‘CREAR_REG_LOG’ con la etiqueta: ¡¡¡ INICIO - Programación sólamente para Aplicaciones WEB (JAVA, CGI) !!! (para este tipo de programas se ha de disponer en la b.d. de la siguiente tabla: - GAT_CONTROL_SESION -enlace entre usuario lógico e identificador de sesión OracleY de la siguiente función: - SIS_FUNC_CONTROL_SESION -registro y consulta de la anterior tabla- ) 9.3 Anexo III. Modelo de trigger after delete, update o insert A continuación veremos un ejemplo de cómo se crearía un Trigger para el control de seguridad de aplicaciones. El Trigger que veremos está implementado en el modelo de datos para la aplicación Sislab: - Nombre del Trigger : slab_emp_anotacion_trig_a_diu - Evento: Alter - Acción: Delete, Insert, Update - Tabla: slab_emp_anotacion 9.3.1 Ejemplo 1: CREATE OR REPLACE TRIGGER SLAB_EMP_ANOTACION_TRIG_A_DIU AFTER DELETE OR INSERT OR UPDATE ON SLAB_EMP_LINEA_ANOTACION FOR EACH ROW DECLARE w_CDTPOPER_LOGICO varchar2(2); w_CDTPOPER_FISICA varchar2(2); w_CDCLAVE_VALOR varchar2(20); w_CDIDENT varchar2(20); w_CDIDENTDUP varchar2(2); w_CDPROCESO varchar2 (10); w_DSPROCESO varchar2(60); w_status number; BEGIN ------------------------------------------------------------------------------------------------------------------------------------------w_CDPROCESO := ‘AMEDIC’; w_DSPROCESO := 'Anotaciones médicas'; -IF DELETING THEN -w_CDTPOPER_LOGICO := 'B'; Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 24 Nombre del manual NIVELES DE SOFTWARE w_CDTPOPER_FISICA := 'B'; w_CDCLAVE_VALOR := lpad (to_char (:old.CDNIFNRO),8,'0') || :old.CDNIFCTRL; w_CDIDENT := lpad (to_char (:old.CDNIFNRO),8,'0') || :old.CDNIFCTRL; w_CDIDENTDUP := :old.CDNIFDUP; -ELSIF INSERTING THEN -w_CDTPOPER_LOGICO := 'A'; w_CDTPOPER_FISICA := 'A'; w_CDCLAVE_VALOR := lpad (to_char (:new.CDNIFNRO),8,'0') || :new.CDNIFCTRL; w_CDIDENT := lpad (to_char (:new.CDNIFNRO),8,'0') || :new.CDNIFCTRL; w_CDIDENTDUP := :new.CDNIFDUP; -ELSIF UPDATING THEN -w_CDTPOPER_LOGICO := 'M'; w_CDTPOPER_FISICA := 'M'; w_CDCLAVE_VALOR := lpad (to_char (:old.CDNIFNRO),8,'0') || :old.CDNIFCTRL; w_CDIDENT := lpad (to_char (:old.CDNIFNRO),8,'0') || :old.CDNIFCTRL; w_CDIDENTDUP := :old.CDNIFDUP; -ELSE /* La manipulación es un UPDATE general */ null; END IF; --------------------------------------------------------------------- Crear Registro de Log en PIPE. -------------------------------------------------------------------w_status := dba_slab.slab_pack_log.crear_reg_log ( 'SLAB' , 'SLAB_EMP_LINEA_ANOTACION' , w_CDTPOPER_LOGICO , 'I' , 'SLAB_EMP_LINEA_ANOTACION' , w_CDTPOPER_FISICA , 'NIF' , w_CDCLAVE_VALOR , w_CDIDENT , w_CDIDENTDUP , w_CDPROCESO , w_DSPROCESO, ‘FICHERO DE ANOTACION' , 'ICMPRXX', 'select * from .............................................' , null , null, null , null, null , null, Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 25 Nombre del manual NIVELES DE SOFTWARE null , null, null , null, null , null, null , null, null, null, null, ‘CENPROP’, ‘CD_AA’ , ‘CENDIR’, ‘CD_BB’ , ‘Observaciones’ ); END; / * Los campos null, son OPCIONALES, si no se informa de ellos se debe indicar el valor NULL 9.3.2 Ejemplo 2: CREATE OR REPLACE TRIGGER SLAB_EMP_TRIG_A_DIU AFTER DELETE OR INSERT OR UPDATE of fcexclu OR UPDATE of nmhcl ON SLAB_EMP FOR EACH ROW DECLARE w_CDTPOPER_LOGICO varchar2(2); w_CDTPOPER_FISICA varchar2(2); w_CDCLAVE_VALOR varchar2(20); w_CDIDENT varchar2(20); w_CDIDENTDUP varchar2(2); w_CDPROCESO varchar2(10); w_DSPROCESO varchar2(60); w_status number; BEGIN ------------------------------------------------------------------------------------------------------------------------------------------w_DSPROCESO := 'Modificación de Datos Generales del Empleado'; w_CDPROCESO := ‘MOD_DGE’; -IF DELETING THEN -w_CDTPOPER_LOGICO := 'B'; w_CDTPOPER_FISICA := 'B'; w_CDCLAVE_VALOR := lpad (to_char (:old.CDNIFNRO),8,'0') || :old.CDNIFCTRL; Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 26 Nombre del manual NIVELES DE SOFTWARE w_CDIDENT := lpad (to_char (:old.CDNIFNRO),8,'0') || :old.CDNIFCTRL; w_CDIDENTDUP := :old.CDNIFDUP; -ELSIF INSERTING THEN -w_CDTPOPER_LOGICO := 'A'; w_CDTPOPER_FISICA := 'A'; w_CDCLAVE_VALOR := lpad (to_char (:new.CDNIFNRO),8,'0') || :new.CDNIFCTRL; w_CDIDENT := lpad (to_char (:new.CDNIFNRO),8,'0') || :new.CDNIFCTRL; w_CDIDENTDUP := :new.CDNIFDUP; -ELSIF UPDATING THEN -w_CDTPOPER_LOGICO := 'M'; w_CDTPOPER_FISICA := 'M'; w_CDCLAVE_VALOR := lpad (to_char (:old.CDNIFNRO),8,'0') || :old.CDNIFCTRL; w_CDIDENT := lpad (to_char (:old.CDNIFNRO),8,'0') || :old.CDNIFCTRL; w_CDIDENTDUP := :old.CDNIFDUP; -ELSE null; END IF; --------------------------------------------------------------------- Crear Registrar Registro de Log a PIPE. -------------------------------------------------------------------w_status := dba_slab.slab_pack_log.crear_reg_log ( 'SLAB' , 'SLAB_EMP' , w_CDTPOPER_LOGICO , 'I' , 'SLAB_EMP' , w_CDTPOPER_FISICA , 'NIF' , w_CDCLAVE_VALOR , w_CDIDENT , w_CDIDENTDUP , w_CDPROCESO , w_DSPROCESO ‘FICHERO DE ANOTACION' , 'ICMPRXX', 'select * from .............................................' , null , null, null , null, null , null, null , null, Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 27 Nombre del manual NIVELES DE SOFTWARE null , null, null , null, null , null, null, null, null, ‘CENPROP’, ‘CD_AA’ , ‘CENDIR’, ‘CD_BB’ , ‘Observaciones’ ); END; / * Los campos null, son OPCIONALES, si no se informa de ellos se debe indicar el valor NULL. 9.4 Anexo IV. En Java Las aplicaciones que accedan a datos de alto nivel de seguridad deberán implementar los mecanismos necesarios para que se registren los distintos accesos de los usuarios. Para el acceso a este modelo de datos se han predefinido una serie de paquetes y triggers que son invocados cuando se realiza alguna operación de INSERT, UPDATE o DELETE en la base de datos de la aplicación. En el caso de consultas de tipo SELECT es necesario llamar directamente a los paquetes preparados para dejar este tipo de trazas. Este tipo de aplicaciones deberán utilizar el protocolo https. 9.4.1 Fichero de Cofiguración Dado que las aplicaciones web se conectan a base de datos mediante un pool de conexiones no es posible identificar directamente el usuario que se ha conectado a la base de datos en una determinada sesión de base de datos. Para que sea posible esta identificación el framework se encarga de actualizar en una tabla el identificador de la sesión de base de datos y qué usuario de la aplicación está utilizando esta sesión. Para que esto se lleve a cabo es necesario incluir en el fichero de configuración la variable aplicacion.logN3= true Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 28 Nombre del manual NIVELES DE SOFTWARE 9.4.2 Objetos requeridos en base de datos para realizar la trazabilidad en éste tipo de aplicaciones 9.4.2.1 Tabla: GAT_CONTROL_SESION [propietario=dba_gat] Relación de sesión única de Oracle a usuario lógico de la aplicación. -- Create table create table GAT_CONTROL_SESION ( AUDSID VARCHAR2(10) not null, CD_USUARIO VARCHAR2(12) not null ); -- Create/Recreate indexes create unique index XPKGAT_CONTROL_SESION on GAT_CONTROL_SESION (AUDSID); -- Grant/Revoke object privileges grant all on GAT_CONTROL_SESION to PUBLIC with grant option; create public synonym GAT_CONTROL_SESION for GAT_CONTROL_SESION; 9.4.2.2 Procedimiento: SIS_FUNC_CONTROL_SESION [propietario=dba_sis] Procedimiento de registro y consulta de usuario lógico en tabla GAT_CONTROL_SESION a nivel de sesión única de Oracle. create or replace function SIS_FUNC_CONTROL_SESION( wopc in VARCHAR2, wusu in out VARCHAR2 ) return number is wsessionid GAT_CONTROL_SESION.audsid%Type; wcdusuario GAT_CONTROL_SESION.cd_usuario%Type; ERROR EXCEPTION; --- Parámetros: -- wopc(entrada)..: Opción, posibles valores: -'A'- Alta/registro en tabla de sesiones. -'B'- Baja en tabla de sesiones. -'C'- Consulta de usuario en tabla de sesiones. -- wusu(entrada/salida)..: Usuario lógico de aplicación -En opc.'A' se rellena el cod.usuario lógico -En opc.'C' se devuelve el cod.usuario -Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 29 Nombre del manual NIVELES DE SOFTWARE -- Salida de función: devuelve los siguientes valores. -0 - Salida correcta -1 - Salida erronea -BEGIN IF (Upper(wopc) not in ('A','B','C')) or (wopc is null) THEN Raise ERROR; END IF; -- Obtención del id session único wsessionid := UserEnv('sessionid'); IF ( Upper(wopc) = 'A') THEN IF (wusu is null) THEN Raise ERROR; END IF; Begin insert into GAT_CONTROL_SESION (audsid,cd_usuario) VALUES (wsessionid,Upper(wusu)); Exception -- En caso de que exista se modifica el Registro when Dup_Val_On_Index then update GAT_CONTROL_SESION set cd_usuario = Upper(wusu); End; ELSIF ( Upper(wopc) = 'B') THEN delete GAT_CONTROL_SESION where audsid = wsessionid; ELSE Begin Select cd_usuario into wcdusuario From GAT_CONTROL_SESION where audsid = wsessionid; wusu := wcdusuario; Exception When No_Data_Found then Raise ERROR; End; END IF; -Return(0); -EXCEPTION WHEN ERROR THEN Return(1); END; Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 30 Nombre del manual NIVELES DE SOFTWARE 9.4.3 Habilitar paquete estandar de envío de trazas Dentro de la infraestructura estándar requerida para la trazabilidad en cualquier aplicación se ha de crear un paquete por cada nueva aplicación partiendo del paquete STANDAR_PACK_LOG quedando como XXXX_PACK_LOG (siendo XXXX el código de la aplicación). ¡¡¡ A TENER EN CUENTA!!! , si el tipo de aplicación es un WEB (JAVA, CGI) (bajo los cuales se realizan conexiones físicas a base de datos con el mismo usuario) se han de descomentar las líneas existentes en la función ‘CREAR_REG_LOG’ con la etiqueta: ¡¡¡ INICIO - Programación sólamente para Aplicaciones WEB (JAVA, CGI) !!! (para este tipo de programas se ha de disponer en la b.d. de la siguiente tabla: - GAT_CONTROL_SESION -enlace entre usuario lógico e identificador de sesión OracleY de la siguiente función: - SIS_FUNC_CONTROL_SESION -registro y consulta de la anterior tabla- ) create or replace package body STANDARD_PACK_LOG is ----- FUNCION CREAR_REG_LOG --FUNCTION crear_reg_log ( vi_COD_APLICACION IN varchar2 , -- Código de Aplicación vi_DSFICH_LOGICO IN varchar2 , -- Nombre del Fichero Lógico de datos vi_CDTPOPERACION IN varchar2 , -- Tipo de Operación que se realiza sobre la tabla Lógica vi_CDTPACCESO_LOGICO IN varchar2 , -- Tipo de Acceso al fichero lógico vi_DSTABLA_FISICA IN varchar2 default null , -- Tabla Física accedida vi_CDTOPER_FISICA IN varchar2 default null , -- Tipo de Operación que se realiza sobre la Tabla Física vi_CDCLAVE IN varchar2 default null , -- Clave de Acceso vi_CDCLAVE_VALOR IN varchar2 default null , -- Valor Clave de Acceso vi_CDIDENT IN varchar2 default null , -- Código de Identificación vi_CDIDENTDUP IN varchar2 default null , -- Duplicado de Identificación vi_CDPROCESO IN varchar2 default null , -- Código de Proceso vi_DSPROCESO IN varchar2 default null , -- Descripción del proceso vi_DSFICH_FISICO IN varchar2 default null , -- Nombre del Fichero Físico de Impresión, descarga,.. vi_DSIMPRESORA IN varchar2 default null , -- Impresora vi_DSSQL IN varchar2 default null , -- Sentencia SQL que se ejecuta vi_DSURL IN varchar2 default null , -- Dirección URL vi_DSPARAM_1 IN varchar2 default null , -- Criterio 1 vi_DSPARAM_1_VALOR IN varchar2 default null , -- Valor 1 vi_DSPARAM_2 IN varchar2 default null , -- Criterio 2 vi_DSPARAM_2_VALOR IN varchar2 default null , -- Valor 2 vi_DSPARAM_3 IN varchar2 default null , -- Criterio 3 vi_DSPARAM_3_VALOR IN varchar2 default null , -- Valor 3 vi_DSPARAM_4 IN varchar2 default null , -- Criterio 4 vi_DSPARAM_4_VALOR IN varchar2 default null , -- Valor 4 vi_DSPARAM_5 IN varchar2 default null , -- Criterio 5 vi_DSPARAM_5_VALOR IN varchar2 default null , -- Valor 5 vi_DSPARAM_6 IN varchar2 default null , -- Criterio 6 vi_DSPARAM_6_VALOR IN varchar2 default null , -- Valor 6 Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 31 Nombre del manual NIVELES DE SOFTWARE vi_DSPARAM_7 IN varchar2 default null , -- Criterio 7 vi_DSPARAM_7_VALOR IN varchar2 default null , -- Valor 7 vi_DSPARAM_8 IN varchar2 default null , -- Criterio 8 vi_DSPARAM_8_VALOR IN varchar2 default null , -- Valor 8 vi_DSPARAM_9 IN varchar2 default null , -- CENPROP vi_DSPARAM_9_VALOR IN varchar2 default null , -- Código de Centro Directivo, Órgano Judicial, Departamento, etc. al que pertenecen los datos sobre los que se realiza el acceso vi_DSPARAM_10 IN varchar2 default null , -- CENDIR vi_DSPARAM_10_VALOR IN varchar2 default null , -- Código de Centro Directivo, Órgano Judicial, Departamento, etc., al que pertenece el usuario que realiza el acceso a los datos de Nivel Alto vi_DSOSERV IN varchar2 default null ) -- Observaciones RETURN Number IS -w_dbname varchar2(100); w_maquina varchar2(100); w_terminal varchar2(100); w_program varchar2(100); w_reglog varchar2(4000); w_usuario varchar2(100) := USER; status number; BEGIN -------------------------------------------------------------------- Inicializar variables. -------------------------------------------------------------------w_reglog := null; -------------------------------------------------------------------- Obtener Base de Datos -------------------------------------------------------------------SELECT VALUE INTO w_DBNAME FROM sis_nombre_bd; -------------------------------------------------------------------- Obtener nombre de la máquina de Base de Datos -------------------------------------------------------------------select rtrim(substr(substr(program, 1, instr(program,'(',1)-1), instr(program,'@',1)+1, 20)) into w_maquina from v$parameter, v$process where name = 'db_name' and pid = 2; --------------------------------------------------------------------- Obtener: --- el TTY (si se accede por Telnet) o el nombre del PC (si se -- accede desde windows); y el programa utilizado en Oracle --------------------------------------------------------------------- Si Audsid=0 ES UN JOB. IF SYS_CONTEXT('USERENV','SESSIONID') = 0 THEN w_terminal := vi_COD_APLICACION||'_JOB'; --- Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 32 Nombre del manual NIVELES DE SOFTWARE w_program := vi_COD_APLICACION||'_JOB'; ELSE select decode(ascii(substr(s.machine,length(s.machine),1)),0, substr(s.machine,1,length(s.machine)-1), s.machine), S.PROGRAM into w_terminal, w_program from sis_log_process P, sis_log_session S where P.Addr = S.Paddr and S.Audsid = SYS_CONTEXT('USERENV','SESSIONID'); END IF; --- ¡¡¡ INICIO - Programación sólamente para Aplicaciones WEB (JAVA, CGI) !!! --- Descomentar éstas 4 líneas para estas tecnologías que se apoyan en Pool de Conexiones -- Mediante la función SIS_FUNC_CONTROL_SESION se permite conocer el usuario lógico conectado a la aplicación a través del SESSION_ID status := sis_func_control_sesion('C',w_usuario); if (status > 0) then return(1); end if; --- ¡¡¡ FIN - Programación sólamente para Aplicaciones WEB (JAVA, CGI) !!! --------------------------------------------------------------------- Componer registro de Log. ------------------------------------------------------------------w_reglog := '^' || w_DBNAME || '^~^' || -- bd w_maquina || '^~^' || -- máquina de la bd vi_COD_APLICACION || '^~^' || -- código aplicación w_usuario || '^~^' || -- login usuario to_char (SYSDATE,'YYYY-MM-DD HH24:mi:ss') || '^~^' || -- día y hora vi_DSFICH_LOGICO || '^~^' || -- fichero lógico vi_CDTPOPERACION || '^~^' || -- tipo operación sobre el fichero lógico vi_CDTPACCESO_LOGICO|| '^~^' || -- tipo acceso al fichero lógico vi_DSTABLA_FISICA || '^~^' || -- tabla física vi_CDTOPER_FISICA || '^~^' || -- tipo operación sobre la tabla física vi_CDCLAVE || '^~^' || -- clave acceso vi_CDCLAVE_VALOR || '^~^' || -- valor clave vi_CDIDENT || '^~^' || -- código identificación vi_CDIDENTDUP || '^~^' || -- duplicado identificación w_terminal || '^~^' || -- terminal Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 33 Nombre del manual vi_CDPROCESO vi_DSPROCESO w_program vi_DSFICH_FISICO NIVELES DE SOFTWARE || '^~^' || || '^~^' || || '^~^' || || '^~^' || -- proceso -- descripción proceso -- programa -- Nombre del fichero físico de descarga, .. vi_DSIMPRESORA || '^~^' || -- impresora substr(vi_DSSQL,1,2000) || '^~^' || -- sql substr(vi_DSURL,1,140) || '^~^' || -- url vi_DSPARAM_1 || '^~^' || -- parámetros y valores vi_DSPARAM_1_VALOR|| '^~^' || vi_DSPARAM_2 || '^~^' || vi_DSPARAM_2_VALOR|| '^~^' || vi_DSPARAM_3 || '^~^' || vi_DSPARAM_3_VALOR|| '^~^' || vi_DSPARAM_4 || '^~^' || vi_DSPARAM_4_VALOR|| '^~^' || vi_DSPARAM_5 || '^~^' || vi_DSPARAM_5_VALOR|| '^~^' || vi_DSPARAM_6 || '^~^' || vi_DSPARAM_6_VALOR|| '^~^' || vi_DSPARAM_7 || '^~^' || vi_DSPARAM_7_VALOR|| '^~^' || vi_DSPARAM_8 || '^~^' || vi_DSPARAM_8_VALOR|| '^~^' || vi_DSPARAM_9 || '^~^' || vi_DSPARAM_9_VALOR|| '^~^' || vi_DSPARAM_10 || '^~^' || vi_DSPARAM_10_VALOR || '^~^' || vi_DSOSERV || '^'; -- observaciones -status := enviar_reg_log(w_reglog); RETURN (status); EXCEPTION WHEN OTHERS THEN RETURN (SQLCODE); END Crear_Reg_Log; ----- FUNCION ENVIAR_REG_LOG --FUNCTION enviar_reg_log ( command VARCHAR2, timeout NUMBER DEFAULT 10) RETURN NUMBER IS Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 34 Nombre del manual NIVELES DE SOFTWARE status NUMBER; pipe_name VARCHAR2(30); BEGIN DBMS_PIPE.PACK_MESSAGE(command); status := DBMS_PIPE.SEND_MESSAGE('traz_pipe', timeout); IF status <> 0 THEN RAISE_APPLICATION_ERROR(-20010, 'Execute_system: Error while sending. Status = ' || status); END IF; RETURN status; END enviar_reg_log; end ; Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 35 Nombre del manual NIVELES DE SOFTWARE 9.5 Anexo V. En Documentum 9.5.1 Acceso con usuario nominal. Cuando se acceda a Documentum con un usuario nominal, el registro de traza de acceso se delegerá en el módulo de auditoría que suministra el propio producto. Para este fin se habilitarán los mecanismos descritos en los manuales de desarrollo. 9.5.2 Acceso con usuario no nominal. Cuando se acceda a Documentum con un usuario genérico a través de otra aplicación cliente (normalmente Java), el registro de la traza de acceso se delegará en dicha aplicación. Utilizando los mecanismos existentes en el framework de desarrollo de su tecnología, deberá realizar una llamada explícita a su paquete de traza correspondiente (XXXX_PACK_LOG) por cada operación (SELECT, INSERT, UPDATE, DELETE) solicitada a Documentum (sobre tipos documentales a trazar). 9.5.3 Desarrollos Java internos. Cuando el desarrollo del módulo de Documentum disponga de desarrollos Java internos (Java métodos, TBOs) con necesidad de trazar, se operará como se indica a continuación. Si estuviéramos en la situación descrita en el punto 9.1 (auditoría del producto habilitada), no se requiere hacer nada adicional (siempre que todos los tipos documentales a trazar estuvieran ya configurados en Documentum). Si por el contrario, no tenemos auditoría habilitada, el registro de la traza se delegará en la aplicación Java interna. Deberá realizar una llamada explícita al paquete de traza DOCU_PACK_LOG por cada operación (SELECT, INSERT, UPDATE, DELETE) solicitada a Documentum (sobre tipos documentales a trazar). 9.5.4 Paquete DOCU_PACK_LOG. Está creado en las instancias de base de datos donde está ejecutándose Documentum. Es el paquete común de traza para todas las aplicaciones con desarrollos Java internos (Java métodos, TBOs). Su código es similar al paquete estandar. La única diferencia es la asignación del usuario de traza (el que ejecuta el programa en el Content Server de Documentum) al valor del parámetro DSPARAM_5_VALOR. Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 36 Nombre del manual NIVELES DE SOFTWARE 9.5.5 Formato de la traza. En la llamada al paquete de traza (XXXX_PACK_LOG y DOCU_PACK_LOG) se utilizarán los siguientes parámetros con valores específicos para Documentum: Parámetro Descripción DSPARAM_6 Literal “TECNOLOGÍA” (sin comillas) DSPARAM_6_VALOR Literal “DOCUMENTUM” (sin comillas) DSPARAM_7 Literal “APLICACIÓN ACCESO” (sin comillas) DSPARAM_7_VALOR XXXX (siendo XXXX el código de aplicación cliente) DSPARAM_8 Literal “R_OBJECT_ID” (sin comillas) DSPARAM_8_VALOR XXXX (siendo XXXX el valor del “r_object_id” del registro accedido) Cuando estemos utilizando el paquete DOCU_PACK_LOG, se añadirá la información siguiente adicional: Parámetro Descripción DSPARAM_5 Literal “USUARIO” (sin comillas) DSPARAM_5_VALOR XXXX (siendo XXXX el código de usuario que ejecuta el programa en el Content Server de Documentum) 9.5.6 Integración de auditoría. Existe un proceso automático periódico que migra la información recogida en las tablas internas de auditoría de Documentum a la tablas del sistema centralizado. 9.6 Anexo VI. Tratamiento y explotación de la información de ‘traza’ almacenada en tablas Oracle por aplicación SGUR antigua (FORMS) Una vez almacenada la información de “trace” en tablas Oracle, se utilizará GLIS como herramienta de tratamiento y explotación de la información. Como ejemplo en el Sistema de información de Sislab se han definido los siguientes modelos de listados tipo a explotar: Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 37 Nombre del manual NIVELES DE SOFTWARE - Listado de Accesos realizados en un intervalo de tiempo por Fecha y hora. - Listado de Accesos realizados por un usuario en un intervalo de tiempo. - Listado de Accesos realizados a los datos de un interesado en un intervalo de tiempo. - Listado de Accesos realizados por proceso en un interesado en un intervalo de tiempo. A continuación podemos ver un ejemplo de cada uno de ellos. 9.6.1 Listado de Accesos realizados en un intervalo de tiempo por Fecha y hora. Criterios de selección : - Fecha de Acceso desde - Fecha de Acceso hasta Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 38 Nombre del manual NIVELES DE SOFTWARE 9.6.2 Listado de Accesos realizados por un usuario en un intervalo de tiempo. Criterios de selección : - Código de Usuario - Fecha de Acceso desde - Fecha de Acceso hasta 9.6.3 Listado de Accesos realizados a los datos de un interesado en un intervalo de tiempo Criterios de Selección : - Clave de Acceso - Fecha Acceso desde - Fecha Acceso hasta Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 39 Nombre del manual NIVELES DE SOFTWARE 9.6.4 Listado de Accesos realizados por proceso en un interesado en un intervalo de tiempo Criterios de Selección : - Descripción del Proceso - Fecha Acceso desde - Fecha Acceso hasta Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 40 Nombre del manual NIVELES DE SOFTWARE 9.7 Anexo VII. Tratamiento y explotación de la información de ‘traza’ almacenada en tablas Oracle por aplicación SGUR nueva (Java-Web) Una vez almacenada la información de “trace” en tablas Oracle, se utilizará la herramienta SGUR_WEB (Java Web) como herramienta de tratamiento y explotación de la información. Las principales funcionalidades de esta aplicación son: Consultas: - Trazas. - Trazas con alarma. - Procesos menusales de: Generación de trazas con alarma Estadisticas: o Accesos Fuera de Horario o Accesos por proceso. o Procesos por usuario. o Usuarios activos por semana. o Accesos semanales. o Accesos por usuario. o Accesos por franja horaria. o Tipos de acceso por usuario. o Usuarios por proceso. Para una información más detallada consulte el manual de usuario de la aplicación SGUR 9.8 Anexo VII. Explotación de la información por la nueva aplicación SGUR (Java-Web) Ejemplo genérico sobre el proceso de definición y creación de Ficheros Internos y Etiquetas Fichero en Sistemas de Información con tratamiento de ficheros de nivel alto. Supongamos que se va a iniciar una Aplicación que trata datos sindicales y de minusvalias de los empleados. Estos datos son de Carácter Personal de Nivel Alto y por lo tanto deben dejar grabada una traza cada vez que se accede a ellos. La aplicación es HHHH. Esta aplicación se va a implantar en dos Centros o Departamentos, Centro AAA en el que se accede a todos los procesos de la aplicación y Centro BBB en el que solamente se acceden a procesos de datos Sindicales. Los pasos son los siguientes: Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 41 Nombre del manual NIVELES DE SOFTWARE a) Identificar los componentes críticos del mecanismo de explotación de la trazabilidad de los sistemas. i. El Código del Sistema de Información o Aplicación. HHHH ii. Los procesos que tratan datos de nivel alto son: CONESTO.- Consulta de empleado con sindicato CONEMIN.- Consulta de empleado con minusvalía. ALTEMIN.- Alta de empleado con minusvalía BAJEMIN.- Baja de empleado con minusvalía MODEMIN.- Modificación de empleado con minusvalía. iii. Códigos de Departamentos en los que se va a implantar Aplicación: AAA y BBB. iv. La identificación de cada Fichero Interno: HHHH – AAA – CONESTO HHHH – AAA – CONEMIN HHHH – AAA – ALTEMIN HHHH – AAA – BAJEMIN HHHH – AAA – MODEMIN HHHH – BBB – CONESTO v. La relación de los Ficheros Internos que componen cada Etiqueta Fichero. La “Etiqueta Fichero Primera” está compuesta de los siguientes ficheros internos HHHH – AAA – CONESTO HHHH – AAA – CONEMIN HHHH – AAA – ALTEMIN HHHH – AAA – BAJEMIN HHHH – AAA – MODEMIN La “Etiqueta Fichero Segunda” esta compuesta del siguiente fichero interno HHHH – AAA – CONESTO La “Etiqueta Fichero Tercera” esta compuesta del siguiente fichero interno HHHH – BBB – CONESTO vi. La denominación de las Etiqueta Fichero asociados al Sistema de Información o aplicación. El valor que puede tomar esta puede ser cualquiera a criterio del Analista Funcional Etiqueta Fichero Primera – HHHH_E1 Etiqueta Fichero Segunda – HHHH_E2 Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 42 Nombre del manual vii. NIVELES DE SOFTWARE Etiqueta Fichero Tercera – HHHH_E3 Los Usuarios Responsables de Seguridad de cada una de las Etiqueta Ficheros. Para cada uno de ellos, especificar el login de usuario y el nombre y apellidos. HHHH_E1 : LGG2 .- Luís Gómez Gómez JLL4 .- Julia López López HHHH_E2: JPP56.- José Pérez Pérez HHHH_E3: AMM45.- Ángeles Marín Martín b) Cumplimentar la plantilla de requerimientos funcionales de explotación de la trazabilidad de los sistemas. La plantilla cumplimentada deberá de la siguiente manera (se pueden insertar todas las filas que sean necesarias): c) Anotaciones sobre la implementación de la trazabilidad En este apartado se explica como se deben grabar los datos de en los campos “DSPARAM_9_VALOR” y “DSPARAM_10_VALOR” de la tabla TRAZ_LOG_ACCESOS. Se asociarán respectivamente al Código del Centro Propietario de los datos que generan la traza y al Código del Centro Directivo usuario del Sistema de Información que genera la traza (apartado iii). Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 43 Nombre del manual NIVELES DE SOFTWARE Si el usuario que genera la traza es del centro directivo AAA y la aplicación se ejecuta en el centro directivo BBB se grabará lo siguiente DSPARAM_9_VALOR = BBB DSPARAM_10_VALOR = AAA El siguiente esquema resume de manera gráfica todo lo anterior DOCUMENTOS DE REFERENCIA Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 44 Nombre del manual NIVELES DE SOFTWARE “Plantilla de Documento de Diseño Funcional (Plantilla DDF)”: Situado en el Repositorio Único de Información SOJA-RUNI del Área de Integración y Arquitectura de Aplicaciones de la Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales (DAMADI).Desarrolla, en su epígrafe nº 12, las actividades a realizar para implantar el mecanismo de trazabilidad de accesos a los Sistemas de Información de la Comunidad de Madrid, en al caso en que éstos vayan a realizar algún tratamiento de ficheros de nivel alto. Área de Integración y Arquitectura de Aplicaciones Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales Subdirección General de Desarrollo, Tecnología e Infraestructuras Página: 45