Kategorien:

Kontextfunktionen

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>
Copy

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

Der Zeichenfolgenwert sollte 'JSMITH' sein.

Beachten Sie, dass Sie bei der Angabe von CURRENT_AVAILABLE_ROLES und mehreren Rollenwerten, z. B. ROLE1 und ROLE2, 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>') ... ;
      
      Copy
  • 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 oder RAP_ADMIN haben.

    • Überprüfen Sie Folgendes:

      • Zeichenfolgenwerte der Funktion

      • SELECT-Ausdruck der query

      • 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;
Copy