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 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 wird einer Tabelle mit einer ALTER TABLE-Anweisung und einer Ansicht mit einer ALTER VIEW-Anweisung hinzugefügt.

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.

Zeilenzugriffsrichtlinien zur Laufzeit von Abfragen

Zur Abfragelaufzeit 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 benutzerdefinierte 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 benutzerdefinierten 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()
;

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.

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.

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 benutzerdefinierten Berechtigungen.

Einschränkungen

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

  • Zukünftige Zuweisungen können nicht mit Zeilenzugriffsrichtlinien verwendet werden. Als Problemumgehung können Sie einer Rolle die Berechtigung APPLY ROW ACCESS POLICY erteilen, um Zeilenzugriffsrichtlinien festzulegen.

  • Suchoptimierungsdienst. Datenbankobjekte, die durch eine Zeilenzugriffsrichtlinie geschützt sind, können nicht mit den Suchoptimierungsdiensten verwendet werden. Weitere Informationen dazu finden Sie unter Problembehandlung bei Zeilenzugriffsrichtlinien (unter diesem Thema).

  • 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).

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.

  • IS_ROLE_IN_SESSION kann nicht mit Zeilenzugriffsrichtlinien verwendet werden, die Zuordnungstabellen enthalten. Diese Funktion kann mit Zeilenzugriffsrichtlinien verwendet werden, die keine Zuordnungstabellen enthalten.

  • 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, select count(*) from my_table und der Funktion MAX, 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).

Verwenden von Zeilenzugriffsrichtlinien mit Snowflake-Objekten und -Funktionen

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

Beziehen von Datenbankobjekten mit einer Zeilenzugriffsrichtlinie

Um eine Liste der Datenbankobjekte mit Zeilenzugriffsrichtlinien zu erhalten, führen Sie die folgende Anweisung aus.

select *
from table(
  information_schema.policy_references(
    policy_name=>'<policy_name>'
  )
);

Weitere Informationen dazu finden Sie unter:

Maskierungsrichtlinien für Sicherheit auf Spaltenebene

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

Externe Tabellen

Sie können die Zeilenzugriffsrichtlinie auf die Spalte VALUE der externen Tabelle anwenden, indem Sie eine ALTER EXTERNAL 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 dieser Tabelle eine Zeilenzugriffsrichtlinie hinzugefügt wurde.

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

CREATE TABLE-Anweisungen

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

CREATE TABLE … CLONE

Wenn eine Zeilenzugriffsrichtlinie für die Basistabelle festgelegt ist, wird die Zeilenzugriffsrichtlinie an die geklonte Tabelle angehängt.

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;

+-------+--------+--------+-------------------+--------------------------------+--------+-------------+-----------------+--------------------+---------------+
|  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;

+--------+--------+--------+-------------------+-----------------------------+--------+-------------+-----------------+--------------------+---------------+
|  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 wertet aus, sodass Time Travel keine Auswirkungen auf die Zuordnungstabelle hat.

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

Replikation

Richtliniengeschützte Objekte können repliziert werden, wenn sie sich in der gleichen Datenbank wie die Richtlinie befinden.

Die Zugriffsrichtlinien der einzelnen Zeilen können repliziert werden.

Die Replikationsoperation schlägt fehl, 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 einen Verweis auf eine Zeilenzugriffsrichtlinie in einer anderen Datenbank.

    Bemerkung

    Wenn die Replikation mit Failover oder Failback erfolgt, muss das Snowflake-Konto Business Critical Edition oder höher sein.

    Weitere Informationen dazu finden Sie unter Datenbankreplikation und Failover/Failback.

Datenfreigabe (Data Sharing)

Snowflake ermöglicht es Data Sharing-Anbietern und -Verbrauchern, Zeilenzugriffsrichtlinien zu Datenbankobjekten hinzuzufügen.

Data Sharing-Anbieter müssen Kontextfunktionen (z. B. INVOKER_SHARE) in ihren Zeilenzugriffsrichtlinien verwenden, um die berechtigten Benutzer zu bestimmen. Wenn die Zeilenzugriffsrichtlinie auf eine externe Funktion verweist, kann die Tabelle oder Ansicht nicht freigegeben werden.

Data Sharing-Verbraucher können auf eine freigegebene Datenbank oder Tabelle keine Zeilenzugriffsrichtlinien anwenden. Importieren Sie zur Umgehung des Problems die freigegebene Datenbank oder Tabelle, und wenden Sie die Zeilenzugriffsrichtlinie auf eine lokale Ansicht dieser freigegebenen Datenbank oder Tabelle an.

Überwachen von Zeilenzugriffsrichtlinien

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.

  • Ansichten:

    • Fragen Sie die Ansicht POLICY_REFERENCES ab, um mehr über Richtlinienzuordnungen zu erfahren. Beachten Sie, dass diese Ansicht nur Informationen zu den Zeilenzugriffsrichtlinien zurückgibt, wenn Ihr Konto für Zeilenzugriffsrichtlinien aktiviert ist und diese verwendet.

    • Fragen Sie die ROW_ACCESS_POLICIES-Ansicht ab, um eine Liste aller in Ihrem Konto erstellten Zeilenzugriffsrichtlinien zu erhalten.

  • 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 die Definition einer Zeilenzugriffsrichtlinien-Ausdrucks mit benutzerdefinierter 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- und Information Schema-Ansicht der Zeilenzugriffsrichtlinie.

    • 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 für 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-Funktionen oder -Diensten verwendet werden (Nicht unterstützte Funktion).

Unsupported feature ‚CREATEONOBJECTSENFORCEDBYROWACCESSPOLICY‘.

Einige Snowflake-Funktionen und -Dienste unterstützen keine Zeilenzugriffsrichtlinien. Weitere Informationen dazu finden Sie in den Abschnitten Einschränkungen und Verwenden von Zeilenzugriffsrichtlinien mit Snowflake-Objekten und -Funktionen 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.

Verwalten von Zeilenzugriffsrichtlinien

Auswählen eines zentralen, hybriden oder dezentralen Verwaltungsansatzes

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

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.

Bemerkung

Zeilenzugriffsrichtlinien sind Objekte auf Schemaebene.

Das Durchführen von Operationen auf einer Zeilenzugriffsrichtlinie erfordert auch die USAGE-Berechtigung für die übergeordnete Datenbank und das übergeordnete Schema.

Berechtigung

Verwendung

CREATE

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

APPLY

Aktiviert die Operationen zum Hinzufügen und Löschen einer Zeilenzugriffsrichtlinie zu einer Tabelle oder Ansicht.

OWNERSHIP

Überträgt die Eigentümerschaft an einer Zeilenzugriffsrichtlinie, wodurch die volle Kontrolle über die Zeilenzugriffsrichtlinie gewährt wird. Erforderlich, um die meisten Eigenschaften einer Zeilenzugriffsrichtlinie zu ändern.

DDL für Zeilenzugriffsrichtlinie

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.

Operation

Erforderliche Berechtigung

Zeilenzugriffsrichtlinie erstellen

Eine Rolle mit USAGE-Berechtigung für die übergeordnete Datenbank und das übergeordnete Schema sowie mit der Berechtigung CREATE ROW ACCESS POLICY im selben Schema.

Zeilenzugriffsrichtlinien ändern

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

Zeilenzugriffsrichtlinie hinzufügen/löschen (Add/Drop)

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

Zeilenzugriffsrichtlinie löschen

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

Die Rolle mit OWNERSHIP-Berechtigung für die Zeilenzugriffsrichtlinie oder eine Rolle APPLY-Berechtigung für die Zeilenzugriffsrichtlinie oder eine Rolle mit der globalen Berechtigung APPLY ROW ACCESS POLICY.

Zeilenzugriffsrichtlinien beschreiben

Eine Rolle mit OWNERSHIP-Berechtigung für das Schema.

Nächste Themen: