O que é?

DBMS_REDACT é uma package (introduzida no Oracle 12c) que nos oferece a capacidade de ocultar dados sensíveis de usuários não privilegiados, exemplo:  usuários de um departamento de RH podem precisar de ver os dados dos funcionários de uma empresa, mas não necessariamente o salário de cada um, isso via de regra seria inerente somente a quem tem essa incumbência. Outro exemplo seriam usuários que tratam de determinado sistema que trabalhe com informações de cartões de credito, o número do cartão dos clientes jamais deve ser revelado.

Para atender essa demanda o banco de dados Oracle (a partir da versão 12c) vem com a package DBMS_REDACT, onde podemos escolher as informações que devem ser ocultadas e o melhor, de quem elas devem ser ocultadas (na minha modesta opinião a principal vantagem).

Como se usa?

A DBMS_REDACT é uma package relativamente simples e prática de se trabalhar, abaixo vejamos uma breve descrição de suas capacidades.

DBMS_REDACT.ADD_POLICY: Adiciona uma nova política.

DBMS_REDACT.ENABLE_POLICY: Habilita uma política já existente.

DBMS_REDACT.ALTER_POLICY: Altera uma política já em execução.

DBMS_REDACT.DISABLE_POLICY: Desabilita uma política já em execução.

DBMS_REDACT.DROP_POLICY: Elimina uma política.

Ao escolher criar uma nova política, precisaremos saber basicamente qual o schema será executado o processo de ocultação de dados, qual a tabela e qual a coluna. Uma vez que se definiram esses pontos, agora é preciso se definir como ocultar os dados (toda a informação ou somente parte dela), isso pode ser feito baseado em FUNCTION_TYPE, FUNCTION_PARAMETERS ou expressões regulares via REGEXP_*. Abaixo uma pequena amostra de como ficaria.

Tipo de ocultação Informação armazenada Informação exibida
Full Redaction 24/05/1975 01/01/01 ou XXXXXXXX
Partial Redaction 068-35-255 ***-**-255 ou 6**-**-255
Regular expression douglas@oradata.com.br [xxxxxxx]@oradata.com
Random Redaction 4022-5231-5531-9855 4943-6344-0547-0110

Agora, mão na massa! Vamos criar uma política de mascaramento de dados como exemplo. Neste caso, vamos usar a tabela EMPLOYEES do usuário HR, criando uma política que oculte a visualização das informações da coluna SALARY para qualquer usuário que tenha direitos de leitura na tabela e que não seja o usuário HR. Lets take a look!

O primeiro passo, é verificar os dados sem mascaramento, então executemos a query abaixo:

select first_name, last_name, job_id, salary from hr.employees where job_id = 'IT_PROG';

Neste caso, podemos ver todas as informações, pois ainda não aplicamos o mascaramento dos dados. Uma dica útil é consultar a view “redaction_policies” (logado como SYSDBA) para checar se há alguma política já ativa (o que não é nosso caso). Mas como podemos ver as informações estão aí visíveis para quem tiver acesso, o próximo passo é executar o mascaramento das informações.

Agora a package DBMS_REDACT entra em ação, vamos criar uma política chamada “EMPSAL_POLICY” em que os dados da coluna SALARY sejam ocultados de outros usuários diferentes do usuário HR (owner da tabela) e que tenham privilégios de leitura a esta tabela.

DBMS_REDACT.ADD_POLICY
(policy_name => 'EMPSAL_POLICY',
object_schema => 'HR',
object_name => 'EMPLOYEES',
column_name => 'SALARY',
expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'')!=''HR''',
function_type => DBMS_REDACT.FULL);

Para ter certeza de que a política foi criada, agora é uma boa hora para consultar a view “redaction_policies”.


Agora que a política foi criada, basta efetuarmos alguns testes para comprovar sua eficácia. Para isso dê permissão de leitura na tabela EMPLOYEES do usuário HR para outro usuário (por exemplo, ao usuário SH) e execute um select na referida tabela.

Visto que toda consulta feita na tabela EMPLOYEES a coluna SALARY omitirá a informação verdadeira, podemos então fazer a contra prova, repetindo a mesma consulta, mas agora com o próprio usuário HR e vejamos o que se passa.

Repare que os dados não estão sendo ocultados, pois na nossa política de ocultação de informações definimos que somente quando forem feitas consultas por outros usuários as informações serão ocultadas. Enfim esta package pode ser bastante útil no nosso dia a dia no que se diz respeito às políticas de segurança da informação, como PCI, SOX entre outras, esta foi uma pequena amostra do que se pode fazer, para maiores detalhes explore a documentação oficial da Oracle.

É isso aí, espero ter ajudado. Forte Abraço e até a próxima!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *