Máscara dinâmica de dados no data warehousing do Fabric

Aplica-se a: ponto de extremidade de análise do SQL e Warehouse no Microsoft Fabric

O mascaramento dinâmico de dados limita a exposição de dados confidenciais ao mascará-los para usuários não privilegiados. Ele pode ser usado para simplificar bastante o design e a codificação de segurança em seu aplicativo.

O mascaramento de dados dinâmico ajuda a impedir a exibição não autorizada de dados confidenciais, permitindo que os administradores especifiquem a quantidade de dados confidenciais a serem revelados, com efeito mínimo na camada do aplicativo. O mascaramento de dados dinâmico pode ser configurado em campos de banco de dados designados para ocultar dados confidenciais nos conjuntos de resultados de consultas. Com o mascaramento de dados dinâmico, os dados no banco de dados não são alterados, portanto, podem ser usados com aplicativos existentes, uma vez que as regras de mascaramento são aplicadas aos resultados da consulta. Muitos aplicativos podem mascarar dados confidenciais sem modificar consultas existentes.

  • Uma política de mascaramento de dados central atua diretamente nos campos confidenciais do banco de dados.
  • Designe usuários ou funções com privilégios que tenham acesso aos dados confidenciais.
  • O mascaramento de dados dinâmico apresenta funções de máscara completa e parcial e uma máscara aleatória para dados numéricos.
  • Comandos simples do Transact-SQL definem e gerenciam máscaras.

A finalidade da máscara dinâmica de dados é limitar a exposição de dados confidenciais, impedindo que os usuários que não devem ter acesso a esses dados os visualizem. A máscara dinâmica de dados não pretende impedir que usuários de banco de dados se conectem diretamente ao banco de dados e executem consultas abrangentes que exponham dados confidenciais.

O mascaramento de dados dinâmico é complementar a outros recursos de segurança do Fabric, como segurança em nível de coluna e segurança em nível de linha. É altamente recomendável usar esses recursos de proteção de dados ao mesmo tempo para proteger os dados confidenciais no banco de dados.

Definir uma máscara dinâmica de dados

Uma regra de mascaramento pode ser definida em uma coluna de uma tabela para ocultar os dados dessa coluna. Há cinco tipos de máscaras disponíveis.

Função Descrição Exemplos
Padrão Mascaramento completo de acordo com os tipos de dados dos campos designados.

Para os tipos de dados string, use XXXX ou menos se o tamanho do campo for inferior a quatro caracteres (char, nchar, varchar, nvarchar, text, ntext).

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

Para os tipos de dados de data e hora, use 1900-01-01 00:00:00.0000000 (date, datetime2, datetime, datetimeoffset, smalldatetime, time).

Para os tipos de dados binary, use um único byte de valor ASCII 0 (binary, varbinary, image).
Exemplo da sintaxe de definição de coluna: Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL

Exemplo de sintaxe de alteração: ALTER COLUMN Gender ADD MASKED WITH (FUNCTION = 'default()')
Email O método de mascaramento que expõe a primeira letra de um endereço de email e o sufixo constante ".com", na forma de um endereço de email. aXXX@XXXX.com. Exemplo da sintaxe de definição: Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL

Exemplo de sintaxe de alteração: ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
Aleatório Uma função de mascaramento aleatório para uso em qualquer tipo numérico para mascarar o valor original com um valor aleatório dentro de um intervalo especificado. Exemplo da sintaxe de definição: Account_Number bigint MASKED WITH (FUNCTION = 'random([start range], [end range])')

Exemplo de sintaxe de alteração: ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
Cadeia de caracteres personalizada O método de mascaramento que expõe as primeiras e últimas letras e adiciona uma cadeia de caracteres de preenchimento personalizada no meio. prefix,[padding],suffix

Se o valor original for muito curto para completar a máscara inteira, parte do prefixo ou sufixo não será exposta.
Exemplo da sintaxe de definição: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL

Exemplo de sintaxe de alteração: ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)')

Isso transforma um número de telefone como 555.123.1234 em 5XXXXXXX.

Exemplo adicional:

ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)')

Isso transforma um número de telefone como 555.123.1234 em 555.1XXXXXXX.

Para obter mais exemplos, consulte Como implementar o mascaramento de dados dinâmico no Synapse Data Warehouse.

Permissões

Os usuários que não têm os direitos de Administrador, Membro ou Colaborador no workspace e sem permissões elevadas no Warehouse, verão dados mascarados.

Não é necessário qualquer permissão especial para criar uma tabela com uma máscara de dados dinâmica, somente as permissões padrão de esquema CREATE TABLE e ALTER.

Para adicionar, substituir ou remover a máscara de uma coluna, a tabela deve ter as permissões ALTER ANY MASK e ALTER. É apropriado conceder ALTER ANY MASK a um responsável pela segurança.

Os usuários com a permissão SELECT em uma tabela podem exibir os dados da tabela. As colunas definidas como mascaradas exibirão dados mascarados. Conceda a permissão UNMASK a um usuário para que ele possa recuperar dados não mascarados de colunas para as quais o mascaramento está definido.

A permissão CONTROL no banco de dados inclui as permissões ALTER ANY MASK e UNMASK que permitem ao usuário exibir dados não mascarados. Usuários administrativos ou funções como Administrador, Membro ou Colaborador têm a permissão CONTROL no banco de dados por design e podem exibir dados não mascarados por padrão. Permissões elevadas no Warehouse incluem a permissão CONTROL.

Consideração de segurança: ignorar o mascaramento usa técnicas de inferência ou força bruta

A máscara dinâmica de dados foi desenvolvida para simplificar o desenvolvimento de aplicativos, limitando a exposição de dados em um conjunto de consultas predefinidas usadas pelo aplicativo. Embora a Máscara Dinâmica de Dados também possa ser útil para evitar a exposição acidental de dados confidenciais ao acessar dados diretamente, é importante observar que usuários sem privilégios com permissões de consulta podem aplicar técnicas para obter acesso aos dados reais.

Por exemplo, considere um usuário que tem privilégios suficientes para executar consultas no Warehouse e tenta "adivinhar" os dados subjacentes e inferir os valores reais. Suponha que tenhamos uma máscara definida na coluna [Employee].[Salary], e esse usuário se conecte diretamente ao banco de dados e comece a adivinhar valores, eventualmente inferindo o valor [Salary] na tabela Employees:

SELECT ID, Name, Salary FROM Employees
WHERE Salary > 99999 and Salary < 100001;

Resulta em:

ID Nome Salário
62543 Jane Doe 0
91245 John Smith 0

Isso demonstra que o mascaramento de dados dinâmico não deve ser usado sozinho para proteger totalmente dados confidenciais de usuários com acesso de consulta ao Warehouse ou ao ponto de extremidade de análise do SQL. Ele é adequado para impedir a exposição de dados confidenciais, mas não protege contra intenções mal-intencionadas de inferir os dados subjacentes.

É importante gerenciar corretamente a segurança no nível do objeto com permissões granulares do SQL e sempre seguir o princípio de permissões mínimas necessárias.

Próxima etapa