Dynamic Data Masking - SQL SERVER
top of page

Dynamic Data Masking - SQL SERVER

Fala pessoal, no post de hoje vou tratar sobre o mascaramento de dados dinâmico no SQL Server.


O DDM (Máscara de Dados Dinâmicos) limita a exposição de dados confidenciais aplicando uma máscara para usuários sem privilégios. Essa funcionalidade que esta disponível a partir do SQL 2016 facilita e ajuda e muito a programação das aplicações, uma vez que traz para o banco de dados a carga e responsabilidade por mascarar dados na exibição da aplicação. De forma transparente para a aplicação o SQL já devolve os dados para ela com a mascara aplicada.


Tem como principal função impedir o acesso não autorizado a dados confidenciais, permitindo que os clientes especifiquem a quantidade de dados confidenciais a revelar, com impacto mínimo sobre a camada de aplicativo.


Se pensarmos nos ajustes que as empresas precisarão fazer por conta da LGPD essa funcionalidade pode contribuir e muito em vários cenários uma vez que muitas aplicações são de difícil alteração, seja por que é um sistema de prateleira ou porque demora para ter customização. Essa função ficaria portanto a cargo do próprio banco de dados.


Os dados no banco de dados não são alterados, eles recebem uma mascara pré-definida no momento da leitura realizada pelo usuário, dependendo da permissão que ele tiver.

O DDM é complementar aos outros recursos de segurança do SQL Server (auditoria, criptografia, segurança em nível de linha...) e seu uso é altamente recomendável em conjunto com esses outros recursos, para proteger melhor os dados confidenciais no banco de dados.


Existem quatro tipos de máscaras

default() – Mascaramento completo do dado de acordo com o seu tipo, campos numéricos exibe 0, campos de data exibe 01/01/1900 e campos de texto exibe “XXXX”.

email() – Exibe a primeira letra e o sufixo .com, como “[email protected]”.

random(<inicio>, <termino>) – campos numéricos, exibe números aleatórios dentro do intervalo definido na máscara.

partial(<qtd caracteres inicio>, <valor novo>, <qtd caracteres final>) – máscara customizável, exibe o começo e o término do valor e substitui o intervalo pelo valor definido na máscara.


Se o seu usuário não tem permissão para ler os dados limpos ou seja não esta com permissão UNMASK todas as vezes que tentar ler aquela determinada coluna, ou até mesmo exportar os dados dela para um arquivo fora do banco de dados eles virão com a mascara.


Para aplicar o mascaramento de dados você precisa somente ter a permissão padrão de esquema CREATE TABLE e ALTER

Vamos por a mão na massa!


-- CRIAR UMA TABELA COM COLUNAS MASCARADAS

-- USANDO OS MODELOS DEFAULT, EMAIL E CUSTOMIZADA

CREATE TABLE TB_VENDEDOR

(codigo int IDENTITY PRIMARY KEY,

Nome varchar(100) MASKED WITH (FUNCTION = 'partial(3,"XXXXXXX",0)') NULL,

Sobrenome varchar(100) NOT NULL,

Telefone varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,

Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL);


-- INSERINDO VALORES

INSERT TB_VENDEDOR (Nome, Sobrenome, Telefone, Email) VALUES

('Roberto', 'Alves', '99878.9858', '[email protected]'),

('Maria', 'Souza', '97789-8521', '[email protected]'),

('José', 'Rodrigues', '96859.3696', '[email protected]');



-- TESTE COM NOVO USUÁRIO SEM PERMISSÃO PARA VER OS DADOS COMPLETOS

CREATE USER usrTeste WITHOUT LOGIN;

GRANT SELECT ON TB_VENDEDOR TO usrTeste;


EXECUTE AS USER = 'usrTeste';

SELECT * FROM TB_VENDEDOR;

REVERT;

-- Você pode consultar quais colunas no seu banco estão com mascara através do comando

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;



Nos acompanhe em nossas redes sociais!

Youtube(vídeos novos todas as quartas): https://www.youtube.com/channel/UChFeqc-m7HZNdkoP0CshMGQ

Face & Instagram(conteúdo diário): dba on boarding


Até a próxima, tchau!


489 visualizações0 comentário
bottom of page