SQL Server 2016 – Implementando o Data Masking

Galera,

No vídeo de hoje quero demonstrar como funciona o mascaramento de dados dinâmicos no SQL Server 2016.

Caso tenha interesse em montar o cenário descrito no vídeo, basta utilizar o script abaixo:

--Criando o banco de dados DBTeste
CREATE DATABASE DBTeste
GO
USE DBTeste
GO
--Funções para mascaramento dos dados
--Default => mascaramento completo de acordo com o tipo de dados utilizado
--Email => aXXX@XXXX.com
--Custom String => libera a primeira e última letra e adiciona uma string
--                customizada no meio
--Random => Utilizar em qualquer tipo de dados numérico para substituir o valor
--original por um randômico dentro de um range válido
CREATE TABLE Cliente
  (CodCli int IDENTITY PRIMARY KEY,
   Nome varchar(100) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') NULL,
   Sobrenome varchar(100) NOT NULL,
   Telefone varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,
   Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL);

INSERT Cliente (Nome, Sobrenome, Telefone, Email) VALUES 
('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com'),
('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co'),
('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net');

SELECT * FROM Cliente;

--Criando usuario para leitura da tabela Cliente
CREATE USER App WITHOUT LOGIN;
GRANT SELECT ON Cliente TO App;

--Leitura dos dados já mascarados
EXECUTE AS USER = 'App';
SELECT * FROM Cliente;
REVERT;
SELECT * FROM Cliente

--Informações sobre tabelas e colunas mascaradas
SELECT c.name, tbl.name as table_name, c.is_masked, c.masking_function
FROM sys.masked_columns AS c
JOIN sys.tables AS tbl 
    ON c.[object_id] = tbl.[object_id]
WHERE is_masked = 1;

--Incluindo mascaramento em uma coluna já existente
ALTER TABLE Cliente
ALTER COLUMN Sobrenome ADD MASKED WITH (FUNCTION = 'partial(2,"XXX",0)');

--Alterando mascaramento em uma coluna já existente
ALTER TABLE Cliente
ALTER COLUMN Sobrenome varchar(100) MASKED WITH (FUNCTION = 'default()');

--Permissão para leitura dos dados não mascarados
GRANT UNMASK TO App;
EXECUTE AS USER = 'App';
SELECT * FROM Cliente;
REVERT; 

-- Removendo a permissão UNMASK
REVOKE UNMASK TO App;

--Excluindo o mascaramento de uma coluna
ALTER TABLE Cliente
ALTER COLUMN Sobrenome DROP MASKED;

Espero que gostem e não deixem de inscreverem-se no blog, no canal do youtube e no grupo de discussão SQLManiacs.

Grande abraço.

18 ideias sobre “SQL Server 2016 – Implementando o Data Masking

  1. Pingback: SQL Server 2016 – Implementando o Data Masking | DBA4All

    1. Vitor Fava Autor do post

      Fala Galvão, tudo bem contigo?
      Muito obrigado pelo seu feedback.
      Também espero que seja mantida e até melhorada no lançamento do SQL Server 2016.

      Resposta
    1. Vitor Fava Autor do post

      Grande Marcelo, tudo bem contigo meu amigo?
      Também achei essa funcionalidade bem interessante.
      Espero que esteja curtindo o material e qualquer necessidade é só me avisar.
      Grande abraço.

      Resposta
  2. Heitor Arantes

    Boa Noite!
    Vitor muito bom o vídeo, parabéns pela apresentação e por compartilhar o seu conhecimento com a comunidade.
    Abraços.

    Resposta
  3. Pingback: SQL Server 2016 – Implementando o Data Masking – DBA Brasil

  4. Marcel Inowe

    Fava, muito bom seu vídeo. Eu tinha ouvido falar na funcionalidade, mas ainda não tinha parado para testar. Uma dúvida: Você chegou a ver a performance disso na leitura com mascaramento? Será que por ele mascarar fica mais lento?

    Abs

    Resposta
    1. Vitor Fava Autor do post

      Fala grande Marcel, beleza?
      Não cheguei a testar para verificar possíveis problemas de performance, mas é uma ótima ideia para um estudo de caso.
      Farei isso e depois repasso o resultado.
      Grande abraço.

      Resposta
  5. Luís Flávio

    Fala Vitor! Muito bom essa abordagem!
    E pode deixar o cara de bolcha ai que é melhor sempre ver o palestrate.

    Eu acho que faltou ter uma funcionalidade melhor para o Data Masking do SQL Server. Que seria ter uma opção (parâmetro) de fazer o mascaramento efetivo dos dados no momento em que é realizado um backup/cópia, pois pelo que vi nessa funcionalidade ela serve apenas para cenários internos, para um cenário extermo.

    Vou citar um exemplo real que se passou onde trabalhava. Precisávamos nós fonecedor ter o banco de dados de um cliente que continha informações extremamente sigilosas com grande frequencia mas eles não liberavam para nós um BAK do banco nem pagando. O que ficava impossivel de reproduzir alguns issues que só aconteciam no ambiente do cliente e sabiamos que estava relacionado os dados no banco. Então descobrimos uma funcionalidade no ORACLE que permitia fazer um mascaramento das informações quando fazia o export do banco e isso foi maravilhoso pois permitia que o cliente poderia enviar o BAK do BD sem problemas pois as informações estão de fato mascaradas permitindo debugar e investigar os problemas que ocorria somente no cliente.

    Vendo essa funcionalidade no SQL Server 2016 ela não serveria neste cenário (externo) que seria o cliente enviar uma cópia do BD para o fornecedor do sistema e ele restaurar em seu ambiente interno pois os dados não estão de fatos mascaradas pois esse processo é feio a nível de acesso de usuário.

    Grande abraço

    Resposta
    1. Vitor Fava Autor do post

      Grande Luis, tudo bem contigo?
      O mascaramento de dados no SQL Server ainda pode ser melhorado com certeza. Se por acaso você tivesse o mascaramento habilitado nas tabelas do seu destino, também poderia fazer o import que as informações seriam salvas e posteriormente mascaradas também.
      Espero ter ajudado.
      Grande abraço e obrigado pelo seu feedback.

      Resposta
  6. Jailson Lima

    Interessante esse código SQL muito bom pra quem tem a noção e facio entendelo bons comentários.

    Resposta
    1. Vitor Fava Autor do post

      Grande Jailson, tudo bem?

      Fico feliz que tenha gostado e se tiver qualquer dúvida é só entrar em contato comigo.

      Grande abraço.

      Resposta

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 )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.