- Kategorien:
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>
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
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, 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 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;