Oracle Enterprise Manager 12c: DATA MASKING AND SUBSETTING

Por Ana Gamba Olmos
Publicado en Abril 2015

OBJETIVOS:

  • Presentar de manera completa el ciclo de enmascaramiento y creación de subconjuntos de datos en Oracle Enterprise manager 12c.
  • Mostrar cómo se crea un modelo de datos y se clasifican datos sensibles.
  • Crear definiciones de subconjuntos de datos.
  • Construir una definición de enmascaramiento y asociarla a un subconjunto de datos para poder generar un Export que contenga un subconjunto de datos enmascarados listos para distribuir en ambientes no productivos.

PROTEGIENDO SU INFORMACIÓN CON DATA MASKING

Data Masking Best Practices a/tech/docs/technical-resources/data-masking-best-practices.pdf

Contenido de este artículo:

Para hacer el proceso de enmascaramiento y subsetting se siguen 5 etapas, que serán cubiertas durante el laboratorio:

  1. Descubrimiento del Modelo de Datos
  2. Descubrimiento de Datos Sensibles en el Modelo de Datos
  3. Definición de Criterios de Subsetting
  4. Definición de Formatos de Enmascaramiento para los Datos Sensibles
  5. Generación del Export con Subset de Datos y Enmascaramiento de Datos Sensibles

Al final hay tres anexos:

Anexo1: Creación De Una Plantilla De Enmascaramiento Personalizada
Anexo2: FAQs
Anexo3: Buenas Prácticas

A. DESCUBRIMIENTO DEL MODELO DE DATOS

  1. Ingresar a la consola de OEM 12c
  2. Enterprise → Quality Management → Application Datamodels

  3. Crear un modelo de datos → +Create

  4. Llenar los campos requeridos → Continue

  5. Seleccionar los esquemas que se quieren evaluar → Continue

  6. Hacer submit del job que detecta el modelo de datos

  7. Una vez que finaliza el job se puede modificar las relaciones de la base de datos y se realiza el descubrimiento de los datos sensibles. Seleccionar el modelo de datos y hacer click en Edit

  8. En esta pantalla se pueden revisar los esquemas, y las relaciones encontradas → hacer click en Referential Relationships

  9. En este caso quiero remover la relación de países con clientes pues países es una tabla paramétrica que quiero llevar en su totalidad. Seleccionar la relación y hacer click en Remove

  10. Por ejemplo, se pueden crear nuevas relaciones, escogiendo tablas dentro de un mismo esquema o una misma base de datos. En este caso voy a relacionar dos esquemas → OK

  11. Cancel

B. DESCUBRIMIENTO DE DATOS SENSIBLES EN EL MODELO DE DATOS

  1. Hacer click en la pestaña de Sensitive Columns

  2. Hacer click en Create Discovery Job, especificar los esquemas sobre los cuales se quiere hacer el descubrimiento, los tipos de datos sensibles que se están buscando, y definir el número de registros de muestra que se usarán para evaluar si se trata de un dato sensible (entre más registros se evalúen, más certeros van a ser los resultados, pero también va a tomar más tiempo). → Continue

  3. Hacer submit del job

  4. Revisar que el job termine en estado Succeeded y hacer click en Discovery Results

  5. En este caso se muestran 3 columnas que posiblemente contienen números telefónicos, sin embargo una de ellas corresponde a otro tipo de datos. Seleccionamos entonces las dos columnas que deben ser marcadas como sensibles y hacemos click sobre Set Sensitive Status y marcamos Sensitive → OK

  6. Luego podemos agregar otros campos sensibles como la columna de salarios en la tabla de empleados. Hacemos click en +Add, escribimos el esquema o aplicación, la tabla y seleccionamos la columna que queremos marcar. → OK

  7. Así ya tenemos nuestro modelo de datos completo, con relaciones y datos sensibles identificados

