Dynamic Data Masking

Um dos recursos que temos no SQL Server 2016 e no SQL Database é o Dynamic Data Masking (Mascaramento de Dados Dinâmico). No SQL Database ele está disponível na versão V12 e é utilizado para limitar a visualização de dados sensíveis, como por exemplo o número do cartão de crédito.

Você pode aplicar o mascaramento de dados dinâmico através do Portal Azure,  PowerShell e T-SQL. Lembrando que o mascaramento não se aplica para usuários com privilégios de administrador. Os tipos de máscara são:

  • Default [ default() ] – Mascaramento completo do dado de acordo com o tipo, para campos numéricos exibe “0”, para campos de data exibe “01/01/1900” e para campos de texto exibe “XXXX”.
  • Email [ email() ] – Exibe a primeira letra e o sufixo “.com”, como “rXXX@XXXX.com”.
  • Random [ random(<inicio intervalo>, <termino intervalo>) ] – Para campos numéricos, exibe números aleatórios dentro do intervalo definido na máscara.
  • Custom String [ partial(<quantidade de caracteres que serão exibidos no começo>, <valor que será preenchido no intervalo>, <quantidade de caracteres que serão exibidos no final>) ] – Máscara customizável, exibe o começo e o término da string e substitui o intervalo pelo valor definido na máscara.

 

DDM através do T-SQL

Seguem abaixo as instruções para adicionar, alterar e remover uma máscara. Estou utilizando o banco de dados de exemplo do SQL Database disponível quando criamos um novo banco de dados.

-- Adicionar máscara &quot;random&quot;.
ALTER TABLE SalesLT.Product
ALTER COLUMN StandardCost ADD MASKED WITH (FUNCTION = 'random(100,999)');  

-- Alterar o tipo da máscara para &quot;default&quot;.
ALTER TABLE SalesLT.Product
ALTER COLUMN StandardCost MONEY MASKED WITH (FUNCTION = 'default()');

-- Remover máscara.
ALTER TABLE SalesLT.Product
ALTER COLUMN StandardCost DROP MASKED;

 

É possível especificar um ou mais usuários que terão ou não os dados mascarados, para tanto utilize as instruções abaixo aplicando ou removendo o privilégio UNMASK.

-- Aplica o privilégio UNMASK para o usuário, consulta sem máscara.
GRANT UNMASK TO Teste;

-- Remover o privilégio UNMASK para o usuário, consulta com máscara.
REVOKE UNMASK TO Teste;

 

Agora que já aplicamos a máscara na coluna vamos consultar a tabela. Primeiro vamos consultar como o usuário “Teste” onde os dados da coluna “StandardCost” estará mascarado com o tipo de máscara “default” e depois consultar com um usuários com privilégios de administrador onde os dados não serão mascarados.

-- Consutla com o usuário &quot;Teste&quot; com mascaramento.
EXECUTE AS USER = 'Teste'
SELECT * FROM SalesLT.Product
REVERT

-- Consulta sem o mascaramento.
SELECT * FROM SalesLT.Product

 

consulta-mascara

 

Você pode utilizar a consulta abaixo para visualizar todas as colunas e suas respectivas tabelas que possuem máscara e qual o tipo de máscara aplicada.

SELECT c.name as column_name
      ,t.name as table_name
      ,c.masking_function
FROM sys.masked_columns AS c
JOIN sys.tables AS t ON c.[object_id] = t.[object_id]
WHERE is_masked = 1

 

lista-mascara

 

DDM através do Portal Azure

Acesso o Portal Azure e selecione seu SQL Database, logo após selecione a opção “Dynamic data masking”. Será aberta uma nova lâmina com informações das colunas com máscara e qual o tipo da máscara aplicada e logo abaixo alguns campos recomendados para mascarar. Clique em “ADD MASK” para adicionar uma máscara ou selecione uma máscara já existente para editar.

portal-ddm.png

Para adicionar uma nova máscara basta selecionar as informações necessárias e escolher qual o tipo de máscara você deseja aplicar.

adicionar-ddm

Da mesma forma que fizemos através de T-SQL, excluindo um usuário do mascaramento, podemos também definir no portal conforme imagem abaixo separando os usuários com ponto e vírgula [;].

unmask

Pronto! Agora que você já sabe como usar esse recurso há alguns pontos importantes que você precisa ter atenção. Ao usar SELECT INTO ou INSERT INTO com um usuário sem o privilégio UNMASK os dados da tabela de destino estarão mascarados, isso também ocorre caso esse usuário faça um backup e restore do banco de dados. É possível realizar UPDATE para uma coluna mascarada, mas lembre-se que esse usuário (sem o privilégio UNMASK) não está visualizando os dados verdadeiros (como por exemplo quando aplicado a máscara “random”) ou completos devido o mascaramento.

Outro ponto importante é quando esse mesmo usuário tem a possibilidade de realizar queries ad-hoc, já que ao utilizar a cláusula WHERE o valor utilizado é o real e não o mascarado, tornando possível assim identificar alguma informação desejada.

Até a próxima…

Deixe um comentário...

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s