Erläuterungen zu Zeilenzugriffsrichtlinien

Dieses Thema bietet eine Einführung in Zeilenzugriffsrichtlinien und in Sicherheit auf Zeilenebene.

Unter diesem Thema:

Was ist Sicherheit auf Zeilenebene?

Snowflake unterstützt Sicherheit auf Zeilenebene durch die Verwendung von Zeilenzugriffsrichtlinien, um zu bestimmen, welche Zeilen im Abfrageergebnis zurückgegeben werden sollen. Die Zeilenzugriffsrichtlinie kann relativ einfach sein, um einer bestimmten Rolle das Anzeigen von Zeilen zu erlauben, oder komplexer, um eine Zuordnungstabelle in die Richtliniendefinition aufzunehmen, die den Zugriff auf Zeilen im Abfrageergebnis bestimmt.

Eine Zeilenzugriffsrichtlinie ist ein Objekt auf Schemaebene, das bestimmt, ob eine bestimmte Zeile in einer Tabelle oder einer Ansicht von den folgenden Anweisungstypen angezeigt werden kann:

Zeilenzugriffsrichtlinien können Bedingungen und Funktionen im Richtlinienausdruck enthalten, um die Daten zur Laufzeit der Abfrage bei Erfüllung der Bedingungen zu transformieren. Der richtliniengesteuerte Ansatz unterstützt die Aufgabentrennung, damit Governance-Teams Richtlinien zum Schutz vertraulicher Daten definieren können. Dieser Ansatz umfasst auch den Eigentümer des Objekts (d. h. die Rolle mit OWNERSHIP-Berechtigung für das Objekt, z. B. eine Tabelle oder Ansicht), der normalerweise vollen Zugriff auf die zugrunde liegenden Daten hat. Eine einzige Richtlinie kann gleichzeitig für verschiedene Tabellen und Ansichten festgelegt werden.

The row access policy admin can apply row access policies to tables and views.

Zeilenzugriffsrichtlinien verhindern derzeit nicht, dass Zeilen eingefügt werden oder dass sichtbare Zeilen aktualisiert oder gelöscht werden.

Eine Zeilenzugriffsrichtlinie kann einer Tabelle oder Ansicht entweder bei der Erstellung des Objekts oder nach der Erstellung des Objekts hinzugefügt werden. Weitere Informationen dazu finden Sie unter Zeilenzugriffsrichtlinie auf eine Tabelle oder Ansicht anwenden (unter diesem Thema).

Wie funktioniert eine Zeilenzugriffsrichtlinie?

Eine Zeilenzugriffsrichtlinie enthält einen Ausdruck, der Snowflake-Datenbankobjekte (z. B. Tabelle oder Ansicht) angeben kann und mit Funktionen für bedingte Ausdrücke und Kontextfunktionen bestimmt, welche Zeilen in einem bestimmten Kontext sichtbar sein sollen.

Snowflake wertet den Richtlinienausdruck anhand der Rolle des Eigentümers der Richtlinie aus, nicht anhand der Rolle des Operators, der die Abfrage ausgeführt hat. Dieser Ansatz ermöglicht es Snowflake, keine Zeile in einem Abfrageergebnis zurückzugeben, da der Abfrageoperator keinen Zugriff auf die Zuordnungstabellen in der Zeilenzugriffsrichtlinie benötigt.

Tipp

Wenn Sie eine bestehende Zeilenzugriffsrichtlinie 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 ROW ACCESS POLICY ausführen.

Der Ausdruck für die Zeilenzugriffsrichtlinie kann dann mit dem Befehl ALTER ROW ACCESS POLICY aktualisiert werden. Bei diesem Befehl ist es nicht erforderlich, dass Zeilenzugriffsrichtlinien vorher aus Tabellen oder Ansichten entfernt werden. Eine Tabelle oder Ansicht, die durch eine Zeilenzugriffsrichtlinie geschützt ist, bleibt also geschützt, während der Richtlinienausdruck aktualisiert wird.

Zeilenzugriffsrichtlinien zur Laufzeit von Abfragen

Zur Laufzeit der Abfrage durchläuft Snowflake den folgenden Prozess:

  1. Snowflake ermittelt, ob eine Zeilenzugriffsrichtlinie für ein Datenbankobjekt festgelegt ist. Wenn dem Datenbankobjekt eine Richtlinie hinzugefügt wird, sind alle Zeilen durch die Richtlinie geschützt.

  2. Snowflake erstellt eine sichere dynamische Ansicht (d. h. eine sichere Inline-Ansicht) des Datenbankobjekts.

  3. Die Werte der im Befehl ALTER TABLE oder ALTER VIEW angegebenen Spalten (d. h. beim Hinzufügen einer Zeilenzugriffsrichtlinie zu einer Tabelle oder Ansicht) werden an die entsprechenden Parameter in der Richtlinie gebunden, und der Richtlinienausdruck wird ausgewertet.

  4. Snowflake generiert die Abfrageausgabe für den Benutzer, und die Abfrageausgabe enthält nur Zeilen, die auf der Richtliniendefinition basieren, die auf TRUE ausgewertet wird.

Weitere Details zum spezifischen Ausführungsplan finden Sie unter Query Profile (unter diesem Thema).

Snowflake unterstützt verschachtelte Zeilenzugriffsrichtlinien, z. B. eine Zeilenzugriffsrichtlinie für eine Tabelle und eine Zeilenzugriffsrichtlinie für eine Ansicht für dieselbe Tabelle. Zur Laufzeit der Abfrage wertet Snowflake alle für eine bestimmte Abfrage relevanten Zeilenzugriffsrichtlinien in der folgenden Sequenz aus:

  • Die für die Tabelle geltende Zeilenzugriffsrichtlinie wird immer zuerst ausgeführt.

  • Die Richtlinie für die Ansicht wird ausgeführt, nachdem die Richtlinie für die Tabelle ausgewertet wurde.

  • Wenn verschachtelte Ansichten vorhanden sind (z. B. Tabelle 1 -> Ansicht 1 -> Ansicht 2 -> … Ansicht n), werden die Richtlinien nacheinander von links nach rechts angewendet.

Dieses Muster setzt sich fort, egal wie viele Zeilenzugriffsrichtlinien hinsichtlich der Daten in der Abfrage vorhanden sind. Die folgende Abbildung zeigt die Beziehung zwischen Abfrageoperator, Tabellen, Ansichten und Richtlinien.

Row access policies with tables and views.

Weitere Informationen zu Berechtigungen und Befehlen für Zeilenzugriffsrichtlinie sowie eine schrittweise Implementierung finden Sie unter:

Repräsentativer Anwendungsfall: Einfache Zeilenfilterung

Eine einfache Anwendung einer Zeilenzugriffsrichtlinie ist die Angabe eines Attributs in der Richtlinie und einer Rolle, die dieses Attribut im Abfrageergebnis sehen darf. Der Vorteil von einfachen Richtlinien wie dieser ist, dass es vernachlässigbare Performance-Kosten für Snowflake gibt, diese Richtlinien auszuwerten, um Abfrageergebnisse zurückzugeben, verglichen mit der Verwendung von Zeilenzugriffsrichtlinien mit Zuordnungstabellen.

Als repräsentatives Beispiel kann es notwendig sein, dass IT-Administratoren (z. B. die kundenspezifische Rolle it_admin) eine Mitarbeiter-Identifikationsnummer (d. h. empl_id) abfragen, bevor sie dem Mitarbeiter zusätzliche Berechtigungen zur Nutzung interner Systeme erteilen. Daher sollte die Zeilenzugriffsrichtlinie Zeilen im Abfrageergebnis zurückgeben, falls CURRENT_ROLE mit der kundenspezifischen Rolle it_admin übereinstimmt, und keine Zeilen für alle anderen Rollen zurückgeben. Beispiel:

CREATE OR REPLACE ROW ACCESS POLICY rap_it
AS (empl_id varchar) RETURNS BOOLEAN ->
  'it_admin' = current_role()
;
Copy

Diese Richtlinie ist die prägnanteste Version einer Zeilenzugriffsrichtlinie, da keine weiteren Bedingungen ausgewertet werden müssen, sondern nur der Wert von CURRENT_ROLE.

Wenn die Rollenhierarchie berücksichtigt werden muss, könnte diese Richtlinie ebenfalls IS_ROLE_IN_SESSION verwenden, um andere Rollen besser einzubeziehen und die Mitarbeiter-ID-Nummer im Abfrageergebnis zu sehen.

Alternativ können Sie mit der Funktion CASE zusätzliche Bedingungen berücksichtigen, indem Sie WHEN/THEN/ELSE-Klauseln einfügen, um eine detailliertere bedingte Logik zu unterstützen.

Repräsentativer Anwendungsfall: Verwenden einer Zuordnungstabelle zum Filtern des Abfrageergebnisses

Eine Bedingung für die Zeilenzugriffsrichtlinie kann auf eine Zuordnungstabelle verweisen, um die Resultset der Abfrage zu filtern. Die Verwendung von Zuordnungstabellen kann jedoch zu einer geringeren Leistung im Vergleich zum einfacheren Beispiel führen.

Verwenden Sie z. B. eine Zuordnungstabelle, um die Umsatzwerte zu bestimmen, die ein Vertriebsleiter in einem bestimmten Vertriebsgebiet sehen kann. Die Zuordnungstabelle sollte den Vertriebsleiter und das Vertriebsgebiet angeben (z. B. WW: Weltweit, NA: Nordamerika, EU: Europäische Union).

Vertriebsleiter

Region

Alice

WW

Bob

NA

Simon

EU

Definieren Sie als Nächstes eine Richtlinie mit einer oder mehreren Bedingungen, um die Zuordnungstabelle mit einer Unterabfrage abzufragen. Zur Laufzeit der Abfrage ermittelt Snowflake, ob der Benutzer, der die Abfrage ausführt, mit der in der Zuordnungstabelle angegebenen Vertriebsregion übereinstimmt.

Wenn eine Übereinstimmung vorliegt, kann der Benutzer diese Zeilen im Abfrageergebnis sehen. Basierend auf der Zuordnungstabelle sind die erwarteten Abfrageergebnisse wie folgt:

Firma

Region

Umsatzerlöse

Wer kann anzeigen

Acme

EU

2,5 Mrd.

Alice, Simon

Acme

NA

1,5 Mrd.

Alice, Bob

Weitere Details zur Implementierung einer Zeilenzugriffsrichtlinie mit einer Zuordnungstabelle finden Sie unter:

Optimieren der Verarbeitungsleistung von Richtlinien

Zeilenzugriffsrichtlinien sind so konzipiert, dass sie in einer Vielzahl von realen Szenarios gut funktionieren. Berücksichtigen Sie die folgenden Tipps, um Daten zu sichern und die Verarbeitungsleistung zu verbessern:

Richtlinienargumente einschränken

Snowflake muss Spalten, an die eine Richtlinie gebunden ist, auch dann scannen, wenn die Spalten in Abfragen nicht referenziert werden. Daher werden Richtlinien mit weniger Argumenten im Allgemeinen besser abschneiden als Richtlinien mit vielen Argumenten.

SQL-Ausdruck vereinfachen

Richtlinien mit einfachen SQL-Ausdrücken, wie z. B. CASE-Anweisungen, schneiden im Allgemeinen besser ab als Richtlinien, die auf Zuordnungstabellen (d. h. Lookup-Tabellen) zugreifen müssen. Eine Minimierung der Anzahl der Tabellensuchvorgänge verbessert die Leistung.

Wenn Sie eine Zuordnungstabelle angeben, ersetzen Sie den Verweis auf die Zuordnungstabelle durch eine memoisierbare Funktion. Weitere Informationen dazu finden Sie unter:

Mit realistischen Workloads testen

Ohne eine Zeilenzugriffsrichtlinie wird die SELECT COUNT(*) FROM t1-Abfrage in Millisekunden ausgeführt, da Snowflake die Anzahl der Zeilen in der Tabelle bereits kennt. Das Hinzufügen einer Zeilenzugriffsrichtlinie bedeutet jedoch, dass Snowflake die Tabelle scannen muss, um die Anzahl der Zeilen zu zählen, auf die im aktuellen Kontext zugegriffen werden kann. Obwohl der Leistungsunterschied groß ist, ist diese Abfrage nicht repräsentativ für die meisten realen Workloads.

Weitere Informationen zu diesem Beispiel finden Sie im Abschnitt Hinweise (unter diesem Thema).

Nach Attributen clustern

Bei sehr großen Tabellen kann das Clustering nach Attributen, die für die Richtlinienfilterung verwendet werden, zur Verbesserung der Leistung führen.

Weitere Informationen dazu finden Sie unter Gruppierungsschlüssel und geclusterte Tabellen.

Suchoptimierungsdienst

Der Suchoptimierungsdienst kann die Performance von Abfragen auf Tabellen verbessern, die Maskierungsrichtlinien und Zeilenzugriffsrichtlinien verwenden.

Weitere Informationen dazu finden Sie unter Unterstützung von Tabellen mit Maskierungsrichtlinien und Zeilenzugriffsrichtlinien im Suchoptimierungsdienst.

Vorteile

Der Hauptvorteil einer Zeilenzugriffsrichtlinie besteht darin, dass die Richtlinie es einer Organisation ermöglicht, Datensicherheit, Governance und Analysen durch eine erweiterbare Richtlinie richtig auszubalancieren. Durch die Erweiterbarkeit der Zeilenzugriffsrichtlinie können jederzeit eine oder mehrere Bedingungen hinzugefügt oder entfernt werden, um sicherzustellen, dass die Richtlinie mit Aktualisierungen von Daten, Zuordnungstabellen und der RBAC-Hierarchie konsistent ist.

Weitere Vorteile sind:

Benutzerfreundlichkeit

Eine einmal geschriebene Richtlinie kann auf Tabellen in allen Datenbanken und Schemas angewendet werden.

Änderungsmanagement

Die Definitionen von Zeilenzugriffsrichtlinie können einfach geändert werden, ohne dass die Richtlinie erneut auf Tabellen angewendet werden muss.

Wenn Sie eine Zuordnungstabelle verwenden, aktualisieren Sie die Berechtigungsinformationen in der Zuordnungstabelle, auf die die Richtlinie verweist, ohne die Richtlinie ändern zu müssen.

Datenadministration und SoD

Ein zentraler Datenadministrator entscheidet, welche Objekte geschützt werden sollen, nicht der Objekteigentümer. Zeilenzugriffsrichtlinien sind einfach zu verwalten und werden durch zentrale, dezentrale und hybride Verwaltungsmodelle unterstützt, um die Aufgabentrennung zu unterstützen (d. h. SoD).

Datenautorisierung und Data Governance

Die Zeilenzugriffsrichtlinie unterstützt den kontextuellen Datenzugriff nach Rollen- oder kundenspezifischen Berechtigungen.

Einschränkungen

  • Die Verwendung der CHANGES-Klausel für eine durch eine Zeilenzugriffsrichtlinie geschützte Ansicht wird nicht unterstützt.

  • Snowflake unterstützt nicht die Verwendung externer Tabellen als Zuordnungstabelle in einer Zeilenzugriffsrichtlinie. Weitere Informationen dazu finden Sie unter Externe Tabellen (unter diesem Thema).

  • Snowflake unterstützt nicht das Anhängen einer Zeilenzugriffsrichtlinie an das Streamobjekt, wendet aber die Zeilenzugriffsrichtlinie auf die Tabelle an, wenn der Stream auf eine Tabelle zugreift, die durch eine Zeilenzugriffsrichtlinie geschützt ist. Weitere Informationen dazu finden Sie unter Streams (unter diesem Thema).

  • Zukünftige Berechtigungszuweisungen zu Zeilenzugriffsrichtlinien werden nicht unterstützt.

    Als Problemumgehung können Sie einer kundenspezifischen Rolle die Berechtigung APPLYROW ACCESS POLICY zuweisen, damit diese Rolle Zeilenzugriffsrichtlinien auf eine Tabelle oder Ansicht anwenden kann.

Hinweise

  • Das Anhängen von Zeilenzugriffsrichtlinien an Tabellen, die durch andere Richtlinien für den Zeilenzugriff oder Maskierungsrichtlinien geschützt sind, kann zu Fehlern führen. Weitere Informationen dazu finden Sie unter ALTER TABLE, ALTER EXTERNAL TABLE und ALTER VIEW.

  • Das Einfügen einer oder mehrerer Unterabfragen in den Richtlinientext kann zu Fehlern führen. Wenn möglich, begrenzen Sie die Anzahl der Unterabfragen, begrenzen Sie die Anzahl der JOIN-Operationen, und vereinfachen Sie die Bedingungen der WHERE-Klausel.

  • Snowflake verwaltet Statistiken über Tabellen- und Ansichtsspalten, die es ermöglichen, viele einfache Abfragen in Millisekunden zu beantworten. Beispiele für solche Abfragen sind die Verwendung der Funktion COUNT in select count(*) from my_table oder der Funktion MAX in select max(c) from my_table.

    Im Allgemeinen sind diese Statistiken und Optimierungen bei einer Zeilenzugriffsrichtlinie nicht anwendbar, da Snowflake die Teilmenge der Zeilen identifizieren muss, auf die die Abfrage zugreifen darf. Das Ausführen von Abfragen dieses Typs auf Tabellen und Ansichten mit einer Zeilenzugriffsrichtlinie kann länger dauern als erwartet, um die Abfrageergebnisse zu erhalten, da diese Statistiken und Optimierungen nicht verwendet werden und die zurückgegebenen Statistiken nur auf den zulässigen Zugriffen basieren und nicht auf den tatsächlichen statistischen Werten (d. h. Statistiken über die Tabelle oder die Ansicht ohne Zeilenzugriffsrichtlinie).

  • Wenn die Richtlinie die Funktion CURRENT_DATABASE oder CURRENT_SCHEMA aufruft, ergibt die Funktion die Datenbank oder das Schema, in der/dem die geschützte Tabelle oder Ansicht enthalten ist, und nicht die Datenbank oder das Schema für die Sitzung, die Sie mit einem USE <Objekt>-Befehl angeben oder mit der Kontextauswahl in Snowsight auswählen.

Zeilenzugriffsrichtlinien mit Snowflake-Objekten und -Features verwenden

In den folgenden Abschnitten wird beschrieben, wie sich Zeilenzugriffsrichtlinien auf Tabellen und Ansichten sowie auf andere Snowflake-Funktionen auswirken.

Datenbankobjekte mit Zeilenzugriffsrichtlinie abrufen

Die Information Schema-Tabellenfunktion POLICY_REFERENCES kann Informationen zur Zeilenzugriffsrichtlinie zurückgeben, die einem bestimmten Objekt zugewiesen wurde.

  • Alle Objekte einer bestimmten Richtlinie:

    Geben Sie den Namen der Zeilenzugriffsrichtlinie an (z. B. mydb.policies.rap1):

    SELECT *
    FROM TABLE(
      mydb.INFORMATION_SCHEMA.POLICY_REFERENCES(
        POLICY_NAME=>'mydb.policies.rap1'
      )
    );
    
    Copy
  • Die einem bestimmten Objekt zugewiesene Richtlinie:

    Geben Sie den Namen des Objekts (z. B. mydb.tables.t1) und die Objektdomäne (z. B. table) an:

    SELECT *
    FROM TABLE(
      mydb.INFORMATION_SCHEMA.POLICY_REFERENCES(
        REF_ENTITY_NAME => 'mydb.tables.t1',
        REF_ENTITY_DOMAIN => 'table'
      )
    );
    
    Copy

Beachten Sie, dass diese Tabellenfunktion eine Ergänzung zur Account Usage-Ansicht POLICY_REFERENCES ist.

Aktive Rollenhierarchie und Zuordnungstabellen

Die Richtlinienbedingungen können die aktiven Primär- und Sekundärrollen des Benutzers in einer Sitzung direkt auswerten, aktive Rollen in einer Zuordnungstabelle suchen oder beides tun, je nachdem, wie der Richtlinienadministrator die Richtlinie schreiben möchte.

Für diese Anwendungsfälle empfiehlt Snowflake, die Richtlinienbedingungen so zu schreiben, dass sie die Kontextfunktion IS_ROLE_IN_SESSION aufrufen. Beispiele für Richtlinien finden Sie im Abschnitt Beispiele der Funktion IS_ROLE_IN_SESSION.

Zeilenzugriffsrichtlinie auf eine Tabelle oder Ansicht anwenden

Es gibt zwei Optionen zum Hinzufügen einer Zeilenzugriffsrichtlinie zu einer Tabelle oder Ansicht:

  1. Bei einer neuen Tabelle oder Ansicht wenden Sie die Richtlinie mit einer CREATE TABLE-Anweisung auf eine Tabelle bzw. mit einer CREATE VIEW-Anweisung auf eine Ansicht an.

  2. Bei einer vorhandenen Tabelle oder Ansicht wenden Sie die Richtlinie mit einer ALTER TABLE-Anweisung auf eine Tabelle bzw. mit einer ALTER VIEW-Anweisung auf eine Ansicht an.

Führen Sie für eine neue Tabelle oder Ansicht die folgenden Anweisungen aus:

-- table
CREATE TABLE sales (
  customer   varchar,
  product    varchar,
  spend      decimal(20, 2),
  sale_date  date,
  region     varchar
)
WITH ROW ACCESS POLICY sales_policy ON (region);

-- view
CREATE VIEW sales_v WITH ROW ACCESS POLICY sales_policy ON (region)
AS SELECT * FROM sales;
Copy

Führen Sie für eine bestehende Tabelle oder Ansicht die folgenden Anweisungen aus:

-- table

ALTER TABLE t1 ADD ROW ACCESS POLICY rap_t1 ON (empl_id);

-- view

ALTER VIEW v1 ADD ROW ACCESS POLICY rap_v1 ON (empl_id);
Copy

Maskierungsrichtlinien

Wenn ein Datenbankobjekt sowohl eine Zeilenzugriffsrichtlinie als auch eine oder mehrere Maskierungsrichtlinien hat, wertet Snowflake zuerst die Zeilenzugriffsrichtlinie aus.

Eine bestimmte Tabellen- oder Ansichtsspalte kann entweder in der Signatur einer Zeilenzugriffsrichtlinie oder in der Signatur einer Maskierungsrichtlinie angegeben werden. Oder anders ausgedrückt, dieselbe Spalte kann nicht gleichzeitig in einer Zeilenzugriffsrichtliniensignatur und in einer Maskierungsrichtliniensignatur angegeben werden.

Weitere Informationen dazu finden Sie unter CREATE MASKING POLICY und CREATE ROW ACCESS POLICY.

Funktionieren von Richtlinien simulieren

Rufen Sie die Funktion POLICY_CONTEXT auf, um eine Abfrage auf einer Spalte, die durch eine Maskierungsrichtlinie geschützt ist, auf einer Tabelle oder Ansicht, die durch eine Zeilenzugriffsrichtlinie geschützt ist, oder beides, wenn die Tabelle oder Ansicht durch beide Richtlinientypen geschützt ist.

Externe Tabellen

Sie können eine externe Tabelle mit einer Zeilenzugriffsrichtlinie erstellen, indem Sie eine CREATE EXTERNAL TABLE-Anweisung ausführen und die Richtlinie auf der VALUE-Spalte anwenden.

Sie können die Zeilenzugriffsrichtlinie auf die Spalte VALUE der externen Tabelle anwenden, indem Sie eine ALTER TABLE-Anweisung auf der externen Tabelle ausführen.

Eine Zeilenzugriffsrichtlinie kann nicht direkt zu einer virtuellen Spalte hinzugefügt werden. Erstellen Sie stattdessen eine Ansicht für die externe Tabelle, und wenden Sie eine Zeilenzugriffsrichtlinie auf die Spalten in der Ansicht an.

Wichtig

Snowflake unterstützt nicht die Verwendung einer externen Tabelle als Zuordnungstabelle in einer Zeilenzugriffsrichtlinie. Beim Klonen einer Datenbank klont Snowflake die Zeilenzugriffsrichtlinie, aber nicht die externe Tabelle. Daher bezieht sich die Richtlinie in der geklonten Datenbank auf eine Tabelle, die in der geklonten Datenbank nicht vorhanden ist.

Wenn die Daten in der externen Tabelle für die Zeilenzugriffsrichtlinie erforderlich sind, sollten Sie in Erwägung ziehen, vor Durchführung einer Klonoperation die Daten der externen Tabelle in ein dediziertes Schema innerhalb der Datenbank zu verschieben, für die die Zeilenzugriffsrichtlinie vorliegt. Aktualisieren Sie die Zeilenzugriffsrichtlinie so, dass sie auf den voll qualifizierten Tabellennamen verweist, um sicherzustellen, dass sich die Richtlinie auf eine Tabelle in der geklonten Datenbank bezieht.

Streams

Wenn eine Zeilenzugriffsrichtlinie zu einer Tabelle hinzugefügt wurde und der Stream auf die Tabellendaten zugreift, wendet Snowflake die Zeilenzugriffsrichtlinie auf die Tabellendaten an.

Weitere Informationen dazu finden Sie unter Einschränkungen.

Ansichten

Snowflake unterstützt das Festlegen von Zeilenzugriffsrichtlinien für die Basistabelle und die Ansicht. Die Richtlinie für die Basistabelle oder Ansicht kann für den Eigentümer der Ansicht (d. h. INVOKER_ROLE) oder die Abfrageoperatorrolle (d. h. CURRENT_ROLE) gelten.

Weitere Informationen dazu finden Sie unter Einschränkungen.

Materialisierte Ansichten

Snowflake unterstützt das Hinzufügen einer Zeilenzugriffsrichtlinie zu einer materialisierten Ansicht, sofern für die zugrunde liegende Tabelle oder Ansicht keine Zeilenzugriffsrichtlinie festgelegt ist.

Zeilenzugriffsrichtlinien und materialisierte Ansichten haben die folgenden Einschränkungen:

  • Eine materialisierte Ansicht kann nicht aus einer Tabelle erstellt werden, wenn eine Zeilenzugriffsrichtlinie zu der zugrunde liegenden Tabelle hinzugefügt wurde.

  • Eine Zeilenzugriffsrichtlinie kann nicht zu einer Tabelle hinzugefügt werden, wenn eine materialisierte Ansicht aus dieser zugrunde liegenden Tabelle erstellt wurde.

CREATE TABLE-Anweisungen

Im Folgenden wird zusammengefasst, wie sich Zeilenzugriffsrichtlinien auf CREATE TABLE-Anweisungen auswirken:

CREATE TABLE … CLONE

Der folgende Ansatz hilft, Daten vor Benutzern mit SELECT-Berechtigung für die Tabelle oder Ansicht zu schützen, wenn diese auf ein geklontes Objekt zugreifen:

  • Das Klonen eines einzelnen Richtlinienobjekts wird nicht unterstützt.

  • Das Klonen eines Schemas führt zum Klonen aller Richtlinien innerhalb des Schemas.

  • Einer geklonten Tabelle sind dieselben Richtlinien zugeordnet wie der Quelltabelle. Das heißt, wenn eine Richtlinie für die Basistabelle oder deren Spalten festgelegt ist, wird die Richtlinie an die geklonte Tabelle oder deren Spalten angehängt.

    • Wenn eine Tabelle im Kontext des Klonens ihres übergeordneten Schemas geklont wird und die Quelltabelle einen Verweis auf eine Richtlinie im selben übergeordneten Schema enthält (d. h. eine lokale Referenz), dann enthält auch die geklonte Tabelle einen Verweis auf die geklonte Richtlinie.

    • Wenn die Quelltabelle auf eine Richtlinie in einem anderen Schema verweist (d. h. eine Fremdreferenz), dann behält die geklonte Tabelle die Fremdreferenz bei.

Weitere Informationen dazu finden Sie unter CREATE <Objekt> … CLONE.

CREATE TABLE … LIKE

Wenn eine Zeilenzugriffsrichtlinie für die Basistabelle festgelegt ist, wird die Zeilenzugriffsrichtlinie nicht für eine Spalte der neuen Tabelle festgelegt. Die neue Tabelle ist leer.

CREATE TABLE … AS SELECT

Wenn in der Basistabelle eine Zeilenzugriffsrichtlinie festgelegt ist, enthält die neue Tabelle die gefilterten Zeilen auf der Grundlage der Definition der Zeilenzugriffsrichtlinie. In der neuen Tabelle ist für keine Spalte eine Zeilenzugriffsrichtlinie festgelegt.

Query Profile

Zur Laufzeit der Abfrage erstellt Snowflake eine sichere dynamische Ansicht.

Wenn Sie den Befehl EXPLAIN für ein Datenbankobjekt verwenden, in dem eine Zeilenzugriffsrichtlinie festgelegt ist, zeigt das Abfrageergebnis an, dass eine Zeilenzugriffsrichtlinie vorhanden ist. Wenn eine Zeilenzugriffsrichtlinie für das Datenbankobjekt festgelegt ist, gibt das EXPLAIN-Abfrageergebnis die folgenden Spaltenwerte an:

  • Die Spalte operation enthält den Wert DynamicSecureView.

  • Die Spalte object enthält den Wert "<Objektname> (+ RowAccessPolicy)".

