Mascaramento De Dados – SQL Server 2016 (Data Masking)


 

O SQL Server 2016 introduziu o mascaramento dinâmico de dados (DDM) como forma de evitar que usuários não autorizados vejam certos tipos de informações confidenciais. O mecanismo de bancos de dados, mascara os dados quando ele é recuperado do banco de dados, com base em regras de máscara definidas no esquema da coluna. Os dados armazenados no banco de dados permanecem inalterados.

Quando um usuário consulta o banco de dados, o mecanismo de banco de dados determina se essa conta de usuário possui as permissões necessárias para acessar os dados. Se a conta não for, o motor aplica as regras de mascaramento aos dados quando ele é retornado como parte da consulta. Desta forma, você pode ocultar todos ou parte dos dados, como números de identificação, números de cartão de crédito, datas de nascimento, números de telefone, salários, ou outros tipos de informações.

Para implementar DDM, você define regras de mascaramento nas colunas que contêm os dados que deseja proteger. Para cada coluna, você adiciona a cláusula MASKED WITH.

Esse recurso encontra-se disponível para o SQL Server 2016 e Banco de dados SQL do Azure, e é configurado usando comandos T-SQL

Para criação de mascamento de dados em uma tabela é necessário ter permissão de CREATE TABLE e ALTER.

Há quatro tipos de máscaras disponíveis. São eles:

  • Default => Mascaramento completo de acordo com o tipo de dado
  • Email => axxx@xxxx.com
  • Random=> Utiliza qualquer tipo de dados númerico para substituir o valor original por um randômico dentro de uma range válida.
  • Cadeia de caracteres personalizada => Libera a primeira e a última letra e adiciona uma string customizada no meio.

Para exemplificar irei criar uma tabela com o nome Pessoa e irei popular as colunas com dados mascarados

Você irá observar que mesmo já o usando o recurso de mascaramento os dados ainda mostram vísiveis os dados, isso porque o meu usuario tem privilegio de owner, administrador. Vamos então criar um outro usuario e conceder permissão apenas de SELECT e logo após consultaremos novamente esse tabela com esse usuario.

Observe que agora as colunas Nome, Telefone e Email já mostram mascarados para o usuario usrSQL

Nesse proximo exemplo irei adicionar o mascaramento para a coluna CPF e alterar a coluna Telefone para um outro formato. Veja abaixo.

A modificação dessa tabela realizo utilizando o meu usuario owner e a execução dessa consulta utilizo o usuario usrSQL

Irei conceder a permissão de UNMASK , esse perfil foi incluído na versão do SQL Server 2016. Agora se esse usuario executar a consulta ele irá visualizar os dados desmascarados.

 

Removendo a permissão de UNMASK

 

E para retirar o mascaramento de uma coluna em uma tabela como fazer ? simples.

Você pode observar que a coluna Nome para o usuário usSQL agora mostra sem o mascaramento.

 

Use a exibição sys.masked_columns para consultar colunas de tabela que tenham uma função de máscara aplicada. Essa exibição herda valores da exibição sys.columns. Ela retorna todas as colunas na exibição sys.columns , mais as colunas is_masked e masking_function , indicando se a coluna é mascarada e, em caso positivo, qual função de mascaramento foi definida. Essa exibição só mostra colunas com uma função de máscara aplicada.

Segue o script utilizado nos exemplos:

CREATE TABLE PESSOA
(ID INT IDENTITY PRIMARY KEY,
Nome varchar(100) MASKED WITH (FUNCTION = ‘partial(1,”XXXXXXX”,0)’) NULL,  — Mantenho o primeiro caractere o substituo tudo depois por X
CPF varchar(15) NOT NULL,
Telefone varchar(12) MASKED WITH (FUNCTION = ‘default()’) NULL,
Email varchar(100) MASKED WITH (FUNCTION = ‘email()’) NULL);

INSERT PESSOA (Nome, CPF, Telefone, Email) VALUES
(‘Bruno Tavares’,58188385360, ‘8551-2345’, ‘Bruno.Tavares@contoso.com’),
(‘Daniele Moreira’,64707227333, ‘9444-6568’, ‘daniele@contoso.com’),
(‘Roberto Vaz’,59361986341, ‘8123-4569’, ‘roberto@contoso.net’);

GO
SELECT * FROM PESSOA;

— Criando usuario e concedendo permissão de SELECT
CREATE USER usrSQL WITHOUT LOGIN;
GRANT SELECT ON PESSOA TO usrSQL;
GO
EXECUTE AS USER = ‘usrSQL’;
SELECT * FROM PESSOA;

ALTER TABLE PESSOA — Retorna de uma forma dependendo do tipo de dado
ALTER COLUMN CPF ADD MASKED WITH (FUNCTION = ‘default()’)

ALTER TABLE PESSOA — Deixa vísivel apenas os 4 ultimos caracteres
ALTER COLUMN Telefone ADD MASKED WITH (FUNCTION = ‘partial(0,”XXX-XX-“,4)’)

–Concedendo permissão
GRANT UNMASK TO usrSQL;
EXECUTE AS USER = ‘usrSQL’;
SELECT * FROM Pessoa;
REVERT;

–Removendo a permissão UNMASK
REVOKE UNMASK TO usrSQL;

— Excluindo o mascaramento de dados de uma coluna
ALTER TABLE PESSOA
ALTER COLUMN Nome DROP MASKED;

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;

 

  • Criar uma máscara em uma coluna não impede atualizações nessa coluna. Portanto, embora os usuários recebam dados mascarados ao consultar a coluna mascarada, os mesmos usuários podem atualizar os dados se tiverem permissões de gravação.
  • O mascaramento de dados dinâmicos é aplicado durante a execução de importações e exportações do SQL Server . Um banco de dados que contém colunas mascaradas resultará em um arquivo de backup com dados mascarados (supondo que ele seja exportado por um usuário sem privilégios de UNMASK ) e o banco de dados importado conterá dados estaticamente mascarados.

 

Abraços.



Escreva um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *