- Kategorien:
POLICY_CONTEXT¶
Simuliert die Ergebnisse einer Abfrage auf der Grundlage des Wertes einer oder mehrerer Kontextfunktionen, mit denen Sie bestimmen können, wie sich Richtlinien auf Abfrageergebnisse auswirken. Kontextfunktionen geben einen Wert zurück, der auf dem aktuellen Kontext einer Abfrage basiert, z. B. wer die Abfrage ausführt oder das Konto, von dem aus die Abfrage ausgeführt wird. Für den Richtlinientext (Body) werden häufig Kontextfunktionen verwendet, um zu bestimmen, welcher Wert von der Richtlinie zurückgegeben werden soll.
Diese Funktion wertet die folgenden Richtlinien aus, um die Abfrageergebnisse zu ermitteln:
Syntax¶
EXECUTE USING
POLICY_CONTEXT( <arg_1> => '<string_literal>' [ , <arg_2> => '<string_literal>' , ... , <arg_n> => '<string_literal>' ] )
AS
SELECT <query>
Argumente¶
arg_1 => 'string_literal'
Gibt eine Kontextfunktion und deren Wert als Zeichenfolge an.
Erforderlich. Sie müssen mindestens eine Funktion und deren Wert angeben.
Snowflake unterstützt die folgenden Kontextfunktionen und deren Werte als Argumente:
Um das Format zu bestimmen, das als Zeichenfolgenwert verwendet werden soll, führen Sie eine Abfrage mit der Funktion aus. Beispiel:
SELECT CURRENT_USER(); +----------------+ | CURRENT_USER() | |----------------| | JSMITH | +----------------+
Der Zeichenfolgenwert sollte
'JSMITH'
sein.Beachten Sie, dass Sie bei der Angabe von CURRENT_AVAILABLE_ROLES und mehreren Rollenwerten, z. B.
ROLE1
undROLE2
, die Liste der Rollen wie folgt in eckige Klammern einschließen:['ROLE1', 'ROLE2']
arg_2 => 'string_literal' , ... , arg_n => 'string_literal'
Gibt eine durch Komma getrennte Liste einer Kontextfunktion und ihres Wertes als Zeichenfolge an.
Optional.
query
Gibt den SQL-Ausdruck an, um eine oder mehrere Tabellen oder Ansichten abzufragen.
Erforderlich.
Nutzungshinweise¶
Diese Funktion erfordert Folgendes:
Mindestens ein Argument, das eine unterstützte Kontextfunktion und deren Wert angibt.
Wenn eine Tabelle durch eine Richtlinie geschützt ist, muss der angegebene Benutzer oder die angegebene Rolle über die folgenden Berechtigungen verfügen:
OWNERSHIP für die Tabelle oder Ansicht und
APPLY-Berechtigung für die Richtlinie, entweder auf Kontoebene oder für die Richtlinie selbst:
APPLY MASKING POLICY auf ACCOUNT oder APPLY auf MASKING POLICY
policy_name
APPLY ROW ACCESS POLICY auf ACCOUNT oder APPLY auf ROW ACCESS POLICY
policy_name
APPLY AGGREGATION POLICY auf ACCOUNT oder APPLY auf AGGREGATION POLICY
policy_name
APPLY PROJECTION POLICY auf ACCOUNT oder APPLY auf PROJECTION POLICY
policy_name
Snowflake gibt eine Fehlermeldung zurück, wenn eine der folgenden Bedingungen erfüllt ist:
Verwendung einer oder mehrerer nicht unterstützter Funktionen als Argument. Snowflake unterstützt nur die im Abschnitt Argumente aufgeführten Funktionen.
Nicht ordnungsgemäße Angabe eines Funktions-Zeichenfolgenwerts, einschließlich der Verwendung einer Zeichenfolge für einen nicht existierenden Wert (z. B. kein Konto, kein Benutzer oder keine Rolle).
Der Ausdruck SELECT
query
fragt eine Tabelle oder eine Ansicht nicht korrekt ab (z. B. ohne Angabe einer Tabelle oder einer Ansicht).Bestimmte Data Sharing-Anwendungsfälle (siehe nächster Punkt).
Data Sharing:
Ein Data Sharing-Verbraucher kann diese Funktion nicht dazu verwenden, Abfrageergebnisse für Tabellen oder Ansichten zu simulieren, die vom Data Sharing-Anbieter zur Verfügung gestellt wurden.
Wenn der
query
des Verbrauchers eine Tabelle oder Ansicht enthält, die über Secure Data Sharing zur Verfügung gestellt wurde, und eine weitere Tabelle oder Ansicht des Verbraucherkontos enthält, die nicht mit dem Konto des Data Sharing-Anbieters verbunden ist (d. h. ihre eigene Tabelle oder Ansicht), gibt Snowflake eine Fehlermeldung zurück.Ein Data Sharing-Anbieterkonto kann simulieren, wie Tabellen oder Ansichten eines Data Sharing-Verbraucherkonto angezeigt werden, die über eine Freigabe zur Verfügung gestellt wurden.
Zu diesem Zweck gibt der Data Sharing-Anbieter den Namen des Verbraucherkontos als Argument an. Beispiel:
execute using policy_context(current_account => '<consumer_account_name>') ... ;
Das Ergebnis hängt von Folgendem ab:
Maskierungsrichtlinie oder Projektionsrichtlinie, die ggf. für eine Spalte festgelegt wurde, falls vorhanden
Zeilenzugriffsrichtlinie oder Aggregationsrichtlinie, die ggf. für die Tabelle oder Ansicht festgelegt wurde, falls vorhanden.
Richtliniendefinition(en)
Ausdruck
query
Berechtigungen, die der Rollen gewährten wurden
Rollen, die den Benutzern zugewiesen wurden (einschließlich der Rollenhierarchie)
Argumente in dieser Funktion
Wichtig
Wenn das Ergebnis dieser Funktion nicht wie erwartet ist:
Wenden Sie sich an Ihren internen Richtlinienadministrator, um herauszufinden, welche Tabellen, Ansichten und Spalten durch Richtlinien geschützt sind, und um die Body-Definitionen dieser Richtlinien besser zu verstehen. Dieser Administrator könnte eine kundenspezifische Rolle wie
POLICY_ADMIN
,MASKING_ADMIN
oderRAP_ADMIN
haben.Überprüfen Sie Folgendes:
Zeichenfolgenwerte der Funktion
SELECT
-Ausdruck derquery
Berechtigungen, die Rollen gewährt wurden (z. B. SELECT auf Tabelle oder Ansicht, USAGE auf übergeordnete Datenbank und Schema) und die entsprechende Berechtigungsvererbung
Rollenhierarchie, insbesondere wenn die Funktion CURRENT_AVAILABLE_ROLES und deren Werte als Argument für diese Funktion angegeben werden
Aktualisieren Sie die SQL-Anweisung mit dieser Funktion, falls erforderlich, und versuchen Sie es erneut.
Beispiele¶
Simulieren Sie die Auswirkungen der Systemrolle PUBLIC bei der Abfrage der Tabelle empl_info
:
execute using policy_context(current_role => 'PUBLIC') as select * from empl_info;