Jeder Schritt im Abfrageplan, der das Aufrufen der Zeilenzugriffsrichtlinie erfordert, führt dazu, dass die Spalten operation und object die entsprechenden Werte für diesen Schritt im Abfrageplan angeben. Wenn die Zeilenzugriffsrichtlinie nur einmal in der Abfrage aufgerufen wurde, enthält nur eine Zeile im EXPLAIN-Abfrageergebnis die Werte DynamicSecureView und "<Objektname> (+ RowAccessPolicy)".

Im EXPLAIN-Befehlsergebnis und auf der Query Profile-Weboberfläche zeigt Snowflake den Benutzern keine Informationen zur Zeilenzugriffsrichtlinie (d. h. Richtlinienname, Richtliniensignatur, Richtlinienausdruck) oder zu den Objekten an, auf die die Richtlinie zugreift.

Das folgende Beispiel gibt an, dass eine Zeilenzugriffsrichtlinie nur einmal aufgerufen wird.

EXPLAIN SELECT * FROM my_table;
Copy
+-------+--------+--------+-------------------+--------------------------------+--------+-------------+-----------------+--------------------+---------------+
|  step |   id   | parent |     operation     |           objects              | alias  | expressions | partitionsTotal | partitionsAssigned | bytesAssigned |
+-------+--------+--------+-------------------+--------------------------------+--------+-------------+-----------------+--------------------+---------------+
...

| 1     | 2      | 1      | DynamicSecureView | "MY_TABLE (+ RowAccessPolicy)" | [NULL] | [NULL]      | [NULL]          | [NULL]             | [NULL]        |
+-------+--------+--------+-------------------+--------------------------------+--------+-------------+-----------------+--------------------+---------------+

Das folgende Beispiel gibt an, dass eine Zeilenzugriffsrichtlinie zweimal für dieselbe Tabelle aufgerufen wird:

EXPLAIN SELECT product FROM sales
  WHERE revenue > (SELECT AVG(revenue) FROM sales)
  ORDER BY product;
Copy
+--------+--------+--------+-------------------+-----------------------------+--------+-------------+-----------------+--------------------+---------------+
|  step  |   id   | parent |     operation     |           objects           | alias  | expressions | partitionsTotal | partitionsAssigned | bytesAssigned |
+--------+--------+--------+-------------------+-----------------------------+--------+-------------+-----------------+--------------------+---------------+
...
| 1      | 0      | [NULL] | DynamicSecureView | "SALES (+ RowAccessPolicy)" | [NULL] | [NULL]      | [NULL]          | [NULL]             | [NULL]        |
...
| 2      | 2      | 1      | DynamicSecureView | "SALES (+ RowAccessPolicy)" | [NULL] | [NULL]      | [NULL]          | [NULL]             | [NULL]        |
+--------+--------+--------+-------------------+-----------------------------+--------+-------------+-----------------+--------------------+---------------+

Time Travel

Snowflake unterstützt Time Travel für Tabellen und Ansichten, für die eine Zeilenzugriffsrichtlinie vorliegt.

Snowflake wertet die Zuordnungstabellen der Zeilenzugriffsrichtlinie zur Laufzeit der Abfrage aus, sodass Time Travel keine Auswirkungen auf die Zuordnungstabelle hat.

Weitere Informationen dazu finden Sie unter Verstehen und Verwenden von Time Travel.

Replikation

Zeilenzugriffsrichtlinien und deren Zuweisungen können mithilfe von Datenbankreplikation und Replikationsgruppen repliziert werden.

Bei der Datenbankreplikation kann die Replikationsoperation fehlschlagen, wenn eine der folgenden Bedingungen erfüllt ist:

  • Die Primärdatenbank befindet sich in einem Enterprise-Konto (oder höher) und enthält eine Richtlinie, aber mindestens eines der zur Replikation genehmigten Konten befindet sich in einer niedrigeren Edition.

  • Eine in der Primärdatenbank enthaltene Tabelle oder Ansicht hat eine verwaiste Referenz auf eine Zeilenzugriffsrichtlinie in einer anderen Datenbank.

Das Verhalten von verwaisten Referenzen bei der Datenbankreplikation kann umgangen werden, wenn mehrere Datenbanken in einer Replikationsgruppe repliziert werden.

Bemerkung

Bei Verwendung von Failover- oder Failback-Aktionen muss das Snowflake-Konto Business Critical Edition oder höher sein.

Weitere Informationen dazu finden Sie unter Einführung in Replikation und Failover über mehrere Konten.

Data Sharing (Datenfreigabe)

Verwendung
  • Wenn der Anbieter einer freigegebenen Tabelle oder Ansicht eine Richtlinie zuweist und die Richtlinienbedingungen die Funktion CURRENT_ROLE oder CURRENT_USER aufrufen oder die Richtlinienbedingungen eine sichere UDF aufrufen, gibt Snowflake einen NULL-Wert für die Funktion oder die UDF im Verbraucherkonto zurück.

    Der Grund dafür ist, dass der Eigentümer der freigegebenen Daten in der Regel nicht die Kontrolle über die Benutzer oder Rollen in dem Konto hat, für das die Tabelle oder Ansicht freigegeben ist. Als Problemumgehung können Sie in den Richtlinienbedingungen die Funktion CURRENT_ACCOUNT verwenden.

    Alternativ können Sie als Anbieter die Richtlinienbedingungen schreiben, um die Funktion IS_DATABASE_ROLE_IN_SESSION aufzurufen und die Datenbankrolle freizugeben. Weisen Sie als Verbraucher einer Kontorolle die Datenbankrolle der freigegebenen Datenbank zu. Weitere Details dazu finden Sie unter Freigeben von Daten, die durch eine Richtlinie geschützt sind.

Einschränkungen
  • Ein Data Sharing-Anbieter kann keine Richtlinie in einem Leserkonto erstellen.

  • Data Sharing-Verbraucher können keine Richtlinie auf freigegebene Tabellen oder Ansichten anwenden. Als Problemumgehung können Sie die freigegebene Datenbank importieren und eine lokale Ansicht aus der freigegebenen Tabelle oder Ansicht erstellen.

  • Data Sharing-Verbraucher können freigegebene Tabellen oder Ansichten, die zwei verschiedene Anbieter referenzieren, nicht abfragen. Beispiel:

    • rap1 ist eine Zeilenzugriffsrichtlinie, die die Tabelle mit dem Namen t1 schützt, wobei sich t1 in der Freigabe mit dem Namen share1 eines Anbieters befindet.

    • Die Richtlinienbedingungen von rap1 referenzieren eine Zuordnungstabelle namens t2, wobei sich t2 in Freigabe share2 eines anderen Anbieters befindet.

    • Die Abfrage des Verbrauchers auf t1 schlägt fehl.

    • Der Anbieter von t1 dagegen kann t1 abfragen.

  • Externe Funktionen:

    Snowflake gibt in folgenden Fällen einen Fehler zurück:

    • Die einer freigegebenen Tabelle oder Ansicht zugewiesene Richtlinie wird aktualisiert, um eine externe Funktion aufzurufen.

    • Die Richtlinie ruft eine externe Funktion auf, und Sie versuchen, die Richtlinie einer freigegebenen Tabelle oder Ansicht zuzuweisen.

Zeilenzugriffsrichtlinien verwalten

Auswahl eines zentralen, hybriden oder dezentralen Ansatzes

Um die Zeilenzugriffsrichtlinien effektiv zu verwalten, sollten Sie sich überlegen, ob Ihr Ansatz zum Filtern von Zeilen einem zentralen, dezentralen oder hybriden Governance-Ansatz folgen soll.

Die folgende Tabelle fasst einige Hinweise zu jedem dieser beiden Ansätze zusammen.

Richtlinienaktion

Zentral

Hybrid

Dezentral

Richtlinien erstellen

Governance-Beauftragter

Governance-Beauftragter

Einzelne Teams

Richtlinien auf Spalten anwenden

Governance-Beauftragter

Einzelne Teams

Einzelne Teams

Beispiele für die Syntax finden Sie unter Übersicht der DDL-Befehle, Operationen und Berechtigungen.

Tipp

Als bewährte Methode empfiehlt Snowflake, dass Ihre Organisation alle relevanten Interessensvertreter zusammenbringt, um den besten Managementansatz für die Implementierung von Zeilenzugriffsrichtlinien in Ihrer Umgebung zu ermitteln.

Berechtigungen von Zeilenzugriffsrichtlinien

Snowflake unterstützt die folgenden Berechtigungen für Zeilenzugriffsrichtlinien, um festzulegen, ob Benutzer Zeilenzugriffsrichtlinien erstellen, festlegen und besitzen können.

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

CREATE

Ermöglicht das Erstellen einer neuen Zeilenzugriffsrichtlinie in einem Schema.

APPLY

Aktiviert das Ausführen von Hinzufüge- und Löschoperationen für die Zeilenzugriffsrichtlinie auf einer Tabelle oder Ansicht.

Beachten Sie, dass durch Erteilen der globalen Berechtigung APPLY ROW ACCESSPOLICY (d. h. APPLY ROW ACCESSPOLICY On ACCOUNT) das Ausführen der DESCRIBE-Operation auf Tabellen und Ansichten ermöglicht wird.

Beispiele für die Syntax finden Sie unter Übersicht der DDL-Befehle, Operationen und Berechtigungen.

OWNERSHIP

Gewährt volle Kontrolle über die Zeilenzugriffsrichtlinie. Erforderlich, um die meisten Eigenschaften einer Zeilenzugriffsrichtlinie zu ändern. Diese Berechtigung kann für ein bestimmtes Objekt immer nur einer Rolle erteilt sein.

DDL für Zeilenzugriffsrichtlinien

Snowflake unterstützt die folgenden DDL-Befehle und -Operationen zur Verwaltung von Zeilenzugriffsrichtlinien:

Übersicht der DDL-Befehle, Operationen und Berechtigungen

In der folgenden Tabelle wird die Beziehung zwischen den DDL-Operationen für Zeilenzugriffsrichtlinien und den dafür erforderlichen Berechtigungen zusammengefasst.

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

Zeilenzugriffsrichtlinie erstellen

Eine Rolle mit CREATE ROWACCESSPOLICY-Berechtigung in demselben Schema.

Zeilenzugriffsrichtlinien ändern

Die Rolle mit OWNERSHIP-Berechtigung für die Zeilenzugriffsrichtlinie.

Add/Drop Zeilenzugriffsrichtlinie

Eine Rolle mit der Berechtigung APPLY ROW ACCESS POLICY für das Konto oder eine Rolle mit OWNERSHIP-Berechtigung für das Datenbankobjekt und APPLY-Berechtigung für das Zeilenzugriffsrichtlinienobjekt.

Zeilenzugriffsrichtlinie löschen

Eine der folgenden Optionen: Eine Rolle mit OWNERSHIP-Berechtigung für die Zeilenzugriffsrichtlinie oder . Eine Rolle mit OWNERSHIP-Berechtigung für das Schema, in dem die Zeilenzugriffsrichtlinie vorhanden ist.

Zeilenzugriffsrichtlinien anzeigen

Eine der folgenden Optionen: . Eine Rolle mit APPLY ROW ACCESS POLICY-Berechtigung oder . Die OWNERSHIP-Berechtigung für die Zeilenzugriffsrichtlinie oder . Die APPLY-Berechtigung für die Zeilenzugriffsrichtlinie.

Zeilenzugriffsrichtlinien beschreiben

Eine der folgenden Optionen: Eine Rolle mit APPLY ROW ACCESS POLICY-Berechtigung oder . Die OWNERSHIP-Berechtigung für die Zeilenzugriffsrichtlinie oder . Die APPLY-Berechtigung für die Zeilenzugriffsrichtlinie.

Snowflake unterstützt verschiedene Berechtigungen zum Erstellen und Festlegen einer Zeilenzugriffsrichtlinie für ein Objekt.

  1. Bei einem zentralen Ansatz für die Verwaltung von Zeilenzugriffsrichtlinien, bei dem die kundenspezifische Rolle rap_admin Zeilenzugriffsrichtlinien für alle Objekte erstellt und festlegt, sind die folgenden Berechtigungen erforderlich:

    use role securityadmin;
    grant create row access policy on schema <db_name.schema_name> to role rap_admin;
    grant apply row access policy on account to role rap_admin;
    
    Copy
  2. In einem hybriden Verwaltungsansatz verfügt eine einzelne Rolle über die Berechtigung CREATE ROW ACCESS POLICY, um eine konsistente Richtlinienerstellung zur Optimierung der Abfrageleistung sicherzustellen, und einzelne Teams oder Rollen verfügen über die Berechtigung APPLY für eine bestimmte Zeilenzugriffsrichtlinie, um ihre Tabellen und Ansichten zu schützen.

    So kann beispielsweise der kundenspezifischen Rolle finance_role die Berechtigung erteilt werden, die Zeilenzugriffsrichtlinie rap_finance zu Tabellen und Ansichten hinzuzufügen, die der Rolle gehören:

    use role securityadmin;
    grant create row access policy on schema <db_name.schema_name> to role rap_admin;
    grant apply on row access policy rap_finance to role finance_role;
    
    Copy

Zeilenzugriffsrichtlinien mit SQL überwachen

Sie können die Nutzung von Zeilenzugriffsrichtlinien über zwei verschiedene Account Usage-Ansichten und eine Information Schema-Tabelle verfolgen.

Es kann hilfreich sein, sich zwei allgemeine Ansätze vorzustellen, um zu bestimmen, wie die Nutzung von Zeilenzugriffsrichtlinien überwacht werden soll:

Zeilenzugriffsrichtlinien ermitteln

Sie können die Ansicht ROW_ACCESS_POLICIES im Account Usage-Schema der freigegebenen SNOWFLAKE-Datenbank verwenden. Diese Ansicht ist ein Katalog aller Zeilenzugriffsrichtlinien in Ihrem Snowflake-Konto. Beispiel:

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.ROW_ACCESS_POLICIES
ORDER BY POLICY_NAME;
Copy

Zuweisungen identifizieren

Snowflake unterstützt verschiedene Optionen zum Identifizieren von Zuweisungen von Zeilenzugriffsrichtlinien, je nachdem, ob die Abfrage auf das Konto oder eine bestimmte Datenbank abzielen soll.

  • Abfrage auf Kontoebene:

    Verwenden Sie die Account Usage-Ansicht POLICY_REFERENCES, um alle Tabellen zu ermitteln, die über eine Zeilenzugriffsrichtlinie verfügen. Beispiel:

    SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.POLICY_REFERENCES
    ORDER BY POLICY_NAME, REF_COLUMN_NAME;
    
    Copy
  • Abfrage auf Datenbankebene:

    Jede Snowflake-Datenbank enthält ein Snowflake Information Schema. Verwenden Sie die Information Schema-Tabellenfunktion POLICY_REFERENCES, um alle Objekte zu ermitteln, die mit einer bestimmten Zeilenzugriffsrichtlinie verbunden sind:

    SELECT *
    FROM TABLE(
      my_db.INFORMATION_SCHEMA.POLICY_REFERENCES(
        POLICY_NAME => 'rap_t1'
      )
    );
    
    Copy

Zeilenzugriffsrichtlinien mit Snowsight überwachen

Sie können den Snowsight-Bereich Data » Governance verwenden, um die Nutzung von Richtlinien und Tags auf Tabellen, Ansichten und Spalten zu überwachen und zu berichten. Es gibt zwei verschiedene Schnittstellen: Dashboard und Tagged Objects.

Bei Verwendung der Dashboard- und der Tagged Objects-Schnittstelle sind die folgenden Details zu beachten.

  • Die Schnittstellen Dashboard und Tagged Objects erfordern ein aktives Warehouse.

  • Snowsight aktualisiert das Dashboard alle 12 Stunden.

  • Die Latenz der Tagged Objects-Informationen kann bis zu zwei Stunden betragen, und die Schnittstelle gibt bis zu 1.000 Objekte zurück.

Zugriff auf den Governance-Bereich in Snowsight

Für den Zugriff auf den Bereich Governance muss Ihr Snowflake-Konto die Enterprise Edition oder höher verwenden. Außerdem müssen Sie einen der folgenden Punkte erfüllen:

  • Verwenden Sie die Rolle ACCOUNTADMIN.

  • Sie verwenden eine Kontorolle, der die Datenbankrollen GOVERNANCE_VIEWER und OBJECT_VIEWER zugewiesen sind.

    Um festzustellen, ob Ihre Kontorolle über diese Datenbankrollen verfügt, verwenden Sie den Befehl SHOW GRANTS:

    SHOW GRANTS TO ROLE data_engineer;
    
    Copy

    Weitere Informationen zu diesen Datenbankrollen finden Sie unter SNOWFLAKE-Datenbankrollen.

Dashboard

Als Datenadministrator können Sie die Dashboard-Schnittstelle verwenden, um die Nutzung von Tags und Richtlinien auf folgende Weise zu überwachen.

  • Coverage (Abdeckung): Gibt die Anzahl und den Prozentsatz an, je nachdem, ob eine Tabelle, Ansicht oder Spalte eine Richtlinie oder ein Tag hat.

  • Prevalence (Verbreitung): Listet die am häufigsten genutzten Richtlinien und Tags auf und zählt sie.

Die Abdeckung und die Verbreitung liefern eine Momentaufnahme darüber, wie gut die Daten geschützt und getaggt sind.

Wenn Sie eine Zählernummer, einen Prozentsatz, einen Richtliniennamen oder einen Tag-Namen auswählen, wird die Tagged Objects-Schnittstelle geöffnet. Die Tagged Objects-Schnittstelle aktualisiert die Filter automatisch auf der Grundlage Ihrer Auswahl im Feld Dashboard.

Die Überwachungsinformationen sind eine Alternative oder Ergänzung zur Ausführung komplexer und abfrageintensiver Operationen auf mehreren Account Usage-Ansichten.

Zu diesen Ansichten können unter anderem die Ansichten COLUMNS, POLICY_REFERENCES, TABLES, TAG_REFERENCES und VIEWS zählen.

Getaggte Objekte

Als Datenadministrator können Sie diese Tabelle verwenden, um den Abdeckung und die Verbreitung im Dashboard schnell mit einer Liste bestimmter Tabellen, Ansichten oder Spalten zu verknüpfen. Sie können die Tabellenergebnisse auch wie folgt manuell filtern.

  • Wählen Sie Tables oder Columns aus.

  • Bei Tags können Sie mit Tags, ohne Tags oder nach einem bestimmten Tag filtern.

  • Bei Richtlinien können Sie mit Richtlinien, ohne Richtlinien oder nach einer bestimmten Richtlinie filtern.

Wenn Sie eine Zeile in der Tabelle auswählen, wird in Data » Databases die Registerkarte Table Details oder Columns geöffnet. Sie können die Tag- und Richtlinienzuweisungen nach Bedarf bearbeiten.

Zeilenzugriffsrichtlinien überwachen

Snowflake unterstützt die folgenden Ansätze zum Vereinfachen der Überprüfung von Zeilenzugriffsrichtlinien und Governance-Operationen.

  • Verwenden Sie SHOW ROW ACCESS POLICIES, um eine Liste der Zeilenzugriffsrichtlinien zu erstellen, die nicht aus Ihrem Konto gelöscht wurden.

  • Administratoren von Zeilenzugriffsrichtlinien (d. h. Benutzer mit OWNERSHIP-Berechtigung für Zeilenzugriffsrichtlinien) können Time Travel oder Streams verwenden, um historische Daten zu allen Zuordnungstabellen zu erfassen, auf die in ihren Zeilenzugriffsrichtlinien verwiesen wird.

  • Um die Daten zu bestimmen, auf die ein bestimmter Benutzer zugreifen kann, kann der Administrator der Zeilenzugriffsrichtlinie die Rolle des Benutzers übernehmen und eine Abfrage ausführen.

    • Snowflake unterstützt das Definieren eines Zeilenzugriffsrichtlinien-Ausdrucks (expression) mit kundenspezifischer Logik zur Unterstützung dieses Verhaltens im Befehl CREATE ROW ACCESS POLICY.

    • Snowflake bietet derzeit keinen Standardmechanismus (z. B. eine dedizierte System- oder Kontextfunktion) zur Unterstützung dieser Operation.

  • Wenn eine gegebene Zeilenzugriffsrichtlinie Zuordnungstabellen verwendet, um zu bestimmen, welche Rollen- und Benutzerpopulationen auf Zeilendaten zugreifen können, kann der Eigentümer der Zeilenzugriffsrichtlinie die Zuordnungstabellen abfragen, um den autorisierten Benutzerzugriff bei Bedarf zu bestimmen.

  • Snowflake erfasst und protokolliert Fehlermeldungsinformationen in Bezug auf Zeilenzugriffsrichtlinien in der Account Usage-Ansicht QUERY_HISTORY-Ansicht. Wenn in einer Abfrage ein Fehler auftritt, zeichnet Snowflake die erste Fehlermeldung auf, die während der Abfrageauswertung auftritt. Weitere Informationen zu Fehlermeldungen bei Zeilenzugriffsrichtlinien finden Sie unter Problembehandlung bei Zeilenzugriffsrichtlinien.

  • Um die Daten zu ermitteln, auf die ein bestimmter Benutzer in der Vergangenheit in Bezug zu den Zeilenzugriffsrichtlinien für Datenbankobjekte zugegriffen hat, verwenden Sie Time Travel in Kombination mit der Account Usage-Ansicht ROW_ACCESS_POLICIES und der Information Schema-Tabellenfunktion POLICY_REFERENCES.

    • Wenn die Richtlinien- und Zuordnungstabellen, falls vorhanden, nicht geändert wurden, kann der Administrator der Zeilenzugriffsrichtlinie die Rolle des Benutzers übernehmen und eine Time Travel-Abfrage ausführen. Die Werte relevanter Sitzungsparameter, wie z. B. CURRENT_ROLE, sind im Abfrageergebnis verfügbar.

    • Wenn sich die Richtlinien- oder Zuordnungstabellen geändert haben, muss der Administrator der Zeilenzugriffsrichtlinie eine Time Travel-Abfrage auf der Zuordnungstabelle ausführen und die Zeilenzugriffsrichtlinie rekonstruieren, die zur angegebenen Vorfallzeit bestand. Nach diesen Schritten kann der Administrator der Zeilenzugriffsrichtlinie damit beginnen, die Daten abzufragen und mit seiner Analyse fortzufahren.

Problembehandlung bei Zeilenzugriffsrichtlinien

Die folgenden Verhaltensweisen und Fehlermeldungen gelten für Zeilenzugriffsrichtlinien.

Verhalten

Fehlermeldung

Problembehandlung

Zeilenzugriffsrichtlinie kann nicht festgelegt werden (materialisierte Ansicht).

Zeilenzugriffsrichtlinie kann nicht an eine materialisierte Ansicht angehängt werden.

Überprüfen Sie, ob eine Zeilenzugriffsrichtlinie für die materialisierte Ansicht festgelegt werden kann. Siehe Materialisierte Ansichten (unter diesem Thema).

Zeilenzugriffsrichtlinie kann nicht erstellt werden (Boolean).

003551=SQL compilation error: Row access policy return type ‚‘{0}‘‘ is not BOOLEAN.

Die Definition einer Zeilenzugriffsrichtlinie muss RETURNS BOOLEAN enthalten. Schreiben Sie die Zeilenzugriffsrichtlinie wie unter CREATE ROW ACCESS POLICY gezeigt um.

Zeilenzugriffsrichtlinie kann nicht erstellt werden (Database).

This session does not have a current database. Call ‚USE DATABASE‘, or use a qualified name.

Da eine Zeilenzugriffsrichtlinie ein Objekt auf Schemaebene ist, definieren Sie eine Datenbank und ein Schema für die aktuelle Sitzung, oder verwenden Sie den voll qualifizierten Namen im Befehl CREATE ROW ACCESS POLICY. Weitere Informationen dazu finden Sie unter Auflösung des Objektnamens.

Zeilenzugriffsrichtlinie kann nicht erstellt werden (Objekt existiert).

SQL compilation error: Object ‚<Name>‘ already exists.

Da im Schema bereits eine Zeilenzugriffsrichtlinie mit dem angegebenen Namen vorhanden ist, erstellen Sie die Zeilenzugriffsrichtlinie mit einem anderen name-Wert neu.

Zeilenzugriffsrichtlinie kann nicht erstellt werden (Eigentümerschaft des Schemas).

SQL access control error: Insufficient privileges to operate on schema ‚S1‘

Überprüfen Sie die Berechtigungen zum Erstellen einer Zeilenzugriffsrichtlinie unter Übersicht der DDL-Befehle, Operationen und Berechtigungen (unter diesem Thema).

Zeilenzugriffsrichtlinie kann nicht erstellt werden (Nutzung des Schemas).

SQL compilation error: Schema ‚<Name_des_Schemas>‘ does not exist or not authorized.

Überprüfen Sie das Vorhandensein des angegebenen Schemas und die Berechtigungen zum Erstellen einer Zeilenzugriffsrichtlinie unter Übersicht der DDL-Befehle, Operationen und Berechtigungen (unter diesem Thema).

Zeilenzugriffsrichtlinie kann nicht beschrieben werden (nur Usage).

SQL compilation error: Row access policy ‚RLS_AUTHZ_DB.S_B.P1‘ does not exist or not authorized.

Das Vorhandensein der USAGE-Berechtigung für die übergeordnete Datenbank und das übergeordneten Schema, in dem sich die Zeilenzugriffsrichtlinie befindet, genügt nicht, um einen DESCRIBE-Operation für die Zeilenzugriffsrichtlinie auszuführen. Überprüfen Sie das Vorhandensein der Zeilenzugriffsrichtlinie und die Berechtigungen zum Beschreiben einer Zeilenzugriffsrichtlinie unter Übersicht der DDL-Befehle, Operationen und Berechtigungen (unter diesem Thema).

Zeilenzugriffsrichtlinie kann nicht gelöscht werden (Wartung).

SQL compilation error: Row access policy ‚RLS_AUTHZ_DB.S_B.P1‘ does not exist or not authorized.

Überprüfen Sie das Vorhandensein der angegebenen Zeilenzugriffsrichtlinie und die Berechtigungen zum Löschen einer Zeilenzugriffsrichtlinie unter Übersicht der DDL-Befehle, Operationen und Berechtigungen (unter diesem Thema).

UNDROP kann nicht auf einer Zeilenzugriffsrichtlinie ausgeführt werden (Wartung).

Unsupported feature ‚UNDROP not supported for objects of type ROW_ACCESS_POLICY‘.

Um eine Zeilenzugriffsrichtlinie wiederherzustellen, führen Sie einen CREATE ROW ACCESS POLICY-Befehl aus und fügen dann die Zeilenzugriffsrichtlinie mit einem ALTER TABLE- oder ALTER VIEW-Befehl zu einem Datenbankobjekt hinzu, wie unter ALTER TABLE bzw. ALTER VIEW gezeigt.

Zeilenzugriffsrichtlinie kann nicht aktualisiert werden (Name/Operation).

SQL compilation error: Object found is of type ‚ROW_ACCESS_POLICY‘, not specified type ‚MASKING_POLICY‘

Überprüfen Sie noch einmal die Abfrage hinsichtlich des Objektnamens und der beabsichtigten Operation auf dem Objekt. . . Beispielsweise unterstützt Snowflake nicht ALTER ROW ACCESS POLICY <Name>;. . . Verwenden Sie stattdessen einen CREATE OR REPLACE ROW ACCESS POLICY-Befehl zum Aktualisieren der Zeilenzugriffsrichtlinie. Weitere Informationen zu Operationen auf Zeilenzugriffsrichtlinien finden Sie unter Übersicht der DDL-Befehle, Operationen und Berechtigungen (unter diesem Thema).

Zeilenzugriffsrichtlinien können nicht mit Snowflake-Features oder -Diensten verwendet werden (Nicht unterstütztes Feature).

Unsupported feature ‚CREATEONOBJECTSENFORCEDBYROWACCESSPOLICY‘.

Einige Snowflake-Features und -Dienste unterstützen keine Zeilenzugriffsrichtlinien. Weitere Informationen dazu finden Sie unter Einschränkungen und im Abschnitt Verwenden von Zeilenzugriffsrichtlinien mit Snowflake-Objekten und -Features unter diesem Thema.

Zeilenzugriffsrichtlinie kann nicht aktualisiert werden (Nicht unterstütztes Token).

Unsupported feature ‚TOK_ROW_ACCESS_POLICY‘.

TOK verweist auf Token, das zurückgegeben werden kann, wenn eine Abfrage nicht unterstützt wird und/oder ungenau ist. Der SQL-Compiler von Snowflake weiß nicht, wie er die gegebene Abfrage verarbeiten soll. . Beispiel: alter row access policy p1_test set comment = 'test policy 1';. In diesem Beispiel kann der ALTER-Befehl nicht direkt auf das Richtlinienobjekt angewendet werden. Verwenden Sie stattdessen einen ALTER TABLE- oder ALTER VIEW-Befehl, wie unter Übersicht der DDL-Befehle, Operationen und Berechtigungen (unter diesem Thema) gezeigt.

Nächste Themen: