Freigeben über


Dynamische Datenmaskierung

Gilt für:Azure SQL-DatenbankAzure SQL Managed InstanceAzure 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. 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 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

    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 in Form einer Kreditkarte hinzufügt.

    XXXX-XXXX-XXXX-1234
    E-Mail 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.

    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: Navigationsbereich.
    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")').

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

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:

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 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 für Benutzertabellen:

    CREATE SCHEMA Data;
    GO
    
  2. 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
    );
    
  3. 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');
    
  4. Erstellen eines Schemas für Diensttabellen:

    CREATE SCHEMA Service;
    GO
    
  5. 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
    );
    
  6. 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');
    
  7. 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
    
  8. 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;
    
  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 ServiceHead an UNMASK;

      GRANT UNMASK TO ServiceHead;
      
  10. 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;
    
  11. 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;
    
  12. 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;
    
  13. Abfragen der Daten im Kontext des ServiceHead-Benutzers

    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;