Oracle Database 12c: Data Redaction

Por OraWorld
Publicado en Junio 2014

“Oracle Data Redaction” es una de las nuevas características en “Oracle Database 12c”. Esta nueva característica es parte del paquete “Advance Security” y permite proteger los datos mostrados al usuario en tiempo real, sin necesidad de realizar modificaciones en la aplicación.

“Oracle Database 12c” aplica la protección de los datos en tiempo de ejecución, cuando los usuarios intentan acceder los datos, es decir, los datos son protegidos en el momento en que la consulta es realizada. Los datos almacenados permanecen incambiables, mientras los datos para ser mostrados son transformados y son los que el cliente verá como resultado de su consulta.

Desde la versión 11g, existe el “Oracle Data Masking”.Cuando se usa esta opción los datos son procesados usando formas de enmascarado, esto altera físicamente los datos almacenados y los almacena en nuevos bloques de datos, es decir, destruye los datos originales.

Abajo son algunas otras características que ya existen para ayudar a hacer los datos más seguros:

  • Virtual Private Database (VPD): Permite controlar el acceso a nivel de filas y columnas, agregando una clausula dinámica “WHERE” en la sentencia SQL.
  • Oracle Label Security: Permite agregar valores definidos por el usuario para los registros y usar VPD para controlar el acceso basado en esos valores.
  • Database Vault: “Oracle Data Redaction” no interviene en que los usuarios privilegiados tales como DBAs tengan acceso al contenido de las columnas que están protegidas. Para resolver esto, se puede usar “Oracle Database Vault”.

 Considerando los problemas de licenciamiento, “Oracle Data Masking” está disponible únicamente en la versión “Enterprise” de “Oracle Database” y también está disponible con la adquisición de “Oracle Advanced Security”.

¿Cómo trabaja Oracle Data Redaction?

“Oracle Data Redaction” trabaja con políticas de enmascarado que básicamente se encargan de crear una condición que se debe cumplir para que los datos sean enmascarados. Se debe especificar también la columna de la tabla y el tipo de protección que se utilizará.

El paquete usado para crear reglas de protección es llamado “DBMS_REDACT” el cual incluye 5 procedimientos para manejar dichas reglas y otros procedimientos para cambiar los valores de facto de la politica de redacción completa.

DBMS_REDACT.ALTER_POLICY:           Permite cambiar laspolíticas existentes.

DBMS_REDACT.DISABLE_POLICY:       Deshabilita una política existente.

DBMS_REDACT.DROP_POLICY:            Elimina una política existente.

DBMS_REDACT.ENABLE_POLICY:        Habilita una política existente.

DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES:  Cambia el valor de retorno de facto para la redacción completa. Se necesita reiniciar la base de datos para que tome efecto.

Los datos son protegidos haciendo uso de los siguientes métodos:

  • Full Redaction: Todo el contenido de la columna es protegida y el tipo de valor retornado depende del tipo de dato de la columna. Para campos numéricos, el valor “0” será retornado; para campos de tipo carácter, un espacio será retornado. Esta configuración puede ser cambiada a nivel de la base datos.
  • PartialRedaction: Únicamente una parte de la información es transformada, por ejemplo, los primeros dígitos de la tarjeta de crédito podrían cambiarse por asteriscos.
  • Regular Expression: Se puede proteger la información haciendo uso de una expresión regular para buscar patrones de datos.
  • RandomRedaction: Los valores retornados son aleatorios, en cada momento una consulta obtendrá datos transformados diferentes.
  • No Redaction: No realizará transformaciones en los datos, permitirá poner a prueba el funcionamiento interno de la política, sin efectos en los resultados de las consultas en las tablas. Esto es utilizado para probar las políticas antes de situarlas en producción.

 

“Oracle Data Redaction” ayuda a cumplir con estándares de seguridad, tales como “PaymentCardIndustry Data Security Standard (PCI DSS)” y “Sarbanes-Oxley”.

