Udostępnij za pomocą


Dynamiczne maskowanie danych

Dotyczy:Usługa Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (tylko dedykowane pule SQL)baza danych SQL w Fabric

Usługa Azure SQL Database, baza danych SQL w usługach Microsoft Fabric, Azure SQL Managed Instance i Azure Synapse Analytics obsługują dynamiczne maskowanie danych (DDM). Dynamiczne maskowanie danych ogranicza ujawnianie danych poufnych, maskując je w przypadku użytkowników bez uprawnień.

Dynamiczne maskowanie danych pomaga zapobiegać nieautoryzowanemu dostępowi do poufnych danych, umożliwiając klientom wyznaczenie ilości poufnych danych do ujawnienia przy minimalnym wpływie na warstwę aplikacji. Jest to funkcja zabezpieczeń oparta na zasadach, która ukrywa poufne dane w zestawie wyników zapytania względem wyznaczonych pól bazy danych, podczas gdy dane w bazie danych nie są zmieniane.

Na przykład przedstawiciel usługi w centrum obsługi może zidentyfikować rozmówcę, potwierdzając kilka znaków swojego adresu e-mail, ale pełny adres e-mail nie powinien być ujawniany przedstawicielowi usługi. Regułę maskowania można zdefiniować, która maskuje cały adres e-mail w zestawie wyników dowolnego zapytania. W innym przykładzie można zdefiniować odpowiednią maskę danych w celu ochrony danych osobowych, aby deweloper mógł wysyłać zapytania do środowisk produkcyjnych w celu rozwiązywania problemów bez naruszania przepisów dotyczących zgodności.

Podstawy dynamicznego maskowania danych

W przypadku usługi Azure SQL Database skonfigurujesz zasady dynamicznego maskowania danych w witrynie Azure Portal, wybierając okienko Dynamiczne maskowanie danych w obszarze Zabezpieczenia w okienku konfiguracji usługi SQL Database.

Nie można ustawić tej funkcji za pomocą portalu Azure dla SQL Managed Instance lub bazy danych SQL w Fabric. Zamiast tego użyj Transact-SQL (T-SQL), jak w przykładzie uprawnień szczegółowych w tym artykule. Aby uzyskać więcej informacji, zobacz Dynamiczne maskowanie danych.

Zasady dynamicznego maskowania danych

  • Użytkownicy SQL wykluczeni z maskowania: Zestaw użytkowników SQL, który może zawierać identyfikatory z Microsoft Entra ID, pobierający dane niemaskowane w wynikach zapytania SQL. Użytkownicy z uprawnieniami administracyjnymi, takimi jak administrator serwera, administrator firmy Microsoft Entra i rola db_owner mogą wyświetlać oryginalne dane bez żadnej maski. (Uwaga: dotyczy również roli sysadmin w programie SQL Server)

  • Reguły maskowania: zestaw reguł, które definiują wyznaczone pola do maskowania i używaną funkcję maskowania. Wyznaczone pola można zdefiniować przy użyciu nazwy schematu bazy danych, nazwy tabeli i nazwy kolumny.

  • Funkcje maskowania: zestaw metod kontrolujących narażenie danych na różne scenariusze.

    Funkcja maskowania Logika maskowania
    Wartość domyślna Pełne maskowanie zgodnie z typami danych wyznaczonych pól

    Użyj XXXX (lub mniej), jeśli rozmiar pola jest mniejszy niż 4 znaki dla typów danych ciągów (nchar, ntext, nvarchar).
    Użyj wartości zerowej dla typów danych liczbowych (bigint, bit, dziesiętny, int, money, numeryczny, smallint, smallmoney, tinyint, float, real).
    Użyj 1900-01-01 dla typów danych daty/godziny (date, datetime2, datetime, datetimeoffset, smalldatetime, time).
    W przypadku sql_variant jest używana wartość domyślna bieżącego typu.
    W przypadku kodu XML dokument <masked /> jest używany.
    Użyj wartości pustej dla specjalnych typów danych (sygnatura czasowa, tabela, HierarchyID, uniqueidentifier, binary, image, varbinary i typy przestrzenne).
    Karta kredytowa Metoda maskowania, która uwidacznia ostatnie cztery cyfry wyznaczonych pól i dodaje ciąg stały jako prefiks w postaci karty kredytowej.

    XXXX-XXXX-XXXX-1234
    E-mail Metoda maskowania, która uwidacznia pierwszą literę i zastępuje domenę XXX.com przy użyciu stałego prefiksu ciągu w postaci adresu e-mail.

    aXX@XXXX.com
    Liczba losowa Metoda maskowania, która generuje liczbę losową zgodnie z wybranymi granicami i rzeczywistymi typami danych. Jeśli wyznaczone granice są równe, funkcja maskowania jest liczbą stałą.

    Zrzut ekranu przedstawiający metodę maskowania do generowania liczby losowej.
    Tekst niestandardowy Metoda maskowania, która uwidacznia pierwsze i ostatnie znaki i dodaje niestandardowy ciąg wypełniający pośrodku. Jeśli oryginalny ciąg jest krótszy niż uwidoczniony prefiks i sufiks, używany jest tylko ciąg wypełnienia.

    prefix[padding]suffix
    Zrzut ekranu przedstawiający okienko nawigacji.
    Data i godzina Umożliwia szczegółowe maskowanie kolumn daty/godziny, czyli datetime, datetime2, date, time, datetimeoffset i smalldatetime. Można maskować określone składniki, takie jak rok (), miesiąc (datetime("Y")datetime("M")), dzień (datetime("D")), godzina (datetime("h")), minuta (datetime("m")) lub sekunda (datetime("s")). Ta funkcja jest stosowana przy użyciu języka T-SQL.

    Przykład:

    - Zamaskuj rok: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")').
    - Ukryj miesiąc: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")').
    - Minuta maski: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")').

