Dynamische Datenmaskierung
Gilt für: Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics (nur dedizierte SQL-Pools) SQL-Datenbank in Fabric
Azure SQL-Datenbank, SQL-Datenbank in Microsoft Fabric, Azure SQL Managed Instance und Azure Synapse Analytics unterstützen die dynamische Datenmaskierung (DDM). Dynamische Datenmaskierung schränkt die Offenlegung sensibler Daten ein, indem diese für nicht berechtigte Benutzer maskiert werden.
Dynamische Datenmaskierung hilft beim Verhindern des unbefugten Zugriffs auf sensible Daten, indem Kunden festlegen dürfen, welcher Anteil der sensiblen Daten mit minimalen Auswirkungen auf die Anwendungsschicht offengelegt wird. Es handelt sich um eine richtlinienbasierte Sicherheitsfunktion, die die sensiblen Daten im Resultset einer Abfrage in festgelegten Datenbankfeldern ausblendet, während die Daten in der Datenbank nicht geändert werden.
Beispielsweise könnte ein Servicemitarbeiter in einem Callcenter einen Anrufer identifizieren, indem er mehrere Zeichen seiner E-Mail-Adresse bestätigt. Die ganze E-Mail-Adresse sollte ihm aber nicht offengelegt werden. Es kann eine Maskierungsregel definiert werden, die alle E-Mail-Adressen im Resultset einer beliebigen Abfrage maskiert. In einem weiteren Beispiel kann eine entsprechende Datenmaske zum Schutz personenbezogener Daten definiert werden, damit ein Entwickler Produktionsumgebungen zu Problembehandlungszwecken abfragen kann, ohne gegen Vorschriften zu verstoßen.
Grundlegendes zur dynamischen Datenmaskierung
Für Azure SQL-Datenbank richten Sie eine Richtlinie für die dynamische Datenmaskierung im Azure-Portal durch Auswählen des Bereichs Dynamische Datenmaskierung unter Sicherheit im Konfigurationsbereich Ihrer SQL-Datenbank-Instanz ein.
Dieses Feature kann nicht mithilfe des Azure-Portals für SQL Managed Instance oder SQL-Datenbank in Fabric festgelegt werden. Verwenden Sie stattdessen T-SQL, wie im Beispiel dynamische Datenformatierung in diesem Artikel. Weitere Informationen finden Sie unter Dynamic Data Masking.
Richtlinie für die dynamische Datenmaskierung
- Von der Maskierung ausgeschlossene SQL-Benutzer: Eine Gruppe von SQL-Benutzern, darunter Identitäten aus Microsoft Entra (früher Azure Active Directory), die unmaskierte Daten in den SQL-Abfrageergebnissen erhalten. Benutzer mit Administratorrechten, z. B. Serveradministratoren, Microsoft Entra-Administratoren oder Benutzer mit der Rolle „db_owner“, können die ursprünglichen Daten ohne Maskierung anzeigen. (Hinweis: Dies gilt auch für die Rolle „sysadmin“ in SQL Server)
- Maskierungsregeln: Eine Gruppe von Regeln, die die zu maskierenden Felder und verwendete Maskierungsfunktion definieren. Mithilfe eines Datenbankschemanamens, Tabellennamens und Spaltennamens können die vorgesehenen Felder bestimmt werden.
- Maskierungsfunktionen: Eine Reihe von Methoden, die die Anzeige von Daten in verschiedenen Szenarien steuern.
Maskierungsfunktion | Maskierungslogik |
---|---|
Standard | Vollständige Maskierung anhand der Datentypen der festgelegten Felder * XXXX oder weniger verwenden, wenn die Größe des Felds weniger als vier Zeichen für Zeichenfolgendatentypen (nchar, ntext, nvarchar) beträgt.* Für numerische Datentypen (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real) einen Nullwert verwenden. * Für Datum/Uhrzeit-Datentypen (date, datetime2, datetime, datetimeoffset, smalldatetime, time) 1900-01-01 verwenden.* Für sql-variant wird der Standardwert des aktuellen Typs verwendet. * Für XML wird das Dokument <masked /> verwendet.* Für spezielle Datentypen (timestamp, table, HierarchyID, uniqueidentifier, binary, image, varbinary und räumliche Typen) einen leeren Wert verwenden. |
Kreditkarte | Maskierungsmethode, die die letzten vier Ziffern der festgelegten Felder anzeigt und eine Konstantenzeichenfolge als Präfix in Form einer Kreditkarte hinzufügt.XXXX-XXXX-XXXX-1234 |
Maskierungsmethode, die den ersten Buchstaben und die Domäne durch „XXX.com“ ersetzt und dafür eine Konstantenzeichenfolge als Präfix in Form einer E-Mail-Adresse verwendet.aXX@XXXX.com |
|
Zufallszahl | Maskierungsmethode, die eine Zufallszahl entsprechend den ausgewählten Grenzen und den tatsächlichen Datentypen generiert. Wenn die festgelegten Grenzen gleich sind, ist die Maskierungsfunktion eine konstante Zahl. |
Benutzerdefinierter Text | Maskierungsmethode, die die ersten und letzten Zeichen anzeigt und in der Mitte eine benutzerdefinierte Auffüllzeichenfolge hinzufügt. Wenn die ursprüngliche Zeichenfolge kürzer als das verfügbar gemachte Präfix und Suffix ist, wird nur die Auffüllzeichenfolge verwendet.prefix[padding]suffix |
Empfohlene Felder für die Maskierung
Vom DDM-Empfehlungs-Engine werden bestimmte Felder Ihrer Datenbank als potenzielle Felder mit vertraulichen Daten angegeben, bei denen es sich um gute Kandidaten für die Maskierung handelt. Im Bereich Dynamische Datenmaskierung im Portal werden die empfohlenen Spalten für Ihre Datenbank angezeigt. Wählen Sie Maske hinzufügen für mindestens eine Spalte aus, und wählen Sie dann die entsprechende Maskierungsfunktion und Speichern aus, um die Maske für diese Felder anzuwenden.
Verwalten der dynamischen Datenmaskierung mit T-SQL
- Um eine dynamische Daten Maske zu erstellen, siehe Erstellen einer dynamischen Daten Maske.
- Um eine Maske zu einer vorhandenen Spalte hinzuzufügen oder zu bearbeiten, siehe Maske zu einer vorhandenen Spalte hinzufügen oder bearbeiten.
- Zur Erteilung von Berechtigungen zur Ansicht unmaskierter Daten siehe Erteilung von Berechtigungen zur Ansicht unmaskierter Daten.
- Zum Löschen einer dynamischen Daten Maske, siehe Löschen einer dynamischen Daten Maske.
Einrichten der dynamischen Datenmaskierung für Ihre Datenbank mithilfe von PowerShell-Cmdlets
Datenmaskierungsrichtlinien
Datenmaskierungsregeln
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
Einrichten der dynamischen Datenmaskierung für Ihre Datenbank mithilfe der REST-API
Sie können die REST-API verwenden, um Datenmaskierungsrichtlinien und -regeln programmgesteuert zu verwalten. Die veröffentlichte REST-API unterstützt die folgenden Vorgänge:
Datenmaskierungsrichtlinien
- Erstellen oder aktualisieren: Erstellt oder aktualisiert eine Datenbank-Datenmaskierungsrichtlinie.
- Get (Abrufen): Ruft eine Datenbank-Datenmaskierungsrichtlinie ab.
Datenmaskierungsregeln
- Erstellen oder aktualisieren: Erstellt oder aktualisiert eine Datenbank-Datenmaskierungsregel.
- Nach Datenbank auflisten: Ruft eine Liste von Datenbank-Datenmaskierungsregeln ab.
Berechtigungen
Dies sind die eingebauten Rollen, mit denen die dynamische Datenmaskierung konfiguriert wird:
Dies sind die erforderlichen Maßnahmen zur Verwendung der dynamischen Datenmaskierung:
Read/Write:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
Lesen:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
Schreiben:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
Um mehr über Berechtigungen bei der Verwendung von dynamischer Datenmaskierung mit dem T-SQL-Befehl zu erfahren, siehe Berechtigungen.
Beispiel für präzise Berechtigung
Verhindern Sie nicht autorisierten Zugriff auf vertrauliche Daten und gewinnen Sie die Kontrolle, indem Sie sie für nicht autorisierte Benutzer auf verschiedenen Ebenen der Datenbank maskieren. Sie können Datenbankbenutzern oder -rollen die UNMASK-Berechtigungen auf Datenbank-, Schema-, Tabellen- oder Spaltenebene erteilen oder entziehen. In Kombination mit der Microsoft Entra-Authentifizierung können UNMASK-Berechtigungen für Benutzer, Gruppen und Anwendungen verwaltet werden, die in der Azure-Umgebung enthalten sind. Die UNMASK-Berechtigung bietet eine präzise Möglichkeit, nicht autorisierten Zugriff auf die in der Datenbank gespeicherten Daten zu steuern und einzuschränken und die Datensicherheitsverwaltung zu verbessern.
Erstellen eines Schemas für Benutzertabellen:
CREATE SCHEMA Data; GO
Erstellen einer Tabelle mit maskierten Spalten:
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 );
Einfügen von Beispieldaten:
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');
Erstellen eines Schemas für Diensttabellen:
CREATE SCHEMA Service; GO
Erstellen einer Diensttabelle mit maskierten Spalten:
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 );
Einfügen von Beispieldaten:
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');
Erstellen verschiedener Benutzer in der Datenbank:
CREATE USER ServiceAttendant WITHOUT LOGIN; GO CREATE USER ServiceLead WITHOUT LOGIN; GO CREATE USER ServiceManager WITHOUT LOGIN; GO CREATE USER ServiceHead WITHOUT LOGIN; GO
Erteilen von Leseberechtigungen für die Benutzer in der Datenbank:
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;
Erteilen verschiedener UNMASK-Berechtigungen für Benutzer:
--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;
Abfragen der Daten im Kontext des
ServiceAttendant
-Benutzers:EXECUTE AS USER = 'ServiceAttendant'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Abfragen der Daten im Kontext des
ServiceLead
-Benutzers:EXECUTE AS USER = 'ServiceLead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Abfragen der Daten im Kontext des
ServiceManager
-Benutzers:EXECUTE AS USER = 'ServiceManager'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Abfragen der Daten im Kontext des
ServiceHead
-BenutzersEXECUTE AS USER = 'ServiceHead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Verwenden Sie zum Widerrufen von UNMASK-Berechtigungen die folgenden T-SQL-Anweisungen:
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;