- Catégories :
POLICY_CONTEXT¶
Simule le résultat de la requête pour les colonnes de la table ou de la vue protégées par une politique de masquage, une table ou une vue protégée par une politique d’accès aux lignes, ou les deux si la table ou la vue est protégée par les deux types de politiques.
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
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 :
La politique de masquage qui est définie sur une colonne, le cas échéant.
La politique d’accès aux lignes qui est définie sur la table ou 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 politique interne (par exemple, les utilisateurs avec les rôles personnalisés
POLICY_ADMIN
,MASKING_ADMIN
,RAP_ADMIN
) pour comprendre les colonnes qui sont protégées par une politique de masquage, la politique d’accès aux lignes qui protège la table ou la vue et la ou les définitions de politique correspondantes.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;