Verwenden von Datenschutzrichtlinien für Differential Privacy (differentielle Privatsphäre)¶
Unter diesem Thema wird beschriebn, wie ein Datenanbieter Datenschutzrichtlinien verwendet, um Differential Privacy (differentielle Privatsphäre) zu implementieren.
Über Datenschutzrichtlinien¶
Bei differentieller Privatsphäre muss Snowflake jede Abfrage daraufhin überprüfen, ob sie das Datenschutzbudget <label-diff_privacy_loss_budgets> des Benutzers, der die Abfrage ausführt, überschreitet. Datenschutzrichtlinien machen dies möglich. Ein Datenanbieter erstellt eine Datenschutzrichtlinie, die Benutzer mit Datenschutzbudgets verknüpft, und weist diese Richtlinie dann Tabellen und Ansichten zu, um sie datenschutzgeschützt zu machen.
Wenn ein Analyst eine Abfrage auf einer Tabelle mit einer Datenschutzrichtlinie ausführt, wertet Snowflake den Text der Richtlinie aus und führt eine der folgenden Aktionen aus:
Wenn die Richtlinie den Benutzer mit einem Datenschutzbudget verknüpft, stellt Snowflake sicher, dass der Datenschutzverlust der Abfrage dieses Datenschutzbudget nicht überschreitet. Wird die Abfrage erfolgreich ausgeführt, addiert Snowflake den durch die Abfrage entstandenen Datenschutzverlust zum kumulativen Datenschutzverlust für den Benutzer, damit nachfolgende Abfragen das Datenschutzbudget nicht überschreiten.
Wenn die Richtlinie angibt, dass der Benutzer die Tabelle ohne Einschränkung abfragen kann, dann enthalten die Container kein Rauschen, und Snowflake verfolgt den durch die Abfrage entstandenen Datenschutzverlust nicht.
Bewährte Praktiken für die Datenschutzrichtlinie¶
Sie können eine einzelne Datenschutzrichtlinie erstellen, um eine einzelne Entität zu schützen, und diese Datenschutzrichtlinie dann allen Tabellen und Ansichten zuweisen, die Informationen für diese Entität enthalten. Dadurch werden alle Datenschutzbudgets für diese Entität unter einer Datenschutzrichtlinie zusammengefasst. Sie müssen nicht für jede Tabelle und Ansicht eigene Datenschutzrichtlinien erstellen.
Mit Datenschutzrichtlinien arbeiten¶
Die Implementierung von Differential Privacy (differentieller Privatsphäre) für ein Schema erfolgt in drei Schritten:
Erstellen Sie eine Datenschutzrichtlinie, die Datenschutzbudgets anhand von Bedingungen wie Name, Rolle oder Konto mit Benutzern verknüpft.
Weisen Sie diese Datenschutzrichtlinie einer Tabelle oder Ansicht zu, um sicherzustellen, dass eine Abfrage oder eine Reihe von Abfragen über die Daten das mit dem Benutzer, der die Abfrage ausführt, verbundene Datenschutzbudget nicht überschreitet.
SELECT-Berechtigungen für die datenschutzgeschützte Daten erteilen Erteilen Sie keine Berechtigungen, bevor Sie der Tabelle oder Ansicht eine Datenschutzrichtlinie zugewiesen haben, da der Analyst dann vollen Zugriff auf die Daten hätte.
Bei der Verwaltung Ihrer Differential-Privacy-Umgebung können Sie auch:
Ersetzen Sie eine Datenschutzrichtlinie, die derzeit einer Tabelle oder Ansicht zugewiesen ist, durch eine andere Richtlinie.
Trennt eine Datenschutzrichtlinie von einer Tabelle oder Ansicht.
Datenschutzrichtlinie erstellen¶
Die grundlegendste Syntax für die Erstellung einer neuen Datenschutzrichtlinie lautet:
CREATE PRIVACY POLICY <name>
AS ( ) RETURNS PRIVACY_BUDGET -> <body>
Wobei:
name
ist der Name der Datenschutzrichtlinie.AS ( ) RETURNS PRIVACY_BUDGET
ist die Signatur und der Rückgabetyp der Richtlinie. Die Signatur akzeptiert keine Argumente und der Rückgabetyp ist PRIVACY_BUDGET, der ein interner Datentyp ist. Alle Datenschutzrichtlinien haben die gleiche Signatur und den gleichen Rückgabetyp.body
ist ein SQL-Ausdruck, der bestimmt, ob die Datenschutzrichtlinie ein Datenschutzbudget zurückgibt und wenn ja, welches.Der SQL-Ausdruck des Bodys ruft zwei Funktionen auf, um den Rückgabewert der Richtlinie zu steuern:
NO_PRIVACY_POLICY
Verwenden Sie den Ausdruck im Richtlinientext, um die Funktion NO_PRIVACY_POLICY aufzurufen, wenn Sie möchten, dass eine Abfrage uneingeschränkten Zugriff auf die Tabelle oder Ansicht hat, der die Datenschutzrichtlinie zugewiesen ist.
PRIVACY_BUDGET
Verwenden Sie den Ausdruck des Bodys, um die Funktion PRIVACY_BUDGET aufzurufen, wenn Sie ein Datenschutzbudget aus der Richtlinie zurückgeben möchten.
Die vollständige Syntax für die Funktionen NO_PRIVACY_POLICY und PRIVACY_BUDGET finden Sie unter CREATE PRIVACY POLICY.
Beispiel für Datenschutzrichtlinien¶
- Einzelnes Datenschutzbudget ohne Bedingungen
Erstellen Sie eine Datenschutzrichtlinie
my_priv_policy
, die immer ein Datenschutzbudget namensanalysts
zurückgibt:CREATE PRIVACY POLICY my_priv_policy AS ( ) RETURNS PRIVACY_BUDGET -> PRIVACY_BUDGET(BUDGET_NAME=> 'analysts');
- Bedingte Datenschutzrichtlinie
Erstellen Sie eine Datenschutzrichtlinie
my_priv_policy
, dieadmin
uneingeschränkten Zugriff auf die datenschutzgeschützte Tabelle oder Ansicht gewährt, während alle anderen Benutzer mit dem Datenschutzbudgetanalysts
verknüpft werden:CREATE PRIVACY POLICY my_priv_policy AS () RETURNS PRIVACY_BUDGET -> CASE WHEN CURRENT_USER() = 'ADMIN' THEN NO_PRIVACY_POLICY() ELSE PRIVACY_BUDGET(BUDGET_NAME => 'analysts') END;
- Bedingte Datenschutzrichtlinien für die Freigabe von Konten
Erstellen Sie die Datenschutzrichtlinie
my_priv_policy
, die Folgendes leistet:Ermöglicht
admin
uneingeschränkten Zugriff auf die datenschutzgeschützte Tabelle oder die Ansicht.Verknüpft das Datenschutzbudget
analysts
mit Benutzern desselben Kontos.Benennt das mit externen Kontobenutzern verknüpfte Datenschutzbudget, sodass es leicht identifiziert werden kann. Datenschutzbudgets werden automatisch einem bestimmten externen Konto zugeordnet, aber die Verwendung eines beschreibenden Namensschemas kann das Verwaltung von Datenschutzbudgets erleichtern.
CREATE PRIVACY POLICY my_priv_policy AS () RETURNS PRIVACY_BUDGET -> CASE WHEN CURRENT_USER() = 'ADMIN' THEN NO_PRIVACY_POLICY() WHEN CURRENT_ACCOUNT() = 'YE74187' THEN PRIVACY_BUDGET(BUDGET_NAME => 'analysts') ELSE PRIVACY_BUDGET(BUDGET_NAME => 'external.' || CURRENT_ACCOUNT()) END;
Verwenden von Kontextfunktionen im Textteil (Body) einer Richtlinie¶
Sie können die Kontextfunktionen in den Body einer Datenschutzrichtlinie aufnehmen, sodass ihre Verhaltensweise von dem Kontext abhängt, in dem die unterschiedlich private Abfrage ausgeführt wird.
Sie können die folgenden Kontextfunktionen im Textteil (Body) einer Datenschutzrichtlinie verwenden:
Kontextfunktion |
Beschreibung |
---|---|
Gibt den für die aktuelle Sitzung des Benutzers verwendeten Kontostandort zurück. |
|
Gibt die Datenbank zurück, die die Tabelle enthält, die durch die Datenschutzrichtlinie geschützt ist. |
|
Gibt den Namen der Organisation zurück, die für die aktuelle Sitzung des Benutzers verwendet wird. |
|
Gibt den Namen der Rolle zurück, die für die aktuelle Sitzung verwendet wird. |
|
Gibt das Schema zurück, das die Tabelle enthält, die durch die Datenschutzrichtlinie geschützt ist. |
|
Gibt den Namen des Benutzers zurück, der die Abfrage ausführt. |
|
Gibt den Namen der ausführenden Rolle zurück. |
|
Gibt den Namen der Freigabe zurück, die direkt auf die Tabelle oder die Ansicht zugegriffen hat, wo die INVOKER_SHARE-Funktion aufgerufen wurde. |
Tipp
Kontextfunktionen wie CURRENT_USER geben Zeichenfolgen zurück, sodass bei Vergleichen, die diese Funktionen verwenden, die Groß- und Kleinschreibung beachtet wird. Sie können LOWER verwenden, um Zeichenfolgen in Kleinbuchstaben umzuwandeln, wenn Sie einen Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung durchführen möchten.
Eine Datenschutzrichtlinie ändern¶
Verwenden Sie den Befehl ALTER PRIVACY POLICY, um eine Datenschutzrichtlinie zu ändern. Sie können die Richtlinie umbenennen, ihren Textteil (Body) ändern oder einen Kommentar ändern.
Um zum Beispiel den bestehenden Body einer Datenschutzrichtlinie my_priv_policy
durch einen neuen Body zu ersetzen, der immer ein Budget zurückgibt external_analysts
, führen Sie Folgendes aus:
ALTER PRIVACY POLICY my_priv_policy SET BODY ->
PRIVACY_BUDGET(BUDGET_NAME => 'external_analysts');
Datenschutzrichtlinie zuweisen¶
Eine Datenschutzrichtlinie kann auf eine oder mehrere Tabellen oder Ansichten angewendet werden, um sie mit Differential Privacy (differentiellen Privatsphäre) zu schützen. Einer Tabelle oder Ansicht kann nur eine Datenschutzrichtlinie zugewiesen werden.
Verwenden Sie die ADD PRIVACY POLICY-Klausel eines ALTER TABLE oder ALTER VIEW-Befehls, um der Tabelle oder Ansicht eine Datenschutzrichtlinie zuzuweisen. Die Syntax lautet:
ALTER { TABLE | [ MATERIALIZED ] VIEW } <name> ADD PRIVACY POLICY <policy_name> { NO ENTITY KEY | ENTITY KEY ( <column_name> ) }
Wobei:
name
gibt den Namen der Tabelle oder Ansicht an.policy_name
gibt den Namen der Datenschutzrichtlinie an.column_name
gibt den Entitätsschlüssel für die Tabelle oder die Ansicht an. Der Entitätsschlüssen ist eine Spalte, die eine Entität innerhalb der Tabelle oder Ansicht eindeutig identifiziert.
In den meisten Fällen werden Sie einen Entitätsschlüssel definieren wollen, um den Datenschutz auf Entitätsebene zu implementieren. Sie können jedoch die Klausel NO ENTITY KEY verwenden, um einzelne Zeilen zu schützen, ohne zu berücksichtigen, ob Daten, die zu einer Entität gehören, in mehreren Zeilen vorhanden sein könnten. Weitere Informationen dazu finden Sie unter Allgemeine Informationen zum Datenschutz auf Entitätsebene.
Um zum Beispiel die Richtlinie my_priv_policy
der Tabelle t1
zuzuweisen, wobei der Entitätsschlüssel die Spalte email
ist, führen Sie Folgendes aus:
ALTER TABLE t1 ADD PRIVACY POLICY my_priv_policy ENTITY KEY (email);
Datenschutzrichtlinie oder Entitätsschlüssel ersetzen¶
Die empfohlene Methode zum Ersetzen eines Schlüssels für Datenschutzrichtlinien oder Entitäten ist die Verwendung der Klauseln ADD und DROP in demselben ALTER TABLE- oder ALTER VIEW-Befehl. So können Sie die Änderung atomar vornehmen, da beide Operationen in derselben Transaktion stattfinden und keine Sicherheitslücke entsteht.
Um die gleiche Richtlinie beizubehalten, aber den Entitätsschlüssel zu ändern, müssen Sie die Richtlinie löschen und sie dann mit dem Entitätsschlüssel wieder hinzufügen.
So können Sie beispielsweise einer Tabelle, die bereits durch eine Datenschutzrichtlinie geschützt ist, eine neue Datenschutzrichtlinie zuweisen:
ALTER TABLE finance.accounting.customers
DROP PRIVACY POLICY priv_policy_1,
ADD PRIVACY POLICY priv_policy_2 ENTITY KEY (email);
Sie können die Datenschutzrichtlinie auch mit einer Anweisung von einer Tabelle oder Ansicht trennen und dann mit einer anderen Anweisung eine neue Richtlinie für die Tabelle oder Ansicht festlegen. Wenn Sie sich für diese Methode entscheiden, ist die Tabelle zwischen dem Trennen der einen Richtlinie und dem Zuweisen der anderen Richtlinie nicht durch eine Datenschutzrichtlinie geschützt. Wird in dieser Zeit eine Abfrage ausgeführt, könnte sie möglicherweise auf sensible Daten zugreifen, wenn die Benutzer noch die SELECT-Berechtigung für die Daten haben.
Datenschutzrichtlinie trennen¶
Verwenden Sie die DROP PRIVACY POLICY- Klausel eines ALTER TABLE- oder ALTER VIEW-Befehls, um eine Datenschutzrichtlinie von einer Tabelle oder Ansicht zu lösen. Nach der Ausführung dieses Befehls ist die Tabelle oder Ansicht nicht mehr datenschutzgeschützt. Die Syntax lautet:
ALTER { TABLE | [ MATERIALIZED ] VIEW } <name> DROP PRIVACY POLICY <policy_name>
Wobei:
name
gibt den Namen der Tabelle oder Ansicht an.policy_name
gibt den Namen der Datenschutzrichtlinie an.
Zum Beispiel, um die Datenschutzrichtlinie my_priv_policy
von der Tabelle finance.accounting.customers
zu trennen:
ALTER TABLE finance.accounting.customers DROP PRIVACY POLICY my_priv_policy;
Datenschutzrichtlinien überwachen¶
Um die Verwendung von Datenschutzrichtlinien zu überwachen, können Sie alle Datenschutzrichtlinien in Ihrem Konto auflisten, bestimmen, welche Tabellen und Ansichten durch eine bestimmte Datenschutzrichtlinie geschützt sind, oder alle Richtlinien auflisten, die derzeit einer Tabelle oder Ansicht zugewiesen sind.
Alle Datenschutzrichtlinien auflisten¶
Sie können die Ansicht PRIVACY_POLICIES im Account Usage-Schema der freigegebenen SNOWFLAKE-Datenbank verwenden. Diese Ansicht ist ein Katalog für alle Datenschutzrichtlinien in Ihrem Snowflake-Konto. Beispiel:
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.PRIVACY_POLICIES ORDER BY POLICY_NAME;
Referenzen von Datenschutzrichtlinien¶
Mit der Tabellenfunktion POLICY_REFERENCES Information Schema können Sie feststellen, welche Tabellen und Ansichten durch Datenschutzrichtlinien geschützt sind. Es gibt zwei verschiedene Syntaxoptionen:
Gibt eine Zeile für jedes Objekt (d. h. Tabelle oder Ansicht) zurück, für das die angegebene Datenschutzrichtlinie festgelegt ist:
USE DATABASE my_db; USE SCHEMA information_schema; SELECT policy_name, policy_kind, ref_entity_name, ref_entity_domain, ref_column_name, ref_arg_column_names, policy_status FROM TABLE(information_schema.policy_references(policy_name => 'my_db.my_schema.privpolicy'));
Rückgabe einer Zeile für jede Richtlinie, die der Tabelle
my_table
zugewiesene ist: Verwenden Sie die Spalte POLICY_KIND, um festzustellen, welche Richtlinien Datenschutzrichtlinien sind.USE DATABASE my_db; USE SCHEMA information_schema; SELECT policy_name, policy_kind, ref_entity_name, ref_entity_domain, ref_column_name, ref_arg_column_names, policy_status FROM TABLE(information_schema.policy_references(ref_entity_name => 'my_db.my_schema.my_table', ref_entity_domain => 'table'));
Berechtigungen und Befehle¶
Die folgenden Unterabschnitte enthalten Informationen, die Ihnen bei der Verwaltung von Datenschutzrichtlinien helfen.
Berechtigungen von Datenschutzrichtlinien¶
Snowflake unterstützt die folgenden Berechtigungen für das Datenschutzrichtlinien-Objekt.
Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.
Berechtigung |
Verwendung |
---|---|
APPLY |
Ermöglicht es Ihnen, einer Tabelle oder Ansicht eine Datenschutzrichtlinie zuzuweisen oder eine Datenschutzrichtlinie von ihr zu trennen. |
OWNERSHIP |
Erforderlich, um die meisten Eigenschaften einer Datenschutzrichtlinie zu ändern Die Eigentümerschaft der Datenschutzrichtlinie kann übertragen werden, wodurch die volle Kontrolle über die Datenschutzrichtlinie erteilt wird. |
DDL-Referenz zur Datenschutzrichtlinie¶
Snowflake unterstützt die folgenden DDL, um Datenschutzrichtlinien zu erstellen und zu verwalten.
Übersicht der DDL-Befehle, Operationen und Berechtigungen¶
Die folgende Tabelle fasst die Beziehung zwischen den Berechtigungen für den Datenschutz und den DDL-Operationen zusammen.
Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.
Operation |
Erforderliche Berechtigung |
---|---|
Datenschutzrichtlinie erstellen |
Eine Rolle mit CREATE PRIVACY POLICY-Berechtigung in demselben Schema. |
Datenschutzbestimmungen ändern |
Die Rolle mit der OWNERSHIP-Berechtigung für die Datenschutzrichtlinie |
Datenschutzrichtlinie beschreiben |
Einer der folgenden Punkte:
|
Datenschutzrichtlinie löschen |
Eine Rolle mit der Berechtigung OWNERSHIP für die Datenschutzrichtlinie. |
Datenschutzrichtlinien anzeigen. |
Einer der folgenden Punkte:
|
Weisen Sie einer Tabelle oder Ansicht eine Datenschutzrichtlinie zu oder trennen Sie eine Datenschutzrichtlinie von ihr. |
Einer der folgenden Punkte:
|