Funcionalidade Data Redaction - Oracle Database 12c

Por OraWorld
Postado em Maio 2014

No Oracle Database 12c, foi introduzida uma nova funcionalidade, chamada de Oracle Data Redaction. Esta nova funcionalidade faz parte do pacote Advanced Security e permite a proteção dos dados mostrados ao usuário em tempo real, sem necessidade de modificações na aplicação.

O Oracle Database 12c aplica a proteção em tempo de execução, no momento em que os usuários do aplicativo tentam acessar os dados, isto se chama at query-execution time. Os dados armazenados permanecem inalterados, enquanto os dados a serem exibidos são transformados on-the-fly antes de deixarem o banco de dados.

Desde a versão 11G, existe o Oracle Data Masking, onde os dados são transformados usando formatos de máscaras e este dado mascarado atualizado é armazenado em novos blocos de dados. Isto é adequado para ambientes de não-produção (desenvolvimento, homologação, treinamento, etc)

Segue abaixo algumas outras features que já existiam para auxiliar a tornar os dados mais seguros:

  • Virtual Private Database (VPD)  - permite controlar os acessos em nível de registro e coluna, adicionando uma cláusula WHERE dinâmica em uma instrução SQL.
  • Oracle Label Security – Permite adicionar valores definidos pelo usuário para os registros e usar o VPD para controlar o acesso com base nestes valores.
  • Database Vault – o Data Redaction não impede que usuários privilegiados como DBAs não tenham acesso ao conteúdo das colunas que estão sendo protegidas. Para resolver isso, pode-se utilizar o Database Vault.

Considerando as questões de licenciamento, o Oracle Data Masking só está disponível no banco Enterprise Edition e com a aquisição do pacote Advanced Security.

Como funciona:

Podemos criar redaction policies que basicamente gerenciam que condição deve ser atendida antes dos dados serem protegidos, quais colunas da tabela e o tipo de proteção.

A package utilizada para criar as regras de proteção se chama DBMS_REDACT, que inclui 5 procedures para gerir as regras e mais uma procedure para alterar o valor default da full redaction policy.

  • DBMS_REDACT.ALTER_POLICY – permite fazer mudanças nas políticas existentes.
  • DBMS_REDACT.DISABLE_POLICY – desativa uma política existente.
  • DBMS_REDACT.DROP_POLICY – elimina uma política existente.
  • DBMS_REDACT.ENABLE_POLICY – ativa uma política existente.
  • DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES – altera o valor default de retorno para full redaction. É necessário reiniciar o banco de dados para ter efeito.

Você pode proteger os dados da coluna, utilizando um dos seguintes métodos:

  • Full redaction – Todo conteúdo da coluna é protegido e o tipo de valor devolvido depende do tipo de dados da coluna. Para campos numéricos, será devolvido o valor zero, para campos do tipo character, será devolvido um espaço. Essa definição pode ser alterada a nível de banco de dados.
  • Partial redaction – Apenas uma parte da informação é alterada, como por exemplo, os primeiros dígitos do número de cartão de crédito são trocados por asterisco.
  • Regular expressions - Você pode usar expressões regulares para procurar padrões de dados para proteger.
  • Random redaction – os valores retornados são aleatórios; cada vez que é feita uma consulta os valores retornados são diferentes.
  • No redaction - permite testar o funcionamento interno de suas políticas de redação, sem nenhum efeito sobre os resultados das consultas em tabelas. Muito utilizado para testar as políticas antes de colocar em produção.

O Data Redaction pode ajudar a cumprir com as regulamentações de segurança, como Payment Card Industry Data Security Standard (PCI DSS) e da Lei Sarbanes-Oxley.

O Data Redaction pode ser utilizado com os seguintes tipos de colunas: NUMBER, BINARY_FLOAT, BINARY_DOUBLE, CHAR, VARCHAR2, NCHAR, NVARCHAR2, DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, BLOB, CLOB e NCLOB.

Views do dicionário:

Podemos utilizar as seguintes views do dicionário de dados do Oracle para obter informações sobre o Oracle Data Redaction:

  • REDACTION_POLICIES
  • REDACTION_COLUMNS
  • REDACTION_VALUES_FOR_TYPE_FULL 

Data Redaction e o utilitário Data Pump:

A role DATAPUMP_EXP_FULL_DATABASE inclui o privilégio de sistema EXEMPT REDACTION POLICY. Com isso, um DBA ao exportar as tabelas, estará exportando os dados reais e não os mascarados.

Se você tentar exportar uma tabela sem ter o privilégio EXEMPT REDACTION POLICY, receberá o seguinte erro:

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


Para exportar apenas os metadados relacionados com as políticas do Oracle Data Redaction, você pode usar os seguintes parâmetros do EXPDP:

CONTENT=METADATA_ONLY
INCLUDE=RADM_FPTM,RADM_POLICY

Data Redaction e Create tables as select (CTAS):

Um usuário não pode criar uma tabela fazendo SELECT a partir de uma tabela com uma policy ativa, se ele não tiver privilégio para ver os valores mascarados

PDB utilizada para os exemplos com o EM12c:



Acessando o Oracle Data Redaction:




Tela de gerenciamento das políticas:



Criando uma política para não mostrar o salário, caso o usuário do sistema não seja o Supervisor:



Verificando se a política funciona:

[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

Verificando a mesma tabela, agora com o usuário 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

Criando a mesma política utilizando o 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.

Criando a mesma política utilizando o SQLDeveloper:



OraWorld é um grupo que está constantemente trabalhando com a comunidade Oracle por meio de artigos, conferências, webinars e cursos de Banco de Dados Oracle. O OraWorld possui membros "Oracle Certified Masters" e "Oracle ACEs".

Você pode seguir este grupo através dos seguintes links:
https://www.facebook.com/oraworldteam
https://twitter.com/oraworld_team
http://www.oraworld-team.com