CREATE PROJECTION POLICY¶
Crée une nouvelle politique de projection dans le schéma actuel/spécifié ou remplace une politique de projection existante.
Après avoir créé une politique de projection, appliquez la politique de projection à une colonne de table en utilisant une commande ALTER TABLE … ALTER COLUMN ou une colonne de vue en utilisant la commande ALTER VIEW.
- Voir aussi :
Dans ce chapitre :
Syntaxe¶
CREATE [ OR REPLACE ] PROJECTION POLICY [ IF NOT EXISTS ] <name>
AS () RETURNS PROJECTION_CONSTRAINT -> <body>
[ COMMENT = '<string_literal>' ]
Paramètres¶
name
Identificateur de la politique de projection ; doit être unique pour votre schéma.
La valeur de l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (p. ex.
"My object"
). Les identificateurs entre guillemets doubles sont également sensibles à la casse.Pour plus de détails, voir Exigences relatives à l’identificateur.
body
Expression SQL qui détermine s’il faut projeter une colonne.
L’expression peut contenir CASE et d’autres instructions logiques, mais doit appeler la fonction PROJECTION_CONSTRAINT :
PROJECTION_CONSTRAINT(ALLOW=>{TRUE|FALSE}, ENFORCEMENT=><enforcement_style>)
ALLOW
(boolean) - TRUE permet de projeter la colonne. FALSE empêche la colonne d’être projetée, avec le comportement spécifié par ENFORCEMENT. FALSE n’affecte que les colonnes qui apparaissent dans la table des résultats finaux.ENFORCEMENT
(chaîne, optionnel) - Si ALLOW=FALSE, spécifie ce qui doit se passer si une requête inclut une colonne protégée. Valeurs prises en charge :FAIL - La requête échouera si une colonne protégée est incluse dans la requête la plus éloignée.
NULLIFY - Toutes les lignes de la colonne protégée renvoient la valeur NULL.
Par défaut : FAIL
COMMENT = 'string_literal'
Ajoute un commentaire ou remplace un commentaire existant pour la politique de projection.
Exigences en matière de contrôle d’accès¶
Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :
Privilège |
Objet |
Remarques |
---|---|---|
CREATE PROJECTION POLICY |
Schéma |
Le privilège USAGE relatif à la base de données et au schéma parents est exigé pour effectuer des opérations sur tout objet d’un schéma.
Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.
Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.
Pour plus de détails sur la DDL de politique de projection et les privilèges, voir Privilèges et commandes.
Notes sur l’utilisation¶
Si vous souhaitez mettre à jour une politique de projection existante et que vous avez besoin de voir la définition actuelle de la politique, exécutez la commande DESCRIBE PROJECTION POLICY ou la fonction GET_DDL.
Les clauses
OR REPLACE
etIF NOT EXISTS
s’excluent mutuellement. Elles ne peuvent pas être utilisées dans la même instruction.Les instructions CREATE OR REPLACE <objet> sont atomiques. En d’autres termes, lorsqu’un objet est remplacé, l’ancien objet est supprimé et le nouvel objet est créé dans une seule transaction.
Concernant les métadonnées :
Attention
Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.
Exemples¶
Ne pas autoriser la projection d’une colonne :
CREATE OR REPLACE PROJECTION POLICY do_not_project AS () RETURNS PROJECTION_CONSTRAINT -> PROJECTION_CONSTRAINT(ALLOW => false);
Projetez une colonne pour le rôle personnalisé analyst
, sinon autorisez la requête, mais remplacez toutes les valeurs des colonnes protégées par NULL :
CREATE OR REPLACE PROJECTION POLICY project_analyst_only AS () RETURNS PROJECTION_CONSTRAINT -> CASE WHEN CURRENT_ROLE() = 'ANALYST' THEN PROJECTION_CONSTRAINT(ALLOW => true) ELSE PROJECTION_CONSTRAINT(ALLOW => false, ENFORCEMENT => 'NULLIFY') END;