Dynamiczne maskowanie danych
Dotyczy: Usługa Azure SQL Database Azure SQL Managed InstanceAzure Synapse Analytics (tylko dedykowane pule SQL) baza danych SQL w sieci szkieletowej
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 wszystkie adresy 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 przy użyciu witryny Azure Portal dla usługi SQL Managed Instance lub bazy danych SQL w sieci szkieletowej. Zamiast tego użyj języka T-SQL, jak w przykładzie dynamicznego maskowania danych 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ć tożsamości z usługi Microsoft Entra ID (dawniej Azure Active Directory), które pobierają niemaskowane dane 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, pieniądze, liczbowe, smallint, smallmoney, tinyint, float, real). * Użyj 1900-01-01 dla typów danych daty/godziny (data, data/godzina2, data/godzina, datetimeoffset, smalldatetime, godzina).* Dla sql_variant jest używana wartość domyślna bieżącego typu. * W przypadku kodu XML dokument <masked /> jest używany.* Użyj pustej wartości dla specjalnych typów danych (sygnatura czasowa, tabela, HierarchyID, uniqueidentifier, binarny, obraz, 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 |
Poczta 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łą. |
Tekst niestandardowy | Metoda maskowania, która uwidacznia pierwsze i ostatnie znaki i dodaje niestandardowy ciąg dopełniania w ś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 |
Zalecane pola do maskowania
Aparat rekomendacji DDM flaguje niektóre pola z bazy danych jako potencjalnie poufne pola, co może 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
- Aby utworzyć dynamiczną maskę danych, zobacz Tworzenie dynamicznej maski danych.
- Aby dodać lub edytować maskę w istniejącej kolumnie, zobacz Dodawanie lub edytowanie maski w istniejącej kolumnie.
- Aby udzielić uprawnień do wyświetlania niemaskowanych danych, zobacz Udzielanie uprawnień do wyświetlania niemaskowanych danych.
- Aby usunąć dynamiczną maskę danych, zobacz Upuszczanie dynamicznej maski danych.
Konfigurowanie dynamicznego maskowania danych dla bazy danych przy użyciu poleceń cmdlet programu PowerShell
Zasady maskowania danych
Reguły maskowania danych
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
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
- Tworzenie lub aktualizowanie: tworzy lub aktualizuje zasady maskowania danych bazy danych.
- Pobierz: pobiera zasady maskowania danych bazy danych.
Reguły maskowania danych
- Tworzenie lub aktualizowanie: tworzy lub aktualizuje regułę maskowania danych bazy danych.
- Lista według bazy danych: pobiera listę reguł maskowania danych bazy danych.
Uprawnienia
Są to wbudowane role do konfigurowania dynamicznego maskowania danych:
Są to akcje wymagane do korzystania z dynamicznego maskowania danych:
Odczyt/zapis:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
Odczyt:
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. Możesz przyznać lub odwołać uprawnienia UNMASK na poziomie bazy danych, na poziomie schematu, na poziomie tabeli lub na poziomie kolumny do dowolnego użytkownika lub roli bazy danych. W połączeniu z uwierzytelnianiem entra firmy Microsoft uprawnienia UNMASK można zarządzać dla użytkowników, grup i aplikacji przechowywanych w środowisku platformy 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.
Utwórz schemat zawierający tabele użytkowników:
CREATE SCHEMA Data; GO
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 );
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');
Utwórz schemat zawierający tabele usług:
CREATE SCHEMA Service; GO
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 );
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');
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
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;
Udziel innym użytkownikom uprawnień UNMASK:
--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;
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;
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;
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;
Wykonywanie zapytań dotyczących 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;
Aby odwołać uprawnienia UNMASK, 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;