Oracle Live

11/04/2016

Data Masking

Filed under: New 12c — mogukiller @ 10:45 pm

'Teoria: Consiste en enmascarar los datos sensibles de una tabla
Tipos:
	- Full: Cambia todas los datos de una columna.
		Caracteres a blanco.
		Numeros a 0
		Fechas a una fecha dada.
	- Partial: Se enmascara parte del valor de la columna.
	- Random: Reemplazamos el valor total de la columna cambiandola por datos aleaotrios.
Paquete: DBMS_REDACT
'


'nota: Partimos de un usuario test_user que tiene privilegios de lectura sobre una tabla de mogu'

1.-- Creamos una politica de enmascarado que queda habilitada inmediatamente.

BEGIN
   DBMS_REDACT.ADD_POLICY(
     object_schema        => 'MOGU',
     object_name          => 'PRUEBAS',
     column_name          => 'ID_PRUEBA',
     policy_name          => 'mask_id_prueba',
     function_type        => DBMS_REDACT.FULL,
     expression           => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''TEST_USER''');
END;

-- Ejemplo:

SQL>select * from mogu.pruebas;
/*
 ID_PRUEBA PRUEBA
---------- -------
         1 AAAA
*/
'nota: Habilitamos la politica desde SYS.'
SQL>select * from mogu.pruebas;
/*
 ID_PRUEBA PRUEBA
---------- -------
         0 AAAA
*/

SELECT A.ID_PRUEBA, A.PRUEBA FROM MOGU.PRUEBAS A, MOGU.PRUEBAS1 B WHERE A.ID_PRUEBA=B.ID_PRUEBA;
/*
 ID_PRUEBA PRUEBA
---------- -------
         0 AAAA		<<<<< Los datos so lo se enmascaran en la visualizacion no en el predicado.
*/


-- Habilitamos / Deshabilitamos las politicas

BEGIN
   DBMS_REDACT.ENABLE_POLICY (
      object_schema    =>  'MOGU',
      object_name      =>  'PRUEBAS',
      policy_name      =>  'mask_id_prueba');
END;
/

BEGIN
   DBMS_REDACT.DISABLE_POLICY (
      object_schema    =>  'MOGU',
      object_name      =>  'payment_details',
      policy_name      =>  'redact_card_info');
END;
/

-- Borramos las politicas.

BEGIN
   DBMS_REDACT.DROP_POLICY (
      object_schema    =>  'MOGU',
      object_name      =>  'payment_details',
      policy_name      =>  'redact_card_info');
END;
/

-- Para saber que politicas de enmascaramiento tengo activas.

SELECT POLICY_NAME, ENABLE FROM redaction_policies;
/*
OBJECT_OWN OBJECT_NAME            POLICY_NAME                              ENABLE
---------- ---------------------- ---------------------------------------- -------
MOGU       PRUEBAS                mask_id_prueba                           NO
MOGU       PAYMENT_DETAILS        redact_card_info                         NO
*/
----------------------------------------------
-- Ejemplo de enmascaramiento parcial.
----------------------------------------------

CREATE TABLE payment_details (
  id          NUMBER       NOT NULL,
  customer_id NUMBER       NOT NULL,
  card_no     NUMBER       NOT NULL,
  card_string VARCHAR2(19) NOT NULL,
  expiry_date DATE         NOT NULL,
  sec_code    NUMBER       NOT NULL,
  valid_date  DATE
) TABLESPACE DATOS;

INSERT INTO payment_details VALUES (1, 4000, 1234123412341234, '1234-1234-1234-1234', TRUNC(ADD_MONTHS(SYSDATE,12)), 123, NULL);
INSERT INTO payment_details VALUES (2, 4001, 2345234523452345, '2345-2345-2345-2345', TRUNC(ADD_MONTHS(SYSDATE,12)), 234, NULL);
INSERT INTO payment_details VALUES (3, 4002, 3456345634563456, '3456-3456-3456-3456', TRUNC(ADD_MONTHS(SYSDATE,12)), 345, NULL);
INSERT INTO payment_details VALUES (4, 4003, 4567456745674567, '4567-4567-4567-4567', TRUNC(ADD_MONTHS(SYSDATE,12)), 456, NULL);
INSERT INTO payment_details VALUES (5, 4004, 5678567856785678, '5678-5678-5678-5678', TRUNC(ADD_MONTHS(SYSDATE,12)), 567, NULL);
COMMIT;

GRANT SELECT ON MOGU.payment_details TO TEST_USER;

'nota: Enmascaramos full de la targeja de credito'
BEGIN
  DBMS_REDACT.add_policy(
    object_schema => 'MOGU',
    object_name   => 'payment_details',
    column_name   => 'card_no',
    policy_name   => 'redact_card_info',
    function_type => DBMS_REDACT.full,
    expression    => '1=1'
  );
END;
/

'nota: Enmascaramos de forma parcial card_string'

BEGIN
  DBMS_REDACT.alter_policy (
    object_schema       => 'MOGU',
    object_name         => 'payment_details',
    policy_name         => 'redact_card_info',
    action              => DBMS_REDACT.add_column,
    column_name         => 'card_string',
    function_type       => DBMS_REDACT.partial,
    function_parameters => 'VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,#,1,12'
  );
END;
/

-- desde test_user probamos.

ALTER SESSION SET nls_date_format='DD-MON-YYYY';
COLUMN card_no FORMAT 9999999999999999

SELECT * FROM   mogu.payment_details ORDER BY id;

/*
        ID CUSTOMER_ID           CARD_NO CARD_STRING         EXPIRY_DATE   SEC_CODE VALID_DATE
---------- ----------- ----------------- ------------------- ----------- ---------- -----------
         1        4000                 0 ####-####-####-1234 30-JAN-2017        123
         2        4001                 0 ####-####-####-2345 30-JAN-2017        234
         3        4002                 0 ####-####-####-3456 30-JAN-2017        345
         4        4003                 0 ####-####-####-4567 30-JAN-2017        456
         5        4004                 0 ####-####-####-5678 30-JAN-2017        567
*/

1 comentario »

  1. […] Se puede acceder al laboratorio de Data Redaction aqui […]

    Pingback por CAP 4.- Security New Features | Oracle Live — 12/04/2016 @ 6:30 pm


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Blog de WordPress.com.

A %d blogueros les gusta esto: