Partilhar via


Mascaramento dinâmico de dados

Aplica-se a:Banco de Dados SQL do AzureInstância Gerida SQL do AzureAzure Synapse Analytics (somente pools SQL dedicados)Banco de dados SQL no Fabric

O Banco de Dados SQL do Azure, o Banco de Dados SQL no Microsoft Fabric, a Instância Gerenciada SQL do Azure e o Azure Synapse Analytics dão suporte ao mascaramento dinâmico de dados (DDM). A máscara de dados dinâmicos limita a exposição a dados confidenciais ao mascará-los para utilizadores sem privilégios.

O mascaramento dinâmico de dados ajuda a impedir o acesso não autorizado a dados confidenciais, permitindo que os clientes designem a quantidade de dados confidenciais a serem revelados com efeito mínimo na camada de aplicativo. É um recurso de segurança baseado em política que oculta os dados confidenciais no conjunto de resultados de uma consulta sobre 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 de seu endereço de e-mail, mas o endereço de e-mail completo não deve ser revelado ao representante de serviço. Pode ser definida uma regra de mascaramento que oculta 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, para que um desenvolvedor possa consultar ambientes de produção para fins de solução de problemas sem violar os regulamentos de conformidade.

Noções básicas de mascaramento de dados dinâmicos

Para o Banco de Dados SQL do Azure, você configura uma política de mascaramento de dados dinâmicos no portal do Azure selecionando o painel Mascaramento de Dados Dinâmicos em Segurança no painel de configuração do Banco de Dados SQL.

Este recurso não pode ser definido através do portal do Azure para Instância Gerida do SQL ou base de dados SQL no Fabric. Em vez disso, use Transact-SQL (T-SQL), como no exemplo de permissão granular neste artigo. Para mais informações, consulte Mascaramento dinâmico de dados.

Política da máscara de dados dinâmicos

  • Utilizadores SQL excluídos do mascaramento: Um conjunto de utilizadores SQL, que pode incluir identidades do Microsoft Entra ID, que obtém dados desmascarados nos resultados da consulta SQL. Os usuários com direitos administrativos, como administrador do servidor, administrador do Microsoft Entra e função db_owner, podem exibir os dados originais sem qualquer máscara. (Observação: também se aplica à função sysadmin no SQL Server)

  • 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 mediante a utilização de um nome de esquema de base de dados, de um nome de tabela e de 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 de mascaramento Lógica de mascaramento
    Predefinição Mascaramento completo de acordo com os tipos de dados dos campos designados

    Use XXXX (ou menos) se o tamanho do campo for inferior a 4 caracteres para tipos de dados de cadeia (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 os tipos de dados data/hora (data, datetime2, datahora, datetimeoffset, smalldatetime, hora).
    Para sql_variant, é usado o valor padrão do tipo atual.
    Para XML, é utilizado o documento <masked /> .
    Use um valor vazio para tipos de dados especiais (carimbo temporal, tabela, HierarchyID,identificador único, binário, imagem, varbinário e tipos espaciais).
    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
    E-mail 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 e-mail.

    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 tipos de dados reais. Se os limites designados forem iguais, então a função de mascaramento é um número constante.

    Captura de tela que mostra o método de mascaramento para gerar um número aleatório.
    Texto personalizado Método de mascaramento, que expõe o primeiro e o último caracteres e adiciona uma cadeia de caracteres de preenchimento personalizada no meio. Se a cadeia de caracteres original for mais curta do que o prefixo e o sufixo expostos, somente a cadeia de preenchimento será usada.

    prefix[padding]suffix
    Captura de ecrã do painel de navegação.
    Data/hora Ativa o mascaramento granular para colunas de data e hora, nomeadamente datetime, datetime2, date, time, datetimeoffset e smalldatetime. Pode mascarar componentes específicos como ano (datetime("Y")), mês (datetime("M")), dia (datetime("D")), hora (datetime("h")), minuto (datetime("m")) ou segundo (datetime("s")). Aplicas esta função usando T-SQL.

    Por exemplo:

    - Ano da máscara: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")').
    - Mês da máscara: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")').
    - Minuto da máscara: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")').

O mecanismo de recomendações DDM sinaliza determinados campos do seu banco de dados como campos potencialmente confidenciais, que podem ser bons candidatos para mascaramento. No painel Mascaramento de Dados Dinâmicos no portal, você verá as colunas recomendadas para seu banco de dados. Selecione Adicionar máscara para uma ou mais colunas, selecione a função de mascaramento apropriada e selecione Salvar, para aplicar máscara para esses campos.

Gerencie o mascaramento de dados dinâmicos usando T-SQL

Configurar o mascaramento de dados dinâmicos para seu banco de dados usando cmdlets do PowerShell

Políticas de mascaramento de dados

Regras de mascaramento de dados

Configurar o mascaramento de dados dinâmicos para 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 suporta as 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.
  • Get: Obtém uma política de mascaramento de dados de uma base de dados.

Regras de mascaramento de dados

Permissões

Pode configurar mascaramento dinâmico de dados com os seguintes papéis incorporados:

Estas são as ações necessárias para usar o mascaramento dinâmico de dados:

Leitura/Gravação:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/*

Leia-se:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/read

Escreva:

  • 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, consulte Permissões.

Exemplo de permissão granular

Impeça o acesso não autorizado a dados confidenciais e obtenha controle mascarando-os para um usuário não autorizado em diferentes níveis do banco de dados. Pode conceder ou revogar UNMASK permissões ao nível da base de dados, ao nível do esquema, ao nível da tabela ou ao nível da coluna a qualquer utilizador ou função da base de dados. Combinado com a autenticação Microsoft Entra, UNMASK as permissões podem ser geridas para utilizadores, grupos e aplicações mantidas no seu ambiente Azure. A UNMASK permissão proporciona uma forma detalhada de controlar e limitar o acesso não autorizado a dados armazenados na base de dados e melhorar a gestão da segurança dos dados.

  1. Crie um esquema para conter tabelas de usuário:

    CREATE SCHEMA Data;
    GO
    
  2. Criar tabela com colunas mascaradas:

    CREATE TABLE Data.Membership
    (
        MemberID INT IDENTITY (1, 1) NOT NULL,
        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
    );
    
  3. 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');
    
  4. Crie um esquema para conter tabelas de serviço:

    CREATE SCHEMA Service;
    GO
    
  5. Crie uma tabela de serviço com colunas mascaradas:

    CREATE TABLE Service.Feedback
    (
        MemberID INT IDENTITY (1, 1) NOT NULL,
        Feedback VARCHAR (100) MASKED WITH (FUNCTION = 'default()') NULL,
        Rating INT MASKED WITH (FUNCTION = 'default()'),
        Received_On DATETIME
    );
    
  6. 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');
    
  7. 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;
    GO
    
  8. Conceda 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;
    
  9. Conceda permissões diferentes UNMASK aos utilizadores:

    • Conceder permissão ao nível de coluna UNMASK para ServiceAttendant:

      GRANT UNMASK ON Data.Membership (FirstName) TO ServiceAttendant;
      
    • Conceder permissão de nível UNMASK da tabela para ServiceLead.

      GRANT UNMASK ON Data.Membership TO ServiceLead;
      
    • Conceder permissão ao nível UNMASK do esquema para ServiceManager:

      GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
      GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
      
    • Conceder permissão de nível da base de dados UNMASK para ServiceHead;

      GRANT UNMASK TO ServiceHead;
      
  10. 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;
    
  11. 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;
    
  12. 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;
    
  13. 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;
    
  14. Para revogar UNMASK permissões, utilize 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;