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.

Anúncios
  1. 07/01/2016 às 9:43

    Sensacional Vitor, excelente conteúdo e apresentação, fico no aguardo do próximo.

    • 07/01/2016 às 11:45

      Fala Michel, tudo bem?
      Muito obrigado pelo feedback e espero que esteja curtindo os vídeos.
      Grande abraço.

  2. 07/01/2016 às 11:15

    Vitor, bom dia.

    Legal o vídeo, novidade muito interessante esta, tomará que a Microsoft mantenha na versão final.

    • 07/01/2016 às 11:44

      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.

  3. 07/01/2016 às 15:26

    Republicou isso em Alex Souza.

  4. 07/01/2016 às 18:07

    Vitor,
    Bacana essa funcionalidade e muito boa sua explicação.
    Vou falar para você que onde estou hoje precisamos dessa funcionalidade … Vamos aguardar Rsrs

    • 07/01/2016 às 18:10

      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.

  5. Heitor Arantes
    07/01/2016 às 22:35

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

  6. 08/01/2016 às 15:49

    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

    • 10/01/2016 às 18:21

      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.

  7. 08/01/2016 às 17:29

    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

    • 10/01/2016 às 18:20

      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.

  8. Jailson Lima
    12/01/2016 às 8:13

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

    • 12/01/2016 às 10:11

      Grande Jailson, tudo bem?

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

      Grande abraço.

  9. João Paulo
    24/02/2016 às 6:16

    Vitor, Bom dia. Vc ministra algum curso on line de administração banco de dados?

    • 24/02/2016 às 12:55

      Fala grande João, tudo bem contigo meu amigo?

      Ministro sim.

      Grande abraço.

  1. 07/01/2016 às 3:29
  2. 08/01/2016 às 14:35

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 )

Imagem do Twitter

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

Foto do Facebook

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

Foto do Google+

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

Conectando a %s

%d blogueiros gostam disto: