Oracle Data Redaction nos provee mecanismos para definir políticas de enmascaramiento de datos en nuestras aplicaciones. Data Redaction enmascara (redacta) los datos retornados por nuestros queries. Hace un par de días, vimos una introducción a Oracle Data Redaction junto a un ejemplo sencillo de enmascaramiento de datos utilizando el paquete DBMS_REDACT. En dicho ejemplo habíamos creado una tabla con datos de CLIENTES y luego habíamos enmascarado la columna TARJETA_DE_CREDITO. El enmascaramiento lo habíamos hecho a través de una política que permitía que solo el usuario GERENTE pudiera ver los datos sin ningún tipo de enmascaramiento. Hagamos un repaso de lo que ven los usuarios GERENTE y VENDEDOR: PDB1@ORCL> conn gerente/gerente Connected. PDB1@ORCL> select * from clientes 2 / CODIGO NOMBRE TARJETA_DE_CREDITO ---------- ------------------- ------------------- 1 Fernando 1234-5678-1234-5678 2 Pablo 1234-4321-4321-1234 PDB1@ORCL> conn vendedor/vendedor Connected. PDB1@ORCL> select * from clientes 2 / CODIGO NOMBRE TARJETA_DE_CREDITO ---------- ------------------- ------------------- 1 Fernando 2 Pablo Hasta aquí, todo perfecto. Solamente el usuario GERENTE puede ver los datos sin enmascarar. Pero, ¿qué ocurre con usuarios privilegiados como SYS y SYSTEM? Veamos... PDB1@ORCL> conn sys/oracle as sysdba Connected. PDB1@ORCL> select * from clientes 2 / CODIGO NOMBRE TARJETA_DE_CREDITO ---------- -------------------- ------------------- 1 Fernando 1234-5678-1234-5678 2 Pablo 1234-4321-4321-1234 PDB1@ORCL> conn system/oracle Connected. PDB1@ORCL> select * from clientes 2 / CODIGO NOMBRE TARJETA_DE_CREDITO ---------- -------------------- ------------------- 1 Fernando 1234-5678-1234-5678 2 Pablo 1234-4321-4321-1234 El enmascaramiento no ha funcionado para estos usuarios privilegiados. ¿Por qué? ¿Cómo puedo hacer para saber el alcance de Data Redaction? Para responder a esta pregunta, es vital conocer el modelo de seguridad de Data Redaction. El secreto está en el privilegio de sistema EXEMPT REDACTION POLICY. Si el usuario tiene el privilegio de sistema EXEMPT REDACTION POLICY, entonces el enmascaramiento no funcionará para dicho usuario. Veamos quiénes tienen asignado dicho privilegio de sistema: PDB1@ORCL> select grantee from dba_sys_privs 2 where privilege = 'EXEMPT REDACTION POLICY' 3 / GRANTEE --------------------- EXP_FULL_DATABASE EXP_FULL_DATABASE es un rol. Todos los usuarios que tengan dicho rol estarán exceptuados a la hora del enmascaramiento. ¿Qué usuarios (y/o roles) tienen asignado dicho rol? Veamos: PDB1@ORCL> select grantee from dba_role_privs 2 where granted_role = 'EXP_FULL_DATABASE' 3 / GRANTEE ----------------------------- SYS DATAPUMP_EXP_FULL_DATABASE DBA DATAPUMP_IMP_FULL_DATABASE A priori, podríamos concluir que SYS ve los datos de las tarjetas de crédito porque posee el rol EXP_FULL_DATABASE, que a su vez tiene el privilegio de sistema EXEMPT REDACTION POLICY. En cambio SYSTEM hereda el privilegio por su rol DBA. Quitemos por unos minutos el privilegio EXEMPT REDACTION POLICY del rol EXP_FULL_DATABASE y veamos qué ocurre. PDB1@ORCL> conn sys/oracle as sysdba Connected. PDB1@ORCL> alter session set container=CDB$ROOT 2 / Session altered. PDB1@ORCL> revoke exempt redaction policy from exp_full_database container = all 2 / Revoke succeeded. PDB1@ORCL> conn system/oracle Connected. PDB1@ORCL> select * from clientes 2 / CODIGO NOMBRE TARJETA_DE_CREDITO ---------- ---------------------- ------------------- 1 Fernando 2 Pablo PDB1@ORCL> conn sys/oracle as sysdba Connected. PDB1@ORCL> select * from clientes 2 / CODIGO NOMBRE TARJETA_DE_CREDITO ---------- ---------------------- ------------------- 1 Fernando 1234-5678-1234-5678 2 Pablo 1234-4321-4321-1234 Quitando el privilegio EXEMPT REDACTION POLICY al rol EXP_FULL_DATABASE hemos logrado que el enmascaramiento se aplique también al usuario SYSTEM. No ocurrió lo mismo con el usuario SYS que está exento de todas las políticas de datos de redacción por el solo hecho de ser SYS. Por supuesto que todo esto es una prueba a fin de poder comprender mejor el modelo de seguridad de Data Redaction. No es aconsejable modificar los privilegios de sistema que vienen asignados por defecto. Por lo tanto voy a deshacer el cambio: PDB1@ORCL> conn sys/oracle as sysdba Connected. PDB1@ORCL> alter session set container=CDB$ROOT 2 / Session altered. PDB1@ORCL> grant exempt redaction policy to exp_full_database container = all 2 / Grant succeeded. PDB1@ORCL> conn system/oracle Connected. PDB1@ORCL> select * from clientes 2 / CODIGO NOMBRE TARJETA_DE_CREDITO ---------- --------------------- ------------------- 1 Fernando 1234-5678-1234-5678 2 Pablo 1234-4321-4321-1234 PDB1@ORCL> Listo. Con esta prueba hemos podido ver el alcance de Oracle Data Redaction a usuarios privilegiados como SYS y SYSTEM. Nos vemos!
↧