Dynamické maskování dat
Platí pro: Azure SQL Database Azure SQL Managed InstanceAzure Synapse Analytics (pouze vyhrazené fondy SQL)
Azure SQL Database, Azure SQL Managed Instance a Azure Synapse Analytics podporují dynamické maskování dat (DDM). Dynamické maskování dat omezuje přístup k citlivým datům pomocí jejich maskování pro neprivilegované uživatele.
Dynamické maskování dat pomáhá zabránit neoprávněnému přístupu k citlivým datům tím, že zákazníkům umožní určit, kolik citlivých dat se má odhalit s minimálním účinkem na aplikační vrstvu. Je to funkce zabezpečení založená na zásadách, která skryje citlivá data v sadě výsledků dotazu nad určenými databázovými poli, zatímco data v databázi se nemění.
Například zástupce služby v call centru může volajícího identifikovat potvrzením několika znaků jejich e-mailové adresy, ale úplná e-mailová adresa by neměla být odhalena zástupci služby. Pravidlo maskování lze definovat, které maskuje všechny e-mailové adresy v sadě výsledků libovolného dotazu. Jako další příklad je možné definovat odpovídající masku dat pro ochranu osobních údajů, aby vývojář mohl dotazovat produkční prostředí pro účely řešení potíží bez porušení předpisů dodržování předpisů.
Základy dynamického maskování dat
Zásady dynamického maskování dat nastavíte na webu Azure Portal výběrem podokna Dynamické maskování dat v části Zabezpečení v podokně konfigurace služby SQL Database. Tuto funkci nejde nastavit pomocí portálu pro službu SQL Managed Instance. Další informace naleznete v tématu Dynamické maskování dat.
Zásady dynamického maskování dat
- Uživatelé SQL vyloučeni z maskování: Sada uživatelů SQL, která může zahrnovat identity z Microsoft Entra ID (dříve Azure Active Directory), které z výsledků dotazu SQL získávají nemaskovaná data. Uživatelé s právy správce, jako je správce serveru, správce Microsoft Entra a db_owner role, můžou zobrazit původní data bez masky. (Poznámka: Platí také pro roli správce systému v SQL Serveru)
- Pravidla maskování: Sada pravidel, která definují určená pole, která se mají maskovat, a použitou funkci maskování. Určená pole je možné definovat pomocí názvu schématu databáze, názvu tabulky a názvu sloupce.
- Maskovací funkce: Sada metod, které řídí vystavení dat pro různé scénáře.
Maskování | Logika maskování |
---|---|
Výchozí | Úplné maskování podle datových typů určených polí * Použijte XXXX (nebo méně), pokud je velikost pole menší než 4 znaky pro řetězcové datové typy (nchar, ntext, nvarchar).* Použijte nulovou hodnotu pro číselné datové typy (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real). * Slouží 1900-01-01 pro datové typy data a času (date, datetime2, datetime, datetimeoffset, smalldatetime, time).* Pro sql_variant se použije výchozí hodnota aktuálního typu. * Pro XML se <masked /> dokument používá.* Použijte prázdnou hodnotu pro speciální datové typy (časové razítko, tabulka, HierarchyID, uniqueidentifier, binary, image, varbinary a prostorové typy). |
Kreditní karta | Metoda maskování, která zveřejňuje poslední čtyři číslice určených polí a přidá konstantní řetězec jako předponu ve formě platební karty.XXXX-XXXX-XXXX-1234 |
Poslat e-mail | Metoda maskování, která zveřejňuje první písmeno a nahrazuje doménu XXX.com pomocí předpony konstantního řetězce ve formě e-mailové adresy.aXX@XXXX.com |
Náhodné číslo | Metoda maskování, která generuje náhodné číslo podle vybraných hranic a skutečných datových typů. Pokud jsou určené hranice stejné, je maskovací funkce konstantní číslo. |
Vlastní text | Metoda maskování, která zpřístupňuje první a poslední znaky a přidá doprostřed vlastní řetězec odsazení. Pokud je původní řetězec kratší než vystavená předpona a přípona, použije se pouze odsazení řetězce.prefix[padding]suffix |
Doporučená pole k maskování
Modul doporučení DDM označí určitá pole z vaší databáze jako potenciálně citlivá pole, což může být vhodnými kandidáty pro maskování. V podokně Dynamické maskování dat na portálu se zobrazí doporučené sloupce pro vaši databázi. Vyberte Přidat masku pro jeden nebo více sloupců, pak vyberte příslušnou funkci maskování a vyberte Uložit, aby se u těchto polí použila maska.
Správa dynamického maskování dat pomocí T-SQL
- Pokud chcete vytvořit dynamickou masku dat, přečtěte si téma Vytvoření dynamické masky dat.
- Pokud chcete přidat nebo upravit masku u existujícího sloupce, přečtěte si článek Přidání nebo úprava masky u existujícího sloupce.
- Pokud chcete udělit oprávnění k zobrazení nemaskovaných dat, přečtěte si téma Udělení oprávnění k zobrazení nemaskovaných dat.
- Pokud chcete odstranit dynamickou masku dat, přečtěte si téma Vyřazení dynamické masky dat.
Nastavení dynamického maskování dat pro vaši databázi pomocí rutin PowerShellu
Zásady maskování dat
Pravidla maskování dat
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
Nastavení dynamického maskování dat pro vaši databázi pomocí rozhraní REST API
Rozhraní REST API můžete použít k programové správě zásad a pravidel maskování dat. Publikované rozhraní REST API podporuje následující operace:
Zásady maskování dat
- Vytvoření nebo aktualizace: Vytvoří nebo aktualizuje zásady maskování dat databáze.
- Získání: Získá zásadu maskování dat databáze.
Pravidla maskování dat
- Vytvoření nebo aktualizace: Vytvoří nebo aktualizuje pravidlo maskování dat databáze.
- Seznam podle databáze: Získá seznam pravidel maskování dat databáze.
Oprávnění
Jedná se o předdefinované role pro konfiguraci dynamického maskování dat:
Toto jsou požadované akce pro použití dynamického maskování dat:
Čtení a zápis:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
Čtení:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
Psát:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
Další informace o oprávněních při použití dynamického maskování dat pomocí příkazu T-SQL najdete v tématu Oprávnění.
Příklad podrobného oprávnění
Znemožnit neoprávněný přístup k citlivým datům a získat kontrolu tím, že ho maskuje neoprávněný uživatel na různých úrovních databáze. Oprávnění UNMASK můžete udělit nebo odvolat na úrovni databáze, na úrovni schématu, na úrovni tabulky nebo na úrovni sloupce libovolnému uživateli nebo roli databáze. V kombinaci s ověřováním Microsoft Entra je možné spravovat oprávnění UNMASK pro uživatele, skupiny a aplikace spravované v rámci vašeho prostředí Azure. Oprávnění UNMASK poskytuje podrobný způsob řízení a omezení neoprávněného přístupu k datům uloženým v databázi a zlepšení správy zabezpečení dat.
Vytvořte schéma, které bude obsahovat uživatelské tabulky:
CREATE SCHEMA Data; GO
Vytvoření tabulky s maskovanými sloupci:
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 );
Vložení ukázkových dat:
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');
Vytvořte schéma, které bude obsahovat tabulky služeb:
CREATE SCHEMA Service; GO
Vytvoření tabulky služby s maskovanými sloupci:
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 );
Vložení ukázkových dat:
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');
Vytvořte v databázi různé uživatele:
CREATE USER ServiceAttendant WITHOUT LOGIN; GO CREATE USER ServiceLead WITHOUT LOGIN; GO CREATE USER ServiceManager WITHOUT LOGIN; GO CREATE USER ServiceHead WITHOUT LOGIN; GO
Udělte uživatelům v databázi oprávnění ke čtení:
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;
Udělte uživatelům různá oprávnění 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;
Zadejte dotaz na data v kontextu uživatele
ServiceAttendant
:EXECUTE AS USER = 'ServiceAttendant'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Zadejte dotaz na data v kontextu uživatele
ServiceLead
:EXECUTE AS USER = 'ServiceLead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Zadejte dotaz na data v kontextu uživatele
ServiceManager
:EXECUTE AS USER = 'ServiceManager'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Dotazování dat v kontextu uživatele
ServiceHead
EXECUTE AS USER = 'ServiceHead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Pokud chcete odvolat oprávnění UNMASK, použijte následující příkazy 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;