“Oracle Data Redaction” puede ser usado con los siguientes tipos de columnas: NUMBER, BINARY_FLOAT, BINARY_DOUBLE, CHAR, VARCHAR2,NCHAR,NVARCHAR2, DATE,TIMESTAMP, TIMESTAMP WITH TIME ZONE, BLOB, CLOB y NCLOB.

Vistas útiles:

Las siguientes vistas del diccionario de datos pueden ser utilizadas para obtener información sobre cómo “Oracle Data Redaction” está trabajando.

  • REDACTION_POLICIES
  • REDACTION_COLUMNS
  • REDACTION_VALUES_FOR_TYPE_FULL

Data Redaction y Data Pump:

El rol “DATAPUMP_EXP_FULL_DATABASE”  incluye el privilegio “EXEMPT REDACTION POLICY” con el cual, un DBA al exportar tablas, estará exportando los datos originales y no los datos enmascarados.

Si se intenta exportar una tabla sin tener el privilegio “EXEMPT REDACTION POLICY” se recibirá el siguiente error:

ORA-28081: Insufficient privileges - the command references a redacted object.

Para exportar los metadatos relacionados a las políticas de “Oracle Data Redaction” se puede usar los siguientes parámetros de “expdp”:

  • CONTENT=METADATA_ONLY
  • INCLUDE=RADM_FPTM,RADM_POLICY

Oracle Data Redaction y CREATE TABLE AS SELECT (CTAS):

Un usuario no puede crear una tabla haciendo un “SELECT” desde una tabla con una política activa. La forma de lograr esto es que el usuario tenga el privilegio para ver los valores originales.

Usando “Oracle Data Redaction” con EM 12c:

Accediendo a la opción “Oracle Data Redaction”:

Pantalla de manejo de políticas:

Creando una política para no mostrar el salario, si el usuario del sistema no es el supervisor:

Verificar la política creada:



[oracle@dibutu ~]$ sqlplus funcionario/senha@localhost:1521/testpdb

SQL*Plus: Release 12.1.0.1.0 Production on Wed Apr 2 10:22:46 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL> select EMPLOYEE_ID, FIRST_NAME, SALARY from hr.employees WHERE ROWNUM < 5;

EMPLOYEE_ID FIRST_NAME               SALARY
----------- -------------------- ----------
        100 Steven                        0
        101 Neena                         0
        102 Lex                           0
        103 Alexander                     0

Verificar la misma tabla, ahora con el usuario “SUPERVISOR”:


[oracle@dibutu ~]$ sqlplus supervisor/senha@localhost:1521/testpdb

SQL*Plus: Release 12.1.0.1.0 Production on Wed Apr 2 10:26:04 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL> select EMPLOYEE_ID, FIRST_NAME, SALARY from hr.employees WHERE ROWNUM < 5;

EMPLOYEE_ID FIRST_NAME               SALARY
----------- -------------------- ----------
        100 Steven                    24000
        101 Neena                     17000
        102 Lex                       17000
        103 Alexander                  9000


Crear la misma política usando SQL*Plus



SQL> 
BEGIN
DBMS_REDACT.ADD_POLICY  
(OBJECT_SCHEMA => 'HR',  object_name => 'EMPLOYEES',  policy_name => 'POLITICA_TESTE',  
expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') != ''SUPERVISOR''');
DBMS_REDACT.ALTER_POLICY  
(OBJECT_SCHEMA => 'HR',  object_name => 'EMPLOYEES',  policy_name => 'POLITICA_TESTE',  
action => DBMS_REDACT.ADD_COLUMN,  column_name => '"SALARY"',  function_type => DBMS_REDACT.FULL );
END;
/
PL/SQL procedure successfully completed.

Crear la misma política usando SQLDeveloper:

OraWorld es un grupo que está constantemente trabajando con la comunidad de Oracle a través de artículos, conferencias, seminarios y cursos de Oracle Database. Los miembros OraWorld poseen "Certified Masters Oracle" y certificación "Oracle ACE".

Usted puede seguir este grupo a través de los siguientes links:

https://www.facebook.com/oraworldteam

https://twitter.com/oraworld_team

http://www.oraworld-team.com