Dynamische Datenmaskierung

Gilt für:Azure SQL-DatenbankAzure SQL Managed InstanceSQL-Datenbank in Fabric

Azure SQL-Datenbank, SQL database in Microsoft Fabric und Azure SQL Managed Instance unterstützen 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, wie viele der sensiblen Daten mit minimalen Auswirkungen auf die Anwendungsschicht angezeigt werden. 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. Eine Maskierungsregel kann definiert werden, die die gesamte E-Mail-Adresse im Resultset einer 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 Transact-SQL (T-SQL), wie im Beispiel für granulare Berechtigungen in diesem Artikel. Weitere Informationen finden Sie unter Dynamische Datenformatierung.

Richtlinie für die dynamische Datenmaskierung

  • SQL-Benutzer, die von der Maskierung ausgeschlossen sind: Eine Gruppe von SQL-Benutzern, die Identitäten aus der Microsoft Entra-ID enthalten können, die ungemaskete Daten in den SQL-Abfrageergebnissen abrufen. 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 angegebenen Felder definiert werden.

  • Maskierungsfunktionen: Eine Reihe von Methoden, die die Offenlegung von Daten in verschiedenen Szenarien steuern.

    Maskierungsfunktion Maskierungslogik
    Standard Vollständige Maskierung anhand der Datentypen der festgelegten Felder

    Verwenden Sie XXXX (oder weniger), wenn die Größe des Felds weniger als 4 Zeichen für Zeichenfolgendatentypen (nchar, ntext, nvarchar) beträgt.
    Verwenden Sie einen Nullwert für numerische Datentypen (bigint, bit, dezimal, int, money, numeric, smallint, smallmoney, tinyint, float, real).
    Verwenden Sie 1900-01-01 für Datums-/Zeitdatentypen (date, datetime2, datetime, datetimeoffset, smalldatetime, time).
    Für sql_variant wird der Standardwert des aktuellen Typs verwendet.
    Für XML wird das Dokument <masked /> verwendet.
    Verwenden Sie einen leeren Wert für spezielle Datentypen (Timestamp, Table, HierarchyID, UniqueIdentifier, Binary, Image, varbinary und spatial types).
    Kreditkarte Maskierungsmethode, die die letzten vier Ziffern der festgelegten Felder anzeigt und eine Konstantenzeichenfolge als Präfix im Format einer Kreditkarte hinzufügt.

    XXXX-XXXX-XXXX-1234
    E-Mail Maskierungsmethode, die den ersten Buchstaben sichtbar lässt 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 entsprechend den ausgewählten Grenzen und den tatsächlichen Datentypen eine Zufallszahl generiert. Wenn die festgelegten Grenzen gleich sind, ist die Maskierungsfunktion eine konstante Zahl.

    Screenshot der Maskierungsmethode zum Generieren einer Zufallszahl.
    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
    Screenshot des Navigationsbereichs.
    Datetime Ermöglicht die granulare Maskierung für Datums-/Uhrzeitspalten, nämlich datetime, datetime2, date, time, datetimeoffset und smalldatetime. Sie können bestimmte Komponenten wie Jahr (datetime("Y")), Monat (datetime("M")), Tag (), Stunde (datetime("D")datetime("h")), Minute (datetime("m")) oder Sekunde (datetime("s")) masken. Sie wenden diese Funktion mit T-SQL an.

    Beispiel:

    - Maskenjahr: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")').
    - Maskenmonat: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")').
    - Maskenminute: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")').

Die DDM-Empfehlungs-Engine kennzeichnet bestimmte Felder Ihrer Datenbank als potenziell sensible Felder, die sich gut für die Maskierung eignen. 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

Einrichten der dynamischen Datenmaskierung für Ihre Datenbank mithilfe von PowerShell-Cmdlets

Datenmaskierungsrichtlinien

Datenmaskierungsregeln

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

Berechtigungen

Sie können die dynamische Datenmaske mit den folgenden integrierten Rollen konfigurieren:

Dies sind die erforderlichen Maßnahmen zur Verwendung der dynamischen Datenmaskierung:

Lesen/Schreiben:

  • 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 granulare Berechtigungen

Verhindern Sie nicht autorisierten Zugriff auf vertrauliche Daten und behalten Sie die Kontrolle, indem Sie sie auf verschiedenen Ebenen der Datenbank vor nicht autorisierten Benutzern maskieren. Sie können Berechtigungen auf Datenbankebene, Schemaebene, Tabellenebene oder auf Spaltenebene für jeden Datenbankbenutzer oder jede Datenbankrolle erteilen oder widerrufen UNMASK . In Kombination mit der Microsoft Entra-Authentifizierung UNMASK können Berechtigungen für Benutzer, Gruppen und Anwendungen verwaltet werden, die in Ihrer Azure-Umgebung verwaltet werden. Die UNMASK Berechtigung bietet eine präzise Möglichkeit, nicht autorisierten Zugriff auf in der Datenbank gespeicherte Daten zu steuern und einzuschränken und die Datensicherheitsverwaltung zu verbessern.

  1. Erstellen eines Schemas, das Benutzertabellen enthält:

    CREATE SCHEMA Data;
    GO
    
  2. Tabelle mit maskierten Spalten erstellen:

    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. Beispieldaten einfügen:

    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. Erstellen eines Schemas für Servicetabellen:

    CREATE SCHEMA Service;
    GO
    
  5. Diensttabelle mit maskierten Spalten erstellen:

    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. Beispieldaten einfügen:

    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. Verschiedene Benutzer in der Datenbank erstellen:

    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. Erteilen Sie 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;
    
  9. Gewähren Sie unterschiedlichen UNMASK Benutzern Berechtigungen:

    • Erteilen der Berechtigung auf Spaltenebene UNMASK für ServiceAttendant:

      GRANT UNMASK ON Data.Membership (FirstName) TO ServiceAttendant;
      
    • Berechtigungen auf Tabellenebene UNMASK für ServiceLead erteilen:

      GRANT UNMASK ON Data.Membership TO ServiceLead;
      
    • Berechtigung auf Schemaebene UNMASK für ServiceManager erteilen:

      GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
      GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
      
    • Gewähren Sie die Datenbankebene-Berechtigung für UNMASK an ServiceHead;

      GRANT UNMASK TO ServiceHead;
      
  10. Fragen Sie die Daten im Kontext des ServiceAttendant-Benutzers ab:

    EXECUTE AS USER = 'ServiceAttendant';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  11. Daten im Kontext des Benutzers ServiceLead abfragen:

    EXECUTE AS USER = 'ServiceLead';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  12. Daten im Kontext des Benutzers ServiceManager abfragen:

    EXECUTE AS USER = 'ServiceManager';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  13. Daten im Kontext des ServiceHead-Benutzers abfragen

    EXECUTE AS USER = 'ServiceHead';
    
    SELECT MemberID,
           FirstName,
           LastName,
           Phone,
           Email,
           BirthDay
    FROM Data.Membership;
    SELECT MemberID,
           Feedback,
           Rating
    FROM Service.Feedback;
    
    REVERT;
    
  14. Verwenden Sie zum Widerrufen UNMASK von 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;
    

Dynamic data masking in Azure Synapse Analytics

Für dedizierte SQL-Pools in Azure Synapse Analytics siehe Dynamic Data Masking.