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. Wenn die Richtlinie ein Lookup auf einer Zuordnungstabelle enthält, erstellen Sie eine zentralisierte Zuordnungstabelle und speichern Sie die Zuordnungstabelle in derselben Datenbank wie die geschützte Tabelle. Dies ist besonders wichtig, wenn die Richtlinie die Funktion IS_DATABASE_ROLE_IN_SESSION aufruft. Weitere Informationen dazu finden Sie in den Nutzungshinweisen.
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.
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:
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.
Snowflake erstellt eine sichere dynamische Ansicht (d. h. eine sichere Inline-Ansicht) des Datenbankobjekts.
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.
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.
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()
;
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:
Externe Tabellen (unter diesem Thema)
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:
Memoisierbare Funktion (in Übersicht zu skalaren SQL-UDFs).
Verwenden einer memoisierbaren Funktion in einer Richtlinie (unter dem Thema „Verwenden von Zeilenzugriffsrichtlinien“).
- 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 inselect 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).
Seien Sie vorsichtig, wenn Sie das Setup-Skript für eine Snowflake Native App erstellen und die Zeilenzugriffsrichtlinie in einem versionierten Schema vorliegt. Weitere Informationen dazu finden Sie unter Hinweise zum Versionsschema.
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' ) );
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' ) );
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. Wenn die Richtlinie ein Lookup auf einer Zuordnungstabelle enthält, erstellen Sie eine zentralisierte Zuordnungstabelle und speichern Sie die Zuordnungstabelle in derselben Datenbank wie die geschützte Tabelle. Dies ist besonders wichtig, wenn die Richtlinie die Funktion IS_DATABASE_ROLE_IN_SESSION aufruft. Weitere Informationen dazu finden Sie in den Nutzungshinweisen.
Für diese Anwendungsfälle empfiehlt Snowflake, die Richtlinienbedingungen so zu schreiben, dass sie die Funktion IS_ROLE_IN_SESSION oder die Funktion IS_DATABASE_ROLE_IN_SESSION aufrufen, je nachdem, ob Sie eine Kontorolle oder eine Datenbankrolle angeben möchten. Weitere Beispiele finden Sie unter:
Abschnitt Beispiele der Funktion IS_ROLE_IN_SESSION.
IS_DATABASE_ROLE_IN_SESSION
Freigeben von Daten, die durch eine Richtlinie geschützt sind
Zeilenzugriffsrichtlinie auf eine Tabelle oder Ansicht anwenden¶
Es gibt zwei Optionen zum Hinzufügen einer Zeilenzugriffsrichtlinie zu einer Tabelle oder Ansicht:
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.
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;
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);
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 WertDynamicSecureView
.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 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 Nament1
schützt, wobei sicht1
in der Freigabe mit dem Namenshare1
eines Anbieters befindet.Die Richtlinienbedingungen von
rap1
referenzieren eine Zuordnungstabelle namenst2
, wobei sicht2
in Freigabeshare2
eines anderen Anbieters befindet.Die Abfrage des Verbrauchers auf
t1
schlägt fehl.Der Anbieter von
t1
dagegen kannt1
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.
Snowflake Native App Framework¶
Weitere Informationen zur Verwendung von Zeilenzugriffsrichtlinien mit einer Snowflake Native App finden Sie unter:
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:
ALTER TABLE, ALTER EXTERNAL TABLE und ALTER VIEW (zum Hinzufügen/Löschen einer Richtlinie zu/aus einer Tabelle oder Ansicht)
Ü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. |
|
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.
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;
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 Zeilenzugriffsrichtlinierap_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;
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;
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;
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' ) );
Zeilenzugriffsrichtlinien mit Snowsight überwachen¶
Sie können den Snowsight-Bereich Monitoring » 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 direkt zugewiesen sind.
Sie müssen eine Kontorolle mit diesen Datenbankrollenzuweisungen verwenden. Derzeit wertet Snowsight keine Rollenhierarchien und benutzerdefinierten Datenbankrollen aus, die Zugriff auf Tabellen, Ansichten, Datenzugriffsrichtlinien und Tags haben.
Um festzustellen, ob Ihre Kontorolle über diese Datenbankrollen verfügt, verwenden Sie den Befehl SHOW GRANTS:
SHOW GRANTS LIKE '%VIEWER%' TO ROLE data_engineer;
|-------------------------------+-----------+---------------+-----------------------------+------------+-----------------+--------------+------------| | created_on | privilege | granted_on | name | granted_to | grantee_name | grant_option | granted_by | |-------------------------------+-----------+---------------+-----------------------------+------------+-----------------+--------------+------------| | 2024-01-24 17:12:26.984 +0000 | USAGE | DATABASE_ROLE | SNOWFLAKE.GOVERNANCE_VIEWER | ROLE | DATA_ENGINEER | false | | | 2024-01-24 17:12:47.967 +0000 | USAGE | DATABASE_ROLE | SNOWFLAKE.OBJECT_VIEWER | ROLE | DATA_ENGINEER | false | | |-------------------------------+-----------+---------------+-----------------------------+------------+-----------------+--------------+------------|
Wenn Ihrer Kontorolle keine dieser beiden Datenbankrollen zugewiesen ist, verwenden Sie den Befehl GRANT DATABASE ROLE, und führen Sie den Befehl SHOW GRANTS erneut aus, um die Berechtigungszuweisungen zu bestätigen:
USE ROLE ACCOUNTADMIN; GRANT DATABASE ROLE SNOWFLAKE.GOVERNANCE_VIEWER TO ROLE data_engineer; GRANT DATABASE ROLE SNOWFLAKE.OBJECT_VIEWER TO ROLE data_engineer; SHOW GRANTS LIKE '%VIEWER%' TO ROLE data_engineer;
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). |
|
Die Definition einer Zeilenzugriffsrichtlinie muss |
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 |
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). |
|
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 |
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‘. |
|
Nächste Themen: