Planejar e implementar a máscara dinâmica
O Banco de Dados SQL do Azure, a Instância Gerenciada de SQL do Azure e o Azure Synapse Analytics dão suporte à Máscara Dinâmica de Dados. A Máscara Dinâmica de Dados limita a exposição de dados confidenciais mascarando-os para usuários não privilegiados.
A Máscara Dinâmica de Dados ajuda a impedir o acesso não autorizado a dados confidenciais, permitindo que os clientes designem quanto dos dados confidenciais serão revelados com efeito mínimo na camada do aplicativo. É um recurso de segurança baseado em política que oculta os dados confidenciais no conjunto de resultados de uma consulta em campos de banco de dados designados, enquanto os dados no banco de dados não são alterados.
Por exemplo, um representante de serviço em um call center pode identificar um chamador confirmando vários caracteres do seu endereço de email, mas o endereço de email completo não deve ser revelado ao representante do serviço. Uma regra de mascaramento pode ser definida para mascarar todo o endereço de email no conjunto de resultados de qualquer consulta. Como outro exemplo, uma máscara de dados apropriada pode ser definida para proteger dados pessoais, de modo que um desenvolvedor possa consultar ambientes de produção para fins de solução de problemas sem violar as regulamentações de conformidade.
Noções básicas de mascaramento de dados dinâmicos
Configure uma política de Máscara Dinâmica de Dados no portal do Azure selecionando a folha da Máscara Dinâmica de Dados em Segurança no painel de configuração do Banco de Dados SQL.
Política de mascaramento de dados dinâmicos
- Usuários do SQL excluídos do mascaramento — um conjunto de usuários do SQL ou identidades do Microsoft Entra ID que obtêm dados desmascarados nos resultados da consulta SQL. Usuários com privilégios de administrador sempre são excluídos do mascaramento e veem os dados originais sem qualquer máscara.
- Regras de mascaramento — um conjunto de regras que definem os campos designados a serem mascarados e a função de mascaramento usada. Os campos designados podem ser definidos usando um nome de esquema de banco de dados, um nome de tabela e um nome de coluna.
- Funções de mascaramento — um conjunto de métodos que controlam a exposição de dados para diferentes cenários.
| 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 tipos de dados numéricos, use um valor zero (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real). Para os tipos de dados date and time, use 1900-01-01 00:00:00.0000000 (date, datetime2, datetime, datetimeoffset, smalldatetime, time). Para tipos de dados binários, use um único byte do valor ASCII 0 (binary, varbinary, image). |
Exemplo de 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()') |
| 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 de 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 de 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 | Método de mascaramento que expõe as primeiras e últimas letras e adiciona uma cadeia de caracteres de preenchimento personalizada no meio. prefixo,[preenchimento], sufixo Se o valor original for muito curto para concluir a máscara inteira, parte do prefixo ou sufixo não será exposta. |
Exemplo de 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 5XXXXXXXXXX. Exemplo adicional: ALTER COLUMN [Número de telefone] ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)') Isso transforma um número de telefone como 555.123.1234 em 555.1XXXXXXX. |
| Datetime | Aplica-se a: SQL Server 2022 (16.x) Método de mascaramento para coluna definida com o tipo de dados datetime, datetime2, date, time, datetimeoffset, smalldatetime. Ele ajuda a mascarar o ano => datetime("Y"), mês => datetime("M"), dia => datetime("D"), hora => datetime("h"), minuto => datetime("m"), ou segundos => datetime("s") da parte do dia. |
Exemplo de como mascarar o ano do valor de datetime: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")') Exemplo de como mascarar o mês do valor de datetime: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")') Exemplo de como mascarar o minuto do valor de datetime: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")') |
| Função de mascaramento | Lógica de mascaramento |
|---|---|
| Padrão | Mascaramento completo de acordo com os tipos de dados dos campos designados * Use XXXX (ou menos) se o tamanho do campo for menor que quatro caracteres para tipos de dados de cadeia de caracteres (nchar, ntext, nvarchar). * Use um valor zero para tipos de dados numéricos (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real). * Use 1900-01-01 para tipos de dados de data/hora (date, datetime2, datetime, datetimeoffset, smalldatetime, time). * Para sql_variant, o valor padrão do tipo atual é usado. * Para XML, o documento <masked/> é usado. * Use um valor vazio para tipos de dados especiais (timestamp, table, HierarchyID, uniqueidentifier, binary, image, varbinary, and spatial types). |
| Cartão de crédito | Método de mascaramento, que expõe os últimos quatro dígitos dos campos designados e adiciona uma cadeia de caracteres constante como um prefixo na forma de um cartão de crédito. XXXX-XXXX-XXXX-1234 |
| Método de mascaramento, que expõe a primeira letra e substitui o domínio por XXX.com usando um prefixo de cadeia de caracteres constante na forma de um endereço de email. aXX@XXXX.com |
|
| Número aleatório | Método de mascaramento, que gera um número aleatório de acordo com os limites selecionados e os tipos de dados reais. Se os limites designados forem iguais, a função de mascaramento será um número constante.
|
| Texto personalizado | Método de mascaramento, que expõe os primeiros e últimos caracteres e adiciona uma cadeia de caracteres de preenchimento personalizada no meio. Se a cadeia de caracteres original for menor que o prefixo e o sufixo expostos, somente a cadeia de caracteres de preenchimento será usada. prefixo[preenchimento]sufixo
|
Campos recomendados para mascarar
O mecanismo de recomendações de DDM sinaliza determinados campos do banco de dados como campos potencialmente confidenciais, o que pode ser um bom candidato para mascaramento. No painel Máscara Dinâmica de Dados no portal, você verá as colunas recomendadas para o banco de dados. Selecione Adicionar Máscara para uma ou mais colunas, selecione a função de mascaramento apropriada e selecione Salvar para aplicar a máscara a esses campos.
Gerenciar a Máscara Dinâmica de Dados usando T-SQL
- Para criar uma máscara de dados dinâmica, confira Criar uma máscara de dados dinâmica.
- Para adicionar ou editar uma máscara em uma coluna existente, confira Adicionar ou editar uma máscara em uma coluna existente.
- Para conceder permissões para exibir dados desmascarados, confira Conceder permissões para exibir dados desmascarados.
- Para remover uma máscara de dados dinâmica, confira Remover uma máscara de dados dinâmica.
Configurar a Máscara Dinâmica de Dados para o seu banco de dados usando cmdlets do PowerShell
Políticas de mascaramento de dados
Regras de mascaramento de dados
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
Configurar a Máscara Dinâmica de Dados para o seu banco de dados usando a API REST
Você pode usar a API REST para gerenciar programaticamente a política e as regras de mascaramento de dados. A API REST publicada dá suporte às seguintes operações:
Políticas de mascaramento de dados
- Criar ou atualizar: cria ou atualiza uma política de mascaramento de dados de banco de dados.
- Obter: obtém uma política de mascaramento de dados de banco de dados.
Regras de mascaramento de dados
- Criar ou atualizar: cria ou atualiza uma regra de mascaramento de dados de banco de dados.
- Listar por banco de dados: obtém uma lista de regras de mascaramento de dados de banco de dados.
Permissões
Estas são as funções internas para configurar a Máscara Dinâmica de Dados:
Estas são as ações necessárias para usar a Máscara Dinâmica de Dados:
Leitura/gravação:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
Leitura:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
Escrever:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
Para saber mais sobre permissões ao usar o mascaramento de dados dinâmicos com o comando T-SQL, confira Permissões
Exemplo de permissão granular
Impeça o acesso não autorizado a dados confidenciais e obtenha controle utilizando uma máscara de usuário não autorizado em diferentes níveis do banco de dados. Você pode conceder ou revogar permissões UNMASK no nível do banco de dados, no nível do esquema, no nível da tabela ou no nível da coluna para qualquer usuário ou função de banco de dados. Combinadas com a autenticação do Microsoft Entra, as permissões UNMASK podem ser gerenciadas para usuários, grupos e aplicativos mantidos em seu ambiente do Azure. A permissão UNMASK fornece uma maneira granular de controlar e limitar o acesso não autorizado aos dados armazenados no banco de dados e melhorar o gerenciamento de segurança de dados.
Crie um esquema para conter tabelas de usuário:
CREATE SCHEMA Data; GOCrie uma tabela com colunas mascaradas:
CREATE TABLE Data.Membership ( MemberID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED, FirstName VARCHAR(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL, LastName VARCHAR(100) NOT NULL, Phone VARCHAR(12) MASKED WITH (FUNCTION = 'default()') NULL, Email VARCHAR(100) MASKED WITH (FUNCTION = 'email()') NOT NULL, DiscountCode SMALLINT MASKED WITH (FUNCTION = 'random(1, 100)') NULL, BirthDay DATETIME MASKED WITH (FUNCTION = 'default()') NULL );Inserir dados de exemplo:
INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode, BirthDay) VALUES ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10, '1985-01-25 03:25:05'), ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5, '1990-05-14 11:30:00'), ('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50, '2004-02-29 14:20:10'), ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40, '1990-03-01 06:00:00');Crie um esquema para conter tabelas de serviço:
CREATE SCHEMA Service; GOCrie uma tabela de serviço com colunas mascaradas:
CREATE TABLE Service.Feedback ( MemberID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED, Feedback VARCHAR(100) MASKED WITH (FUNCTION = 'default()') NULL, Rating INT MASKED WITH (FUNCTION = 'default()'), Received_On DATETIME );Inserir dados de exemplo:
INSERT INTO Service.Feedback (Feedback, Rating, Received_On) VALUES ('Good', 4, '2022-01-25 11:25:05'), ('Excellent', 5, '2021-12-22 08:10:07'), ('Average', 3, '2021-09-15 09:00:00');Crie usuários diferentes no banco de dados:
CREATE USER ServiceAttendant WITHOUT LOGIN; GO CREATE USER ServiceLead WITHOUT LOGIN; GO CREATE USER ServiceManager WITHOUT LOGIN; GO CREATE USER ServiceHead WITHOUT LOGIN; GOConceda permissões de leitura aos usuários no banco de dados:
ALTER ROLE db_datareader ADD MEMBER ServiceAttendant; ALTER ROLE db_datareader ADD MEMBER ServiceLead; ALTER ROLE db_datareader ADD MEMBER ServiceManager; ALTER ROLE db_datareader ADD MEMBER ServiceHead;Conceda permissões diferentes de UNMASK aos usuários:
--Grant column level UNMASK permission to ServiceAttendant GRANT UNMASK ON Data.Membership(FirstName) TO ServiceAttendant;-- Grant table level UNMASK permission to ServiceLead GRANT UNMASK ON Data.Membership TO ServiceLead;-- Grant schema level UNMASK permission to ServiceManager GRANT UNMASK ON SCHEMA::Data TO ServiceManager; GRANT UNMASK ON SCHEMA::Service TO ServiceManager;--Grant database level UNMASK permission to ServiceHead; GRANT UNMASK TO ServiceHead;Consultar os dados no contexto do usuário
ServiceAttendant:EXECUTE AS USER = 'ServiceAttendant'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;Consultar os dados no contexto do usuário
ServiceLead:EXECUTE AS USER = 'ServiceLead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;Consultar os dados no contexto do usuário
ServiceManager:EXECUTE AS USER = 'ServiceManager'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;Consultar os dados no contexto do usuário
ServiceHead:EXECUTE AS USER = 'ServiceHead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;Para revogar permissões UNMASK, use as seguintes instruções T-SQL:
REVOKE UNMASK ON Data.Membership(FirstName) FROM ServiceAttendant; REVOKE UNMASK ON Data.Membership FROM ServiceLead; REVOKE UNMASK ON SCHEMA::Data FROM ServiceManager; REVOKE UNMASK ON SCHEMA::Service FROM ServiceManager; REVOKE UNMASK FROM ServiceHead;