C. DEFINICIÓN DE CRITERIOS DE SUBSETTING

  1. Enterprise → Quality Management → Data Subset Definitions

  2. Create

  3. Especificar los datos solicitados → Continue

  4. Especificar los datos del job y las credenciales de conexión a la base de datos fuente → Submit

  5. El Job básicamente identifica cual es el tamaño y número de filas de las tablas involucradas en el modelo de datos. Esperar a que el job finalice en Succeeded (refrescar la página para verificar).

  6. Seleccionar la definición de subset y Edit

  7. En la pestaña Applications, agregar los esquemas de las aplicaciones requeridas para el subset de datos

  8. En la pestaña de Space Estimates se puede ver el tamaño del modelo de datos y más en detalle,  ver el tamaño de los datos de los esquemas y de cada una de las tablas, tanto en la fuente, como el espacio que se espera tenga el subset

  9. Como se ve en la gráfica no hay datos en el subset, pues no se han definido los criterios de subset, lo que se hará ahora. Se observa que el esquema que más espacio ocupa es SH, y que la tabla más grande es Sales, así que se puede partir de los siguientes criterios: HR no va a tener un subset de datos y se tomará solo un porcentaje del 10% de la tabla Sales. En la pestaña de Table Rules crear una regla +Create. La primera regla es incluir todo el esquema HR →OK, para incluir todas las tablas y todos los registros de cada tabla en el esquema.

  10. Ahora vamos a definir la Regla para SH.Sales. Escogemos el esquema SH, una tabla especifica → SALES, definimos un porcentaje 10%, para el subset.

  11. La regla para SH.Sales incluye solo el 10% de los registros, pero el impacto sobre otras tablas se puede ver en Space Estimations. Sales impacta el subset de datos de algunas tablas con las cuales tiene constraints, para las otras tablas se deben agregar más reglas si se quiere que se incluyan los datos.

  12. Se pueden agregar las reglas de las otras tablas que no se han afectado por el subset de SH.Sales

  13. Haciendo click en la pestaña de Datamasking, se ve que se pueden asociar Definiciones de Enmascaramiento, lo que se hará en el siguiente paso. → Return

D. DEFINICIÓN DE FORMATOS DE ENMASCARAMIENTO PARA LOS DATOS SENSIBLES

  1. Hacer click en Create Datamasking Definition

  2. Create

  3. Darle un nombre a la definición de enmascaramiento, agregar el modelo de datos y especificar la fuente → Add

  4. En los criterios de búsqueda, buscar todos los esquemas, para se muestren todos los campos que ya se habían seleccionado como datos sensibles en todos los esquemas

  5. Seleccionar los campos de números telefónicos y hacer click en Define Format and Add

  6. Hacer click en Import Format y seleccionar Telefonos Colombia → Import

  7. Con el formato importado generar una muestra, y hacer click en OK

  8. Ahora se agregará el formato para la columna de Salarios (HR.Employees columna Salary). Add

  9. Buscar la columna y nuevamente Define Format and Add

  10. Ver que en la parte de arriba hay un Warning que indica que el campo debe ser mayor a cero y no nulo, esto se debe tener en cuenta cuando se selecciona el formato del  enmascaramiento.  En este caso seleccionar Random Numbers (verificar de que los valor de iniciales y finales no excedan el tamaño de la columna, y que el número final sea mayor al inicial). → OK

  11. Habilitar todas las columnas, y → OK

  12. Así ya queda creada la definición de enmascaramiento. Ahora hacer click en Generate Script, seleccionar la opción de In-Place Masking y submit the job

  13. Esperar a que se genere el script

  14. Volver a las definiciones de subset y editar la plantilla en la columna de datamasking agregando la definición creada.

  15. Con esto queda completa la definición de Subset → Return

E. GENERACIÓN DEL EXPORT CON SUBSET DE DATOS Y ENMASCARAMIENTO DE DATOS SENSIBLES

  1. Ahora se generará un export con el subset de datos enmascarados. Seleccionar el subset a generar y en Actions seleccionar la opción Generate Subset

  2. Seleccionar la fuente orcl, y Writing Subset Data to Export Files, especificar credenciales de base de datos y de host donde se genera el export → Continue

  3. Se creará un directorio donde generar el export y especificar los datos del export si se quieren cambiar, nombre, hilos de ejecución, encriptación, compresión etc. → Continue → submit

  4. Esperar a que el job finalice, se puede refrescar la página, o en Enterprise → Jobs → Activity, ver aquellos que están en estado Running

  5. Verificar que en la carpeta especificada se están generando los  scripts y export del subset.

  6. Mientras finaliza, se puede ver que la base de datos orcl2 a la que se van a importar los datos no tiene los esquemas creados, y verificar que los tablespaces requeridos para la carga de los datos existan.

    Conectarse a orcl2 y verificar:

    select username from dba_users where USERNAME='HR';
    select username from dba_users where USERNAME='SH';
    select tablespace_name from dba_tablespaces;

    O revisarlo por el OEM 12c

  7. El tablespace requerido para los usuarios de prueba es EXAMPLE, así que es opcional crearlo, o reasignarlo en el momento del import
  8. Una vez finalizado el job, proceder con el import de los datos. Conectarse a la base de datos orcl2, y en Schema → Database Export/Import → Import from Export files

  9. Crear el directorio en donde está el export resultado del subset de datos

  10. Proveer las credenciales de conexión al servidor para la prueba de conexión al directorio. Return → OK
  11. Especificar las condiciones del import, directorio, nombre del archivo, especificar que se va a importar todo el archivo, esquemas, tablas, etc., escribir las credenciales de conexión al servidor de base de datos → Continue

  12. Especificar mapeo durante el import, en este caso, remapear el tablespace EXAMPLE por USERS → Next

  13. Especificar nombre de logs, número de hilos para el import, si hay llaves de encriptacion, y otras características de import, Datos y/o metadatos, qué hacer si una tabla existe, etc. → Next

  14. Completar especificaciones del import, momento de ejecución y repeticiones → Next → Submit Job

  15. Si el job termina con errores, verificar que no tengan que ver con los datos, o información que pueda afectar el ambiente de pruebas. En este caso los errores están relacionados con la creación de una tabla externa y permisos para usuarios que no existen en la base de datos.

  16. Comprobar los datos
    select Employee_id, phone_number, salary from hr.employees
    WHERE ROWNUM <=10
    order by 1;

         Destino                                                                                                                 Fuente

    select count(*) from sh.sales;

    Destino                                                                                                                                        Fuente

    select count(*) from sh.customers;

    Destino                                                                                                                                Fuente En estos dos selects se ve cómo para SH.Customers se traen menos registros, por lo tanto el resultado es diferente, y los datos han sido enmascarados para los registros que fueron llevados como parte del subset de datos.

    select CUST_ID,CUST_MAIN_PHONE_NUMBER from sh.customers 
    WHERE ROWNUM <=10
    order by 1;

    Destino                                                                                                                Fuente

    select CUST_ID,CUST_MAIN_PHONE_NUMBER from sh.customers 
    WHERE CUST_ID in (1457,1462,6790);

    Destino                                                                                                            Fuente

ANEXO 1: Creación de una Plantilla de Enmascaramiento Personalizada

  1. Seleccionar Enterprise → Quality Management → Data Masking Formats

  2. Hacer Click en Create

  3. Hacer las descripciones del formato → OK

    En este caso se creará al formato Telefonos Colombia que se compone de 3 partes:

  • El indicativo, un numero fijo 57
  • La zona un numero variable entre 1 y 9
  • Y el telefono local un numero aleatorio entre 2000000 y 7999999

ANEXO 2: FAQs

  • ¿Qué Puede afectar el desempeño y el tiempo de respuesta de un procesos de enmascaramiento y subset?

                Los factores que pueden incidir en el tiempo de respuesta son:

  • Número de CPUs Cores en el EM y la base de datos destino
  • Memoria en el EM y en la base de datos destino
  • La SGA en el EM y en la base de datos destino
  • EM OMS Heap Size (JAVA_EM_MEM_ARGS).
  • Grados de paralelismo del servidor donde se genera el In-export
  • Número hilos en paralelo usados para el In-Export
  • Formatos de enmascaramiento
  • Número de tablas. Columnas, registros y relaciones
  • ¿Qué puede definir el almacenamiento requerido para el proceso de enmascaramiento?
  • El uso de In-Database o In-Export
  • El número y tamaño de columnas a enmascarar
  • Número y tamaño de tablas dependientes
  • Tipo de enmascaramiento y formatos usados
  • Enmascarameinto de tablas con Long Columns
  • ¿Qué puede definir el almacenamiento requerido para el proceso de subsetting?
    • El uso de In-Database o In-Export
    • Número y tamaño de tablas dependientes
    • Si el enmascaramiento es rapido o detallado
  • Escenarios de almacenamiento requerido:
    • In-Database Masking reporta el espacio requerido en el reporte de impacto después de la generación del script
      • 3X de espacio adicional en el tablespace de usuario (siendo X la tabla más grande)
      • 2X de espacio adicional en el tablespace temp
    • In-Export Masking requiere:
      • 2X de espacio adicional en el tablespace de usuario
      • 2X de espacio adicional en el tablespace temp
      • Espacio en disco suficiente para almacenar el archivo dump generado por el export
    • In-Database Subsetting requiere:
      • 2X de espacio adicional en el tablespace de ususario
      • 2X de espacio adicional en el tablespace temp
    • In-Export Subsetting requires:
      • X de espacio adicional en el tablespace
      • Espacio en disco suficiente para almacenar los archivo dump generados

ANEXO 3: Buenas Prácticas

  • Durante la implementacion:
    • Probar las tareas de backup y restore con el usario que va a usar funciones antes de hacer los procecedimientos de enmascaramiento y subsetting
    • Garantizar que se cuente con suficiente espacio de almacenamiento
    • Utilizar la opcion de preview para asegurar que los resultados de enmascaramiento seran los óptimos
    • Asegurar que los tablespaces de system, users, temporal y undo esten en autoextend
    • Utilizar comando de linea (EMCLI) para automatizar procesos de enmascaramiento y subsetting desde el back end
  • Para el desempeño
    • Afinar el I/O de la base de datos destino
    • Mantener parchado el Oracle Enterprise Manager (Patch 18138078) y la base de datos destino (Patch 11843466) cuando sea posible (Bases de datos 11gR2 y anteriores)
    • Aplicar el patch de enmascaramiento encriptado (Patch 19422825) al Oracle Enterprise Manager
    • Usar paralelismo cuando sea posible
    • Utilizar el SQL Tuning Advisor cuando se encuentren procesos demasiado demorados
  • Usar el mayor numero de hilos que sea posible al usar el procedimiento de In-Export (At-Source),
  • Actualizar las estadisticas de la base de datos fuente antes del descubrimiento, enmascaramiento y subset de datos, o seleccionar “Scan Empty Tables” durante el discovery del modelo de datos

  • Agrupar columnas relacionadas para el enmascaramiento

  • Asegurar que se cuente con recursos apropiados de CPU, SGA y PGA, tanto en la base de datos del OEM como en la destino
  • Deshabilitar la generación de redo durante el proceso de enmascaramiento
  • Deshabilitar “Refresh statistics after masking” dentro de la definicion de enmascaramiento
  • Deshabilitar “Recompile invalid dependent objects after masking”
  • Usar la opción de “temporary tablespace” dentro de la definición de enmascaramiento, crear un temporary tablespace como parte del script de enmascaramiento y borrarlo al final de proceso
  • Usar Data Subsetting antes de ejecutar un proceso de enmascaramiento

Ana Gamba Olmos (ana.gamba@oracle.com), actualmente se desempeña como Senior Sales Consultant - DB Specialist en Oracle Enterprise Accounts

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.