Verwenden der dynamischen Datenmaskierung¶
Unter diesem Thema wird eine Anleitung zum Konfigurieren und Verwenden der dynamischen Datenmaskierung in Snowflake bereitgestellt.
Weitere Informationen zur Verwendung einer Maskierungsrichtlinie bei einem Tag finden Sie unter Tag-basierte Maskierungsrichtlinien.
Verwenden der dynamischen Datenmaskierung¶
Im Folgenden sind die allgemeinen Schritte zum Konfigurieren und Verwenden der dynamischen Datenmaskierung in Snowflake aufgeführt:
Erteilen Sie der kundenspezifischen Rolle eines Sicherheits- oder Datenschutzbeauftragten die Berechtigungen zur Verwaltung von Maskierungsrichtlinien.
Weisen Sie die kundenspezifische Rolle den entsprechenden Benutzern zu.
Der Sicherheits- oder Datenschutzbeauftragte erstellt und definiert Maskierungsrichtlinien und wendet diese auf Spalten mit vertraulichen Daten an.
Führen Sie Abfragen in Snowflake aus. Beachten Sie Folgendes:
Snowflake schreibt die Abfrage dynamisch neu, indem der SQL-Ausdruck der Maskierungsrichtlinie auf die Spalte angewendet wird.
Das Umschreiben der Spalte erfolgt an jeder Stelle, an der die in der Maskierungsrichtlinie angegebene Spalte in der Abfrage angezeigt wird (z. B. Projektionen, JOIN-Prädikat, WHERE-Klausel-Prädikat, ORDER BY und GROUP BY).
Benutzern werden maskierte Daten basierend auf den in den Maskierungsrichtlinien definierten Ausführungskontextbedingungen angezeigt. Weitere Informationen zum Ausführungskontext in Richtlinien zur dynamischen Datenmaskierung finden Sie unter Erweiterte Sicherheit auf Spaltenebene.
Durchsetzen dynamischer Datenmaskierungsrichtlinien für Apache Iceberg-Tabellen, die von Apache Spark™ abgefragt werden¶
Snowflake unterstützt die Durchsetzung dynamischer Datenmaskierungsrichtlinien für Apache Iceberg-Tabellen, die Sie von Apache Spark™ über Snowflake Horizon Catalog abfragen. Weitere Informationen dazu finden Sie unter Durchsetzen von Datenschutzrichtlinien bei der Abfrage von Apache Iceberg™-Tabellen von Apache Spark™.
Schritt 1: Kundenspezifischer Rolle Maskierungsrichtlinienberechtigungen erteilen¶
Ein Sicherheits- oder Datenschutzbeauftragter sollte als Administrator der Maskierungsrichtlinie (d. h. kundenspezifische Rolle: MASKING_ADMIN) fungieren und über Berechtigungen zum Definieren, Verwalten und Anwenden von Maskierungsrichtlinien auf Spalten verfügen.
Snowflake stellt die folgenden Berechtigungen zur Verfügung, die einem Sicherheits- oder Datenschutzbeauftragten erteilt werden können, um Maskierungsrichtlinien für Sicherheit auf Spaltenebene zu verwalten:
Berechtigung |
Object |
Beschreibung |
|---|---|---|
CREATE MASKING POLICY |
Schema |
This privilege controls who can create masking policies. |
APPLY MASKING POLICY |
Account |
This privilege controls who can [un]set masking policies on columns and is granted to the ACCOUNTADMIN role by default. . This privilege only allows applying a masking policy to a column and does not provide any additional table privileges described in Zugriffssteuerungsrechte. |
APPLY |
Masking policy |
Optional. Diese Berechtigung auf Richtlinienebene kann von einem Richtlinieneigentümer verwendet werden, um die Operationen zum Festlegen/Aufheben einer bestimmten Maskierungsrichtlinie für bestimmte Spalten an die Objekteigentümer (d. h. der Rolle mit der OWNERSHIP-Berechtigung für das Objekt) zu übergeben. . Snowflake unterstützt die besitzverwaltete Zugriffssteuerung, bei der Objekteigentümer auch als Dateneigentümer gelten. . Wenn der Richtlinienadministrator den Objekteigentümern hinsichtlich der Dateneigentümerschaft für geschützte Spalten vertraut, kann der Richtlinienadministrator diese Berechtigung verwenden, um die Operationen zum Festlegen/Aufheben von Richtlinien zu dezentralisieren. |
Im folgenden Beispiel wird die Rolle MASKING_ADMIN erstellt, und dieser Rolle werden Maskierungsrichtlinienberechtigungen erteilt.
Erstellen einer kundenspezifischen Rolle für den Administrator einer Maskierungsrichtlinie:
Zuweisen von Berechtigungen zur Rolle masking_admin:
Zulassen des Setzens/Aufhebens der Maskierungsrichtlinie ssn_mask für die Rolle table_owner (optional):
Wobei:
db_name.schema_nameGibt den Bezeichner des Schemas an, dem die Berechtigung erteilt werden soll.
Weitere Informationen dazu finden Sie unter:
Schritt 2: Kundenspezifische Rolle einem Benutzer zuweisen¶
Weisen Sie einem Benutzer, der als Sicherheits- oder Datenschutzbeauftragter fungiert, die kundenspezifische Rolle MASKING_ADMIN zu.
Schritt 3: Maskierungsrichtlinie erstellen¶
Erstellen Sie mit der Rolle MASKING_ADMIN eine Maskierungsrichtlinie, und wenden Sie diese auf eine Spalte an.
In diesem typischen Beispiel wird Benutzern mit der Rolle ANALYST der nicht maskierte Wert angezeigt. Benutzern ohne ANALYST-Rolle wird eine vollständige Maske angezeigt.
Tipp
Wenn Sie eine bestehende Maskierungsrichtlinie aktualisieren möchten und dazu die aktuelle Definition der Richtlinie anzeigen müssen, können Sie die Funktion GET_DDL aufrufen oder den Befehl DESCRIBE MASKING POLICY ausführen.
Schritt 4: Maskierungsrichtlinie auf Tabellen- oder Ansichtsspalte anwenden¶
In diesen Beispielen wird davon ausgegangen, dass bei der Erstellung der Tabelle auf die Tabellenspalte und bei der Erstellung der Ansicht auf die Ansichtsspalte keine Maskierungsrichtlinie angewendet wird. Sie können optional eine Maskierungsrichtlinie auf eine Tabellenspalte anwenden, wenn Sie die Tabelle mit einer CREATE TABLE-Anweisung oder eine Ansichtsspalte mit einer CREATE VIEW-Anweisung erstellen.
Führen Sie die folgenden Anweisungen aus, um die Richtlinie auf eine Tabellenspalte oder eine Ansichtsspalte anzuwenden.
Schritt 5: Daten in Snowflake abfragen¶
Führen Sie in Snowflake zwei verschiedene Abfragen aus, eine Abfrage mit der Rolle ANALYST und eine andere Abfrage mit einer anderen Rolle, um zu überprüfen, ob Benutzern ohne ANALYST-Rolle eine vollständige Maske angezeigt wird.
Maskierungsrichtlinien mit einer memoisierbaren Funktion¶
In diesem Beispiel wird eine memoisierbare Funktion verwendet, um das Ergebnis einer Abfrage auf der Zuordnungstabelle zwischenzuspeichern, mit der ermittelt wird, ob eine Rolle berechtigt ist, PII-Daten einzusehen. Ein Data Engineer verwendet eine Maskierungsrichtlinie, um die Spalten in der Tabelle zu schützen.
Die folgende Prozedur referenziert diese Objekte:
Eine Tabelle
employee_data, die PII-Daten enthält:Eine Zuordnungstabelle, die festlegt, ob eine bestimmte Rolle
auth_role_tberechtigt ist, Daten einzusehen:
Führen Sie diese Schritte aus, um eine Maskierungsrichtlinie zu erstellen, die eine memoisierbare Funktion mit Argumenten aufruft:
Erstellen Sie eine memoisierbare Funktion, die die Zuordnungstabelle abfragt. Die Funktion gibt ein Array von Rollen basierend auf dem Wert der Spalte
is_authorizedzurück:Rufen Sie die memoisierbare Funktion auf, um die Abfrageergebnisse zwischenzuspeichern. In diesem Beispiel übergeben Sie den Wert
TRUEals Argumentwert, da das resultierende Array als Quelle der zulässigen Rollen für den Zugriff auf die durch die Maskierungsrichtlinie geschützten Daten dient:Erstellen Sie eine Maskierungsrichtlinie zum Schutz der Spalte
id. Die Richtlinie ruft die memoisierbare Funktion auf, um festzustellen, ob die zur Abfrage der Tabelle verwendete Rolle berechtigt ist, die Daten in der geschützten Spalte einzusehen:Legen Sie die Maskierungsrichtlinie für die Tabelle mit einem ALTER TABLE … ALTER COLUMN-Befehl fest:
Fragen Sie die Tabelle ab, um die Richtlinie zu testen:
Diese Abfrage gibt nicht maskierte Daten zurück.
Wenn Sie jedoch in die Rolle PUBLIC wechseln und die Abfrage aus diesem Schritt wiederholen, werden die Werte in der Spalte
iddurchNULLersetzt.
Weitere Beispiele für Maskierungsrichtlinien¶
Im Folgenden finden Sie weitere typische Beispiele, die im Richtlinientext zur dynamischen Datenmaskierung verwendet werden können.
Erlauben Sie einem Produktions konto, nicht maskierte Werte anzuzeigen, und allen anderen Konten (z. B. Entwicklung, Test), maskierte Werte anzuzeigen.
Rückgabe von NULL für nicht autorisierte Benutzer:
Rückgabe eines statischen maskierten Werts für nicht autorisierte Benutzer:
Rückgabe eines Hashwerts mit SHA2 , SHA2_HEX für nicht autorisierte Benutzer: Die Verwendung einer Hashing-Funktion in einer Maskierungsrichtlinie kann zu Kollisionen führen. Gehen Sie daher mit diesem Ansatz vorsichtig um. Weitere Informationen dazu finden Sie unter Erweiterte Sicherheit auf Spaltenebene.
Anwenden einer Teil- oder Vollmaske:
Verwenden von Zeitstempeln.
Wichtig
Gegenwärtig unterstützt Snowflake keine unterschiedlichen Ein- und Ausgabedatentypen in einer Maskierungsrichtlinie, wie z. B. beim Definieren der Maskierungsrichtlinie, um einen Zeitstempel anzusteuern und eine Zeichenfolge (z. B.
***MASKED***) zurückzugeben. Die Ein- und Ausgabedatentypen müssen übereinstimmen.Eine Abhilfe besteht darin, den tatsächlichen Zeitstempelwert mithilfe eines generierten Zeitstempelwerts umzuwandeln. Weitere Informationen dazu finden Sie unter DATE_FROM_PARTS und CAST, ::.
Verwenden einer UDF:
Auf Variant-Daten:
Verwenden einer kundenspezifischen Berechtigungstabelle. Beachten Sie die Verwendung von EXISTS in der WHEN-Klausel. Verwenden Sie beim Einfügen einer Unterabfrage in den Maskierungsrichtlinientext immer EXISTS. Weitere Informationen zu Unterabfragen, die Snowflake unterstützt, finden Sie unter Verwenden von Unterabfragen.
Verwenden von DECRYPT auf zuvor mit ENCRYPT oder ENCRYPT_RAW verschlüsselte Daten unter Verwendung einer Passphrase für die verschlüsselten Daten:
Verwenden einer <JavaScript UDF auf JSON (VARIANT):
In diesem Beispiel maskiert eine JavaScript-UDF die Standortdaten in einer JSON-Zeichenfolge. Es ist wichtig, den Datentyp in der UDF und in der Maskierungsrichtlinie als VARIANT festzulegen. Wenn der Datentyp in Tabellenspalte, UDF und Signatur der Maskierungsrichtlinie nicht übereinstimmen, gibt Snowflake eine Fehlermeldung zurück, da der SQL-Code nicht aufgelöst werden kann.
Verwendung des Datentyps GEOGRAPHY:
In diesem Beispiel verwendet eine Maskierungsrichtlinie die Funktion TO_GEOGRAPHY, um für Benutzer, deren CURRENT_ROLE nicht
ANALYSTist, alle GEOGRAPHY-Daten einer Spalte in einen festen Punkt zu konvertieren: den Längen- und Breitengrad für Snowflake in San Mateo, Kalifornien, USA.Legen Sie die Maskierungsrichtlinie für eine Spalte mit dem Datentyp GEOGRAPHY fest, und setzen Sie den Wert GEOGRAPHY_OUTPUT_FORMAT für die Sitzung auf
GeoJSON:Snowflake gibt Folgendes zurück:
Die Werte der Abfrageergebnisse in Spalte B hängen vom Wert des Parameters GEOGRAPHY_OUTPUT_FORMAT der Sitzung ab. Wenn der Parameterwert beispielsweise auf
WKTgesetzt ist, gibt Snowflake Folgendes zurück:
Beispiele für die Verwendung anderer Kontextfunktionen und Rollenhierarchien finden Sie unter Erweiterte Sicherheit auf Spaltenebene.
Nächste Themen: