Kategorien:

Kontextfunktionen

POLICY_CONTEXT

Simuliert das Abfrageergebnis für Tabellen- oder Ansichtsspalten, die durch eine Maskierungsrichtlinie geschützt sind, für eine Tabelle oder Ansicht, die durch eine Zeilenzugriffsrichtlinie geschützt ist, oder für beides, wenn die Tabelle oder Ansicht durch beide Richtlinientypen geschützt ist.

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

  • 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, die ggf. für eine Spalte festgelegt wurde, falls vorhanden

    • Zeilenzugriffsrichtlinie, die ggf. für die Tabelle oder Ansicht festgelegt wurde

    • 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 (z. B. Benutzer mit den benutzerdefinierten Rollen POLICY_ADMIN, MASKING_ADMIN, RAP_ADMIN), um zu erfahren, welche Spalten durch eine Maskierungsrichtlinie geschützt sind, welche Zeilenzugriffsrichtlinie die Tabelle oder Ansicht schützt und wie die zugehörigen Richtliniendefinitionen aussehen.

    • Ü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