DBMS_REDACT
O que é?
DBMS_REDACT é uma package do 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 Oracle 12c vem com a package DBMS_REDACT, onde podemos escolher as informações de 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 proximo 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', -- Nome da política
object_schema => 'HR', -- Usuário que tem os dados ocultados
object_name => 'EMPLOYEES', -- Tabela que tem os dados ocultados
column_name => 'SALARY', -- Coluna que terá os dados ocultados
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 está package pode ser bastante útil no nosso dia a dia no que se diz respeito as políticas de segurança da informação, como PCI, PII, PHI 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!
Obrigado pela dica!
Muito mais prático do que usar um TDM, a empresa em que trabalho utiliza nos bancos de homologação.
Isso aí… Oracle 12c e suas novas funcionalidades!
Grato pelo comentário.