Mascarar dados em ambientes de teste e desenvolvimento é uma ótima prática para garantir a privacidade de dados sensíveis como, por exemplo: números de cartões de crédito, nomes de clientes, números de documentos, números de contas, etc.
O Infosphere Optim Data Privacy Solution é utilizado para manter a privacidade dos dados em ambientes de teste e desenvolvimento, utilizando dados fictícios porém válidos. Este artigo demonstra algumas das principais técnicas utilizadas para mascarar dados de acordo com o seu tipo, utilizando exemplos práticos.
As técnicas de mascaramento apresentadas neste artigo podem ser aplicadas com:
Expressões:
- Literais
- Nulas
- Números Sequencias ou Randômicos
- Substrings e Concatenação
Funções:
- Operações Matemáticas
- Funções de Data
- Rotinas Externas
- Propagação para Foreign Keys
Lookups:
- Utilização das tabelas de Data Privacy do Infospehere Optim
O processo de mascaramento usando o Infosphere Optim inicia-se com a definição de um table map e seus column maps.
O table map determina quais tabelas serão mapeadas nos processos de Convert, Create, Insert ou Restore. Através do table map é possível determinar se a tabela a ser processada incluirá as tabelas filho e/ou outras tabelas durante o processo.
O colum map determina quais colunas serão incluídas no processo e como estas colunas serão mapeadas no destino. Os processos de Convert, Create, Insert, Load ou Restore devem referenciar um table map, que por sua vez pode ter um ou mais column maps.
É durante a configuração do column map que as técnicas de mascaramento são definidas.
A Figura 1 demonstra um exemplo de column map. Nela podemos ver, na parte superior, as tabelas origem e destino. O nome da tabela é dividido em três partes: nome do banco.schema.nome da tabela.
Na parte inferior, temos as colunas tanto na origem, quanto no destino e seu status. É na parte inferior, do lado das colunas de origem aonde definimos a técnica de mascaramento a ser aplicada.
Figura 1. Column Map.
Vizualização maior da figura 1.
Mascaramento com expressões literais
O mascaramento com expressões literais pode ser utilizado para mascarar o conteúdo de campos com strings, sejam numéricas, alfa-numéricas ou datas por exemplo.
Campos que contenham nomes, sobrenomes, datas, códigos e muitos outros tipos, podem ser mascarados utizando-se esta técnica.
A técnica consiste em fixar um valor para todas as ocorrências. Por exemplo, deseja-se mascarar o conteúdo do campo nome do cliente, substituindo o nome real pela palavra "OCULTO" e a cidade deverá ser substituída por "Gotham City". Para atingir este objetivo é necessário substituir o nome da coluna na origem pela expressão desejada com aspas simples.
Na Figura 2 podemos observar a configuração do mascaramento com expressão literal. Observe que a coluna antes chamada CUSTNAME passou a ter a expressão 'OCULTO' e a coluna CITY passou a ter a expressão 'Gotham City'. Observe também que o status da coluna mudou para "String Literal".
Figura 2. Expressão Literal.
Mascaramento com valores nulos
O mascaramento com valores nulos deve ser utilizado quando se deseja suprimir valores de algum campo, substituindo o valor real por um valor nulo. Para isto o campo deve obrigatoriamente aceitar valores nulos.
A técnica consiste em substituir o nome da coluna de origem pela expressão NULL.
Na Figura 3 podemos observar a aplicação desta técnica no campo ADDRESS2. Note que o status da coluna passa a ser NULL.
Figura 3. Valores Nulos.
Mascaramento com números sequenciais e randômicos
O Infosphere Optim pode gerar números sequenciais ou randômicos para fins de mascaramento. Os números são inseridos nas colunas desejadas substituindo os valores.
Os números sequenciais são gerados e incrementados sequencialmente de acordo com o valor configurado no column map.
Para obter números sequencias deve-se substituir o nome da coluna de origem pela função SEQ (início, incremento). Sendo "início" o número em a sequência deve ser iniciada e "incremento" determina de quanto em quanto o número será incrementado. Por exemplo, se deseja-se popular a coluna com números iniciando em 120 e incrementando a cada 10, a sequência teria: 120, 130, 140, 150, etc. A função seria configurada da seguinte maneira: SEQ (120,10).
Se o objetivo for obter números de forma randômica, deve ser utilizada a função RAND (menor, maior). Sendo "menor" o menor número a ser utilizado e "maior" o maior número a ser utilizado. Por exemplo, se deseja-se popular a tabela com números gerados de forma randômica, sendo o menor 320 e o maior 1275, a função seria configurada da seguinte maneira: RAND (320,1275).
A Função RAND distribui os dados de maneira uniforme.
A geração de números randômicos deve-se respeitar as seguintes regras:
- Os valores entre maior e menor devem ser entre: -2,147,483,648 a 2,147,483,647 .
- Os valores são limitados de acordo com o tipo de dados da coluna de destino e sua capacidade.
- O valor menor deve ser sempre menor do que o valor maior.
A Figura 4 ilustra a utilização da função RAND e a Figura 5 ilustra a ultilização da função SEQ. Note que em ambos os casos o status é alterado para "Numeric Expression".
Figura 4. Valores Sequenciais.
Figura 5. Valores Randômicos.
Mascaramento com substrings e concatenação
É possível utilizar partes de um dado de uma determinada coluna ou mesmo embaralhar os dados. As funções SUBSTR e CONCAT são utilizadas para atingir estes objetivos.
A função SUBSTR utiliza uma parte da coluna de origem para obter os dados a serem mascarados. Sua sintaxe é SUBSTR(nome da coluna origem, início, [tamanho]).
A função CONCAT é utilizada para concatenar valores e pode ser utilizada com valores fixos ou em conjunto com a função SUBSTR. Para utilizar valores fixos a sintaxe é CONCAT 'valor' e para utilizar juntamente com a função SUBSTR a sintaxe é CONCAT SUBSTR(nome da coluna origem, início, [tamanho]).
Conforme é possível notar na Figura 6, foi criada uma regra de mascaramento que determina a exibição dos três primeiros dígitos do número de telefone e a substituição dos demais por zero. Para tal utilizamos a função de concatenação com valor fixo.
Figura 6. Subtring e Concatenação.
Na Figura 7 é ilustrada a utilização da função de concatenação, CONCAT, usando como argumento o valor de uma coluna, ao contrário do exemplo anterior aonde o argumento era um valor fixo para formar a string.
Figura 7. Subtring e Concatenação.
Mascaramento com operações matemáticas
É possível utilizar operações matemáticas para mascarar dados de uma determinada coluna. Para isto, basta indicar os operadores : + para soma, - para subtração, / para divisão e * para multiplicação.
Na Figura 8 utilizamos como exemplo o valor da coluna de origem, YTD_SALES, multiplicado por 3.
A função utilizada foi: nome da coluna de origem * 3.
Figura 8. Operações Matemáticas.
Mascaramento com funções de data e hora
O Infosphere Optim possui algumas funções que auxiliam no mascaramento de campos que contém valores de data e hora.
A sintaxe destas funções é simples, bastando referenciá-las no lugar da coluna de origem.
Por exemplo, se é desejado o preenchimento de um campo utilizando-se a data corrente, basta utilizar a função: CURRENT_DATE.
Outras funções de data e hora podem ser observadas na Tabela 1.
Tabela 1. Funções de Data e Hora.
| Função | Descrição |
| CURRENT_DATE | Data corrente |
| CURRENT_TIME | Hora corrente |
| CURRENT_TIMESTAMP | Data e hora correntes |
Utilizando rotinas externas para mascaramento
O Infosphere Optim aceita que sejam utilizadas rotinas externas para mascaramento. Para tal é necessário seguir a seguinte premissa: As rotinas podem ser escritas em qualquer linguagem de programação, porém as chamadas às subrotinas devem estar conforme às chamadas de rotinas da linguagem C.
A chamada da rotina segue o mesmo padrão até aqui demonstrado, devendo substituir o nome da coluna de origem pela expressão EXIT seguido do nome da rotina.
Na Figura 9, podemos observar a chamada de uma rotina externa denominada CARTAO_CRED. A sintaxe utilizada foi: EXIT CARTAO_CRED
Observe que o status foi alterado para "Exit".
Figura 9. Rotinas Externas.
Para que a integridade referencial seja mantida, o Infosphere Optim dispõe da função de propagação.
A função de propagação funciona da seguinte maneira: Suponhamos que o valor de uma Primary Key seja mascarado com n valores. Suas Foreign Keys passarão a não funcionar mais devido à perda de integridade referencial.
Para evitar que isto aconteça, deve ser utilizada a função PROP. A função PROP propaga os valores inseridos em uma Primary Key para suas Foreign Keys.
Por exemplo, caso deseje-se mascarar o código do cliente, que é uma Primary Key, com a função de geração de números sequenciais (SEQ), utiliza-se a função de propagação para manter a integridade referencial e evitar inconsistências.
A sintaxe, no caso do nosso exemplo, foi: PROP(SEQ(10000,1),CUST_ID) , onde CUST_ID é o nome da coluna.
A Figura 10 ilustra o exemplo citado.
Figura 10. Propagação.
Tabelas de data privacy do Infosphere Optim
O Infosphere Optim possui tabelas em seu dicionário de dados que podem ser utilizadas para gerar dados fictícios para mascaramento de dados em tabelas. Estas tabelas são conhecidas como lookup tables. O primeiro passo para a utlização das lookup tables é criá-las no dicionário de dados do Optim.
Utilize o Optim Configuration Assistant para isto. No menu Tasks->Load/Drop Data Privacy Data. Selecione o repositório do Infosphere Optim configurado, selecione o banco de dados em que deseja criar as tabelas de Data Privacy.
A Figura 11 ilustra a tela de criação das tabelas.
Figura 11. Tabelas de Data Privacy.
Após a criação das tabelas de Data Privacy, pode-se utilizar as tabelas para mascaramento de dados.
A técnica consiste em buscar um valor na tabela de Data Privacy aleatóriamente e substituir o valor real com este novo valor encontrado.
A função utilizada é ; RAND_LOOKUP. No nosso exemplo, utilizamos a tabela de primeiros nomes em espanhol, OPTIM_ES_FIRSTNAME, para substituir os nomes dos clientes na tabela OPTIM_CUSTOMERS.
A sintaxe da função foi: RAND_LOOKUP(OPTIMDIR.OPTIM.OPTIM_ES_FIRSTNAME, FIRSTNAME), onde OPTIMDIR é o banco de dados, OPTIM é o schema, OPTIM_ES_FIRSTNAME é a tabela e FIRSTNAME é a coluna que contém os dados desejados.
A Figura 12 ilustra este exemplo.
Figura 12. Tabelas de Data Privacy.
Este artigo abordou diversas técnicas de mascaramento de dados em tabelas de bancos de dados relacionais visando garantir a privacidade dos dados, mantendo assim um ambiente de banco de dados seguro.
Existem outras técnicas que podem ser aplicadas para mascarar dados utilizando as técnicas básicas apresentadas neste artigo combinadas entre si.
Esse artigo foi baseado na versão 7.3.1 do Infosphere Optim Test Data Management Data Privacy.
Outras informações sobre o produto Infosphere Optim Data Privacy podem ser encontradas em:
http://www.ibm.com/software/data/data-management/optim-solutions/data-privacy.html