Silnik rekomendacji DDM oznacza niektóre pola z bazy danych jako potencjalnie poufne, które mogą być dobrymi kandydatami do maskowania. W okienku Dynamiczne maskowanie danych w portalu zobaczysz zalecane kolumny dla bazy danych. Wybierz pozycję Dodaj maskę dla co najmniej jednej kolumny, a następnie wybierz odpowiednią funkcję maskowania i wybierz pozycję Zapisz, aby zastosować maskę dla tych pól.

Zarządzanie dynamicznym maskowaniem danych przy użyciu języka T-SQL

Konfigurowanie dynamicznego maskowania danych dla bazy danych przy użyciu poleceń cmdlet programu PowerShell

Zasady maskowania danych

Reguły maskowania danych

Konfigurowanie dynamicznego maskowania danych dla bazy danych przy użyciu interfejsu API REST

Interfejs API REST umożliwia programowe zarządzanie zasadami i regułami maskowania danych. Opublikowany interfejs API REST obsługuje następujące operacje:

Zasady maskowania danych

Reguły maskowania danych

Uprawnienia

Dynamiczne maskowanie danych można skonfigurować przy użyciu następujących wbudowanych ról:

Są to akcje wymagane do korzystania z dynamicznego maskowania danych:

Odczyt/zapis:

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

Przeczytaj:

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

Pisać:

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

Aby dowiedzieć się więcej o uprawnieniach podczas korzystania z dynamicznego maskowania danych za pomocą polecenia T-SQL, zobacz Uprawnienia.

Przykład szczegółowych uprawnień

Zapobiegaj nieautoryzowanemu dostępowi do poufnych danych i przejmij kontrolę, maskując go nieautoryzowanemu użytkownikowi na różnych poziomach bazy danych. Uprawnienia można przyznać lub odwołać UNMASK na poziomie bazy danych, na poziomie schematu, na poziomie tabeli lub na poziomie kolumny dla dowolnego użytkownika lub roli bazy danych. W połączeniu z uwierzytelnianiem Microsoft Entra, uprawnieniami można zarządzać dla użytkowników, grup i aplikacji utrzymywanych w środowisku Azure. Uprawnienie UNMASK zapewnia szczegółowy sposób kontrolowania i ograniczania nieautoryzowanego dostępu do danych przechowywanych w bazie danych oraz ulepszania zarządzania zabezpieczeniami danych.

  1. Utwórz schemat zawierający tabele użytkowników:

    CREATE SCHEMA Data;
    GO
    
  2. Utwórz tabelę z zamaskowanych kolumn:

    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. Wstaw przykładowe dane:

    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. Utwórz schemat zawierający tabele usług:

    CREATE SCHEMA Service;
    GO
    
  5. Utwórz tabelę usług z zamaskowanych kolumn:

    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. Wstaw przykładowe dane:

    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. Utwórz różnych użytkowników w bazie danych:

    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. Udziel uprawnień do odczytu użytkownikom w bazie danych:

    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. Przyznaj użytkownikom różne UNMASK uprawnienia:

    • Udziel uprawnień na poziomie kolumny UNMASK dla ServiceAttendant:

      GRANT UNMASK ON Data.Membership (FirstName) TO ServiceAttendant;
      
    • Udziel uprawnień na poziomie UNMASK tabeli dla ServiceLead:

      GRANT UNMASK ON Data.Membership TO ServiceLead;
      
    • Udziel uprawnień na poziomie UNMASK schematu do elementu ServiceManager:

      GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
      GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
      
    • Udziel uprawnień bazy danych na poziomie UNMASK użytkownikowi ServiceHead.

      GRANT UNMASK TO ServiceHead;
      
  10. Wykonaj zapytanie o dane w kontekście użytkownika ServiceAttendant:

    EXECUTE AS USER = 'ServiceAttendant';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  11. Wykonaj zapytanie o dane w kontekście użytkownika ServiceLead:

    EXECUTE AS USER = 'ServiceLead';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  12. Wykonaj zapytanie o dane w kontekście użytkownika ServiceManager:

    EXECUTE AS USER = 'ServiceManager';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  13. Zadaj zapytania dotyczące danych w kontekście użytkownika ServiceHead

    EXECUTE AS USER = 'ServiceHead';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  14. Aby odwołać UNMASK uprawnienia, użyj następujących instrukcji języka 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;