- Catégories :
POLICY_CONTEXT¶
Simule les résultats d’une requête en fonction de la valeur d’une ou de plusieurs fonctions contextuelles, ce qui vous permet de déterminer la manière dont les politiques affectent les résultats de requête. Les fonctions contextuelles renvoient une valeur basée sur le contexte actuel d’une requête, par exemple sur la personne qui exécute la requête ou le compte à partir duquel la requête est exécutée. Les corps de politique utilisent souvent des fonctions contextuelles pour déterminer la valeur à renvoyer par la politique.
Cette fonction évalue les politiques suivantes pour déterminer les résultats de la requête :
Syntaxe¶
EXECUTE USING
POLICY_CONTEXT( <arg_1> => '<string_literal>' [ , <arg_2> => '<string_literal>' , ... , <arg_n> => '<string_literal>' ] )
AS
SELECT <query>
Arguments¶
arg_1 => 'string_literal'
Spécifie une fonction contextuelle et sa valeur sous forme de chaîne.
Requis. Vous devez spécifier au moins une fonction et sa valeur.
Snowflake prend en charge les fonctions contextuelles suivantes et leurs valeurs comme arguments :
Pour déterminer le format à utiliser comme valeur de chaîne, exécutez une requête à l’aide de la fonction. Par exemple :
SELECT CURRENT_USER(); +----------------+ | CURRENT_USER() | |----------------| | JSMITH | +----------------+
La valeur de la chaîne doit être
'JSMITH'
.Notez que si vous spécifiez CURRENT_AVAILABLE_ROLES et plusieurs valeurs de rôle, telles que
ROLE1
etROLE2
, vous devez placer la liste des rôles entre crochets comme suit :['ROLE1', 'ROLE2']
arg_2 => 'string_literal' , ... , arg_n => 'string_literal'
Spécifie une liste séparée par des virgules d’une fonction de contexte et sa valeur sous forme de chaîne.
En option.
query
Spécifie l’expression SQL pour interroger une ou plusieurs tables ou vues.
Requis.
Notes sur l’utilisation¶
Cette fonction requiert les éléments suivants :
Au moins un argument qui spécifie une fonction contextuelle prise en charge et sa valeur.
Si une table est protégée par une politique, l’utilisateur ou le rôle spécifié doit bénéficier des privilèges suivants :
OWNERSHIP sur la table ou la vue, et
Le privilège APPLY pour la politique, soit au niveau du compte, soit sur la politique elle-même :
APPLY MASKING POLICY sur ACCOUNT ou APPLY sur MASKING POLICY
policy_name
APPLY ROW ACCESS POLICY sur ACCOUNT ou APPLY sur ROW ACCESS POLICY
policy_name
APPLY AGGREGATION POLICY sur ACCOUNT ou APPLY sur AGGREGATION POLICY
policy_name
APPLY PROJECTION POLICY sur ACCOUNT ou APPLY sur PROJECTION POLICY
policy_name
Snowflake renvoie un message d’erreur si l’une des conditions suivantes est vraie :
Utilisation d’une ou plusieurs fonctions non prises en charge comme argument. Snowflake ne prend en charge que les fonctions répertoriées dans la section Arguments.
Mauvaise spécification de la valeur d’une chaîne de fonction, notamment en utilisant une chaîne pour une valeur qui n’existe pas (par exemple, aucun compte, utilisateur ou rôle).
L’expression SELECT
query
n’interroge pas correctement une table ou une vue (par exemple, elle ne spécifie pas du tout une table ou une vue).Certains cas d’utilisation de partage des données (voir le point suivant).
Partage des données :
Un consommateur de partage de données ne peut pas utiliser cette fonction pour simuler des résultats de requêtes sur des tables ou des vues qui ont été mises à disposition par le fournisseur de partage de données.
En outre, si l’expression de
query
du consommateur comprend une table ou une vue mise à disposition par Secure Data Sharing et une autre table ou vue du compte du consommateur non associée au compte du fournisseur de partage de données (c’est-à-dire sa propre table ou vue), Snowflake renvoie un message d’erreur.Un compte fournisseur de partage de données peut simuler la façon dont un compte de consommateur de partage de données voit les tables ou les vues mises à disposition par le biais d’un partage.
Pour ce faire, le fournisseur de partage de données spécifie le nom du compte du consommateur comme argument. Par exemple :
execute using policy_context(current_account => '<consumer_account_name>') ... ;
Le résultat dépend des éléments suivants :
Politique de masquage ou politique de projection qui est définie sur une colonne, le cas échéant.
Politique d’accès aux lignes ou politique d’agrégation qui est définie sur la table ou sur la vue, le cas échéant.
La ou les définitions de la politique.
L’expression de
query
.Les privilèges accordés aux rôles.
Les rôles accordés aux utilisateurs (y compris la hiérarchie des rôles).
Les arguments de cette fonction.
Important
Si le résultat de cette fonction n’est pas ce que vous attendiez :
Consultez votre administrateur de politiques internes pour déterminer quelles tables, vues et colonnes sont protégées par des politiques et pour mieux comprendre les définitions de corps de ces politiques. Cet administrateur peut avoir un rôle personnalisé comme
POLICY_ADMIN
,MASKING_ADMIN
ouRAP_ADMIN
.Vérifie les points suivants :
Valeurs de chaînes de fonctions.
Expression
SELECT
query
.Privilèges accordés aux rôles (par exemple, SELECT sur la table ou la vue, USAGE sur la base de données et le schéma parents) et l’héritage des privilèges correspondants.
Hiérarchie des rôles, surtout si l’on spécifie la fonction CURRENT_AVAILABLE_ROLES et ses valeurs comme argument pour cette fonction.
Mettez à jour l’instruction SQL en utilisant cette fonction, si nécessaire, et réessayez.
Exemples¶
Simulez l’effet du rôle du système PUBLIC qui interroge la table empl_info
:
execute using policy_context(current_role => 'PUBLIC') as select * from empl_info;