Uma excelente alternativa para o cumprimento das normas do RGPD sem alterar as aplicações

A máscara de dados dinâmicos (DDM) limita a exposição de informação confidencial ao ocultá-la dos utilizadores sem privilégios. Pode ser usada para simplificar bastante o design e a codificação de segurança na sua aplicação.

A máscara de dados dinâmicos ajuda a 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 aplicação. A DDM pode ser configurada nos campos da base de dados designados para ocultar informação confidencial nos conjuntos de resultados de consultas. Com a DDM, os dados na base de dados não são alterados. A máscara de dados dinâmicos é fácil de usar com as aplicações existentes, pois as regras de máscara são aplicadas nos resultados da consulta. Muitas aplicações podem mascarar dados confidenciais sem modificar as consultas existentes.

  • Uma política de máscara de dados central atua diretamente nos campos confidenciais da base de dados.
  • Designe funções ou utilizadores com privilégios que tenham acesso à informação confidencial.
  • DDM apresenta funções de máscara total e parcial, além de uma máscara aleatória para dados numéricos.
  • Comandos simples do Transact-SQL definem e gerem as máscaras.

Por exemplo, um profissional do apoio técnico de um call center pode identificar o autor da chamada através de vários dígitos do seu número da segurança social ou número de cartão de crédito. Os números da segurança social ou do cartão de crédito não devem ser totalmente expostos ao profissional do apoio técnico. Uma regra de máscara pode ser definida para mascarar todos os dígitos, exceto os quatro últimos, de qualquer número de segurança social ou número de cartão de crédito no conjunto de resultados de qualquer consulta. Para dar outro exemplo, ao usar a máscara de dados apropriada para proteger a informação de identificação pessoal, um programador pode consultar os ambientes de produção para resolver problemas sem violar os regulamentos de conformidade.

A finalidade da máscara de dados dinâmicos consiste em limitar a exposição de dados confidenciais, impedindo que os utilizadores vejam dados aos quais não deveriam aceder. A máscara de dados dinâmicos não pretende impedir que utilizadores de base de dados se conectem diretamente à mesma e executem consultas abrangentes que exponham informação confidencial. A máscara de dados dinâmicos é complementar aos outros recursos de segurança do SQL Server (auditoria, criptografia, segurança em nível de linha…) e é altamente recomendável utilizar em conjunto com esses outros recursos, a fim de proteger melhor a informação confidencial na base de dados.

A máscara de dados dinâmicos está disponível no SQL Server 2016 (13.x) e na Base de dados SQL do Azure, e é configurado com comandos do Transact-SQL.

Definição de uma máscara de dados dinâmicos

É possível definir uma regra de máscara numa coluna de tabela com o objetivo de ocultar os dados dessa coluna. Existem quatro tipos de máscaras.

Função Descrição
Padrão Máscara completa de acordo com os tipos de dados nos campos designados.

Para os tipos de dados String, use XXXX ou um número inferior a X se o tamanho do campo for inferior a 4 caracteres (char, nchar,varchar, nvarchar, text, ntext).

Para os tipos de dados numéricos, use um valor zero (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real).

No caso dos tipos de dados de data e hora, use 01.01.1900 00:00:00.0000000 (date, datetime2, datetime, datetimeoffset, smalldatetime, time).

Para os tipos de dados binários, use só um byte de valor 0 de ASCII (binary, varbinary, image).

Email Método de máscara que expõe a primeira letra de um endereço de e-mail e o sufixo constante “.com”, no formato de um endereço de e-mail. Colunas na tabela de origem capturadas aXXX@XXXX.com
Aleatório Uma função de máscara aleatória que se pode usar com qualquer tipo numérico para mascarar o valor original com um aleatório dentro de um intervalo especificado.
Cadeia personalizada Método de máscara que expõe a primeira e última letra e adiciona uma cadeira de caracteres de preenchimento personalizada no meio.prefix,[padding],suffix

Nota: Se o valor original for demasiado curto para completar a máscara inteira, parte do prefixo ou do sufixo não será exposta.

Procedimentos recomendados e casos de uso comuns

  • Criar uma máscara numa coluna não impede que se façam atualizações nessa coluna. Portanto, embora os utilizadores recebam dados mascarados ao consultar a coluna mascarada, os mesmos utilizadores podem atualizar os dados se tiverem permissões de escrita. Mesmo assim, deve ser usada uma política de controlo de acesso adequada para limitar as permissões de atualização.
  • Usar SELECT INTO ou INSERT INTO para copiar dados de uma coluna mascarada para outra tabela irá gerar dados mascarados na tabela de destino.
  • A máscara de dados dinâmicos é aplicada durante a execução de importações e exportações do SQL Server. Uma base de dados que contém colunas mascaradas resultará num arquivo de dados exportado com os dados mascarados e a base de dados importada conterá dados estaticamente mascarados.

Efetuar consultas em colunas mascaradas

A visualização sys.masked_columns permite fazer consultas das colunas e tabelas que tenham uma função de máscara aplicada. Essa visualização herda valores de visualização sys.columns. Devolve todas as colunas da visualização sys.columns, juntamente com as colunas is_masked e masking_function. Além disso, indica se estas estão mascaradas e, em caso afirmativo, qual a função de máscara que foi definida. Esta visualização só mostra colunas com uma função de máscara aplicada.

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;

Limitações e restrições

Não é possível definir uma regra de máscara para os seguintes tipos de colunas:

  • Colunas criptografadas (sempre criptografadas)
  • FILESTREAM
  • COLUMN_SET ou uma coluna dispersa que faz parte de um conjunto de colunas.
  • Não se pode configurar uma máscara numa coluna calculada, mas se esta última depender de outra coluna com uma máscara, então a coluna calculada devolverá dados mascarados.
  • Uma coluna com máscara de dados não pode ser uma chave para um índice FULLTEXT.

Para os utilizadores sem a permissão UNMASK, as instruções READTEXT, UPDATETEXT e WRITETEXT preteridas não funcionarão corretamente numa coluna configurada para a máscara de dados dinâmicos.

Exemplos

CREATE TABLE Exemplo
   
(CodeID int IDENTITY PRIMARY KEY,

   FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') NULL,
   
   LastName varchar(100) NOT NULL,

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

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




INSERT Exemplo (FirstName, LastName, Phone, 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 Exemplo;

O resultado demonstra que as máscaras funcionam, pois altera os dados de:

1 Roberto Tamburello 555.123.4567 RTamburello@contoso.com

Para

1 RXXXXXXX Tamburello xxxx RXXX@XXXX.com

Adicionar ou editar uma máscara numa coluna existente

Use o comando ALTER TABLE para adicionar uma máscara a uma coluna existente da tabela ou para editar a máscara nessa coluna.
O exemplo a seguir adiciona uma função de máscara à coluna LastName:

ALTER TABLE Exemplo
ALTER COLUMN LastName ADD MASKED WITH (FUNCTION = 'partial(2,"XXX",0)');

 

Anular uma máscara de dados dinâmicos

O comando seguinte anula a máscara da coluna LastName criada no exemplo anterior:

ALTER TABLE Membership
ALTER COLUMN LastName DROP MASKED;