Manual de usuario del paquete de trazabilidad

Anuncio
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? .. 4
6
Trazabilidad de los accesos a datos de ALTO nivel de seguridad ............... 9
7
6.1
Trazabilidad de las Consultas y Listados. .......................................................... 9
6.2
Trazabilidad de las actualizaciones (insert=s, update=s, delete=s) ............... 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) ........................................... 39
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.................. 39
Listado de Accesos realizados por un usuario en un intervalo de tiempo. ..................... 40
Listado de Accesos realizados a los datos de un interesado en un intervalo de tiempo 41
Listado de Accesos realizados por proceso en un interesado en un intervalo de tiempo
41
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) .................... 42
9.8
Anexo VII. Explotación de la información por la nueva aplicación SGUR
(Java-Web) ....................................................................................................................... 42
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.
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.
___________________________________________________________________
________
Página 4
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.
B --> Baja
M --> Modificación
C --> Consulta
CDCLAVE
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
___________________________________________________________________
________
Página 5
campos se separaran sus nombres por el carácter ^
Ej.: CD_NIF^CD_DEPTO^CD_CONTRATO
CDCLAVE_VALOR
CDIDENT
CDIDENTDUP
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
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.
___________________________________________________________________
________
Página 6
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
(*1) Este dato es cumplimentado automáticamente por el package standard
2.- Tabla de detalle de los campos
Nombre de Atributo
Base de Datos
Nombre de Columna
DSDBNAME
Tipo de dato
VARCHAR2(20)
Obligatorio
SI
___________________________________________________________________
________
Página 7
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
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
NO
NO
NO
___________________________________________________________________
________
Página 8
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
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.
___________________________________________________________________
________
Página 9
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 Trigger=s.
Es posible que en determinadas aplicaciones sea conveniente crear estos trigger=s 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 Trigger=s tendremos el Αtrace≅ de todos las actualizaciones que se
realicen en las tablas de nivel de seguridad ALTO, bien desde las aplicaciones (Form=s, Pro*C,
Delphi, etc.), o bien por operaciones realizadas directamente desde SQL u otra herramienta de
acceso directo a la base de datos.
___________________________________________________________________
________
Página 10
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,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
___________________________________________________________________
________
Página 11
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' ,
'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,
-- */
___________________________________________________________________
________
Página 12
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 GLIS
Los listados GLIS si llevan campos de nivel de seguridad alto con la trazabilidad
activada en la Administración de GLIS. Para que la trazabilidad se genera hay que
realizar las siguientes funciones dentro del package XXXX_PACK_LOG:
OBTENER_CENPROP (devuelve CENPROP)
OBTENER_CENDIR
(devuelve CENDIR)
/*******************************************************************************************
* FUNCIÓN: OBTENER_CENPROP
*
Á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
* DESCRIPCIÓN: Ésta función es obligatoria, si existe en la aplicación listados GLIS que accedean a
datos con nivel de Seguridad alto.
* La función devuelve el valor de CENPROP, es decir el valor que se indica en el documento de
trazabilidad para el campo
* DSPARAM_9_VALOR: Código de Centro Directivo, Órgano Judicial, Departamento, etc. al que
* pertenecen los datos sobre los que se realiza el acceso.
*
* PARÁMETROS:
*
* VALORES DE RETORNO DE LA FUNCIÓN: el valor de CENPROP Varchar2(40)
********************************************************************************************/
FUNCTION OBTENER_CENPROP RETURN Varchar2 IS
v_CENPROP Varchar2(40);
BEGIN
v_CENPROP:= 'VALOR DE EJEMPLO;
RETURN(v_CENPROP);
END;
/*******************************************************************************************
* FUNCIÓN: OBTENER_CENDIR
*
* DESCRIPCIÓN: Ésta función es obligatoria, si existe en la aplicación listados GLIS que accedean a
datos con nivel de Seguridad alto.
* La función devuelve el valor de CENDIR, es decir el valor que se indica en el documento de
trazabilidad para el campo
* DSPARAM_10_VALOR: 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.
*
* PARÁMETROS:
*
* VALORES DE RETORNO DE LA FUNCIÓN: el valor de CENDIR Varchar2(40)
********************************************************************************************/
FUNCTION OBTENER_CENDIR RETURN Varchar2 IS
v_CENDIR Varchar2(40);
BEGIN
v_CENDIR:= 'VALOR DE EJEMPLO';
RETURN(v_CENDIR);
Á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
END;
9.7 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:
- 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.7.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: 39
Nombre del manual
NIVELES DE SOFTWARE
9.7.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
Á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.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
9.7.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: 41
Nombre del manual
NIVELES DE SOFTWARE
9.8 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.9 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: 42
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: 43
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: 44
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: 45
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: 46
Descargar