ALTER PRIVACY POLICY¶
Modifie les propriétés d’une politique de confidentialité existante.
Prudence
Lors du changement budget_limit
, max_budget_per_aggregate
ou budget_window
, toute propriété non spécifiée dans votre commande ALTER reviendra à sa valeur par défaut. Pour obtenir les valeurs actuelles des paramètres, exécutez la commande DESCRIBE PRIVACY POLICY.
- Voir aussi :
CREATE PRIVACY POLICY , DESCRIBE PRIVACY POLICY , DROP PRIVACY POLICY , SHOW PRIVACY POLICIES
Syntaxe¶
ALTER PRIVACY POLICY [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER PRIVACY POLICY [ IF EXISTS ] <name> SET BODY -> <expression>
ALTER PRIVACY POLICY <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER PRIVACY POLICY <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER PRIVACY POLICY [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'
ALTER PRIVACY POLICY [ IF EXISTS ] <name> UNSET COMMENT
Paramètres¶
name
Spécifie l’identificateur de la politique de confidentialité à modifier.
Si l’identificateur contient des espaces ou des caractères spéciaux, toute la chaîne doit être délimitée par des guillemets doubles. Les identificateurs entre guillemets doubles sont également sensibles à la casse.
Pour plus d’informations, voir Exigences relatives à l’identificateur.
RENAME TO new_name
Spécifie le nouvel identificateur de la politique de confidentialité ; doit être unique pour votre schéma. Le nouvel identificateur ne peut pas être utilisé si l’identificateur est déjà en place pour une autre politique de confidentialité.
Pour plus d’informations, voir Exigences relatives à l’identificateur.
Vous pouvez déplacer l’objet vers une autre base de données et/ou un autre schéma tout en renommant éventuellement l’objet. Pour ce faire, spécifiez une valeur
new_name
qualifiée qui inclut le nouveau nom de la base de données et/ou du schéma sous la formedb_name.schema_name.object_name
ouschema_name.object_name
, respectivement.Note
La base de données et/ou le schéma de destination doivent déjà exister. En outre, un objet portant le même nom ne peut pas déjà exister dans le nouvel emplacement ; sinon, l’instruction renvoie une erreur.
Le déplacement d’un objet vers un schéma d’accès géré est interdit sauf si le propriétaire de l’objet (c’est-à-dire le rôle qui a le privilège OWNERSHIP sur l’objet) est également propriétaire du schéma cible.
SET ...
Spécifie une (ou plusieurs) propriétés à définir pour la politique de confidentialité :
BODY -> expression
Spécifie un nouveau corps pour la politique.
L’expression SQL du corps appelle deux fonctions pour contrôler la valeur de retour de la politique : NO_PRIVACY_POLICY et PRIVACY_BUDGET. Lorsqu’une requête est exécutée sur une table à laquelle la politique a été attribuée, Snowflake évalue les conditions du corps pour appeler la fonction appropriée et renvoyer une valeur. Cette valeur de retour détermine quel budget de confidentialité, le cas échéant, est associé à la requête sur la table protégée par la confidentialité.
L’expression peut utiliser des fonctions de contexte telles que CURRENT_ROLE ou INVOKER_ROLE pour associer un utilisateur ou un groupe d’utilisateurs à un budget de confidentialité.
Si vous utilisez un bloc CASE dans l’expression du corps, il doit inclure une instruction ELSE qui appelle NO_PRIVACY_POLICY ou PRIVACY_BUDGET. Chaque utilisateur doit être associé à un budget de confidentialité ou avoir un accès illimité à la table protégée par la confidentialité. Si un utilisateur ne doit pas avoir accès à une table ou à une vue protégée par la confidentialité, révoquez les privilèges SELECT plutôt que d’essayer de définir cela dans la politique de confidentialité.
NO_PRIVACY_POLICY
Utilisez l’expression du corps pour appeler la fonction
NO_PRIVACY_POLICY
lorsque vous souhaitez qu’une requête ait un accès illimité à la table ou à la vue à laquelle la politique de confidentialité est affectée.PRIVACY_BUDGET
Utilisez l’expression du corps pour appeler la fonction
PRIVACY_BUDGET
lorsque vous souhaitez renvoyer un budget de confidentialité à partir de la politique. L’expression peut contenir des conditions qui permettent à la politique de renvoyer différents budgets de confidentialité pour différentes requêtes en fonction de facteurs tels que l’utilisateur qui exécute la requête.Dans la collaboration entre comptes, les budgets de confidentialité reçoivent automatiquement un espace de noms via l’identificateur de compte du compte consommateur, ce qui empêche deux comptes consommateurs différents de partager le même budget de confidentialité même si le nom du budget de confidentialité est le même. Utiliser la fonction CURRENT_ACCOUNT pour concaténer le nom du compte avec le nom du budget de confidentialité peut aider à distinguer les budgets de confidentialité. Par exemple, vous pouvez appeler la fonction comme suit :
PRIVACY_BUDGET(BUDGET_NAME => 'external_budget.' || CURRENT_ACCOUNT())
.La signature de la fonction
PRIVACY_BUDGET
est :PRIVACY_BUDGET( BUDGET_NAME=> '<string>' [, BUDGET_LIMIT=> <decimal> ] [, MAX_BUDGET_PER_AGGREGATE=> <decimal> ] [, BUDGET_WINDOW=> <string> ] )
Arguments du budget de confidentialité :
BUDGET_NAME => expression
Devient le nom d’un budget de confidentialité. Snowflake crée automatiquement le budget de confidentialité lorsque son nom est spécifié dans le corps de la politique de confidentialité.
BUDGET_LIMIT => decimal
Un nombre décimal> 0 qui spécifie la limite budgétaire pour cette politique de confidentialité. Cela contrôle le montant total de perte de confidentialité autorisée. Le réglage de cette valeur modifie le nombre total d’agrégats différentiellement privés qui peuvent être calculés par rapport aux tables protégées par ce budget de confidentialité pendant la période d’actualisation. Lorsqu’une requête est exécutée et que la perte de confidentialité cumulée dépasse ce nombre, la requête échoue. À titre d’estimation approximative, une limite budgétaire de 233 avec
MAX_BUDGET_PER_AGGREGATE=1
permet environ 1 000 agrégats par période d’actualisation.Par défaut : 233,0
MAX_BUDGET_PER_AGGREGATE => decimal
Spécifie le montant du budget de confidentialité utilisé pour chaque fonction d’agrégation dans une requête. Le réglage de cette valeur modifie la quantité de bruit ajoutée à chaque requête agrégée, ainsi que le nombre d’agrégats qui peuvent être calculés avant que la limite budgétaire ne soit atteinte. À titre d’exemple, la requête
select count(*), avg(a) ...
a deux agrégats :count(*)
etavg(a)
. Spécifier une valeur décimale> 0.Par défaut : 0,5
BUDGET_WINDOW => string
La fréquence à laquelle le budget de confidentialité est actualisé, c’est-à-dire que sa perte de confidentialité cumulée est réinitialisée à 0. Valeurs valides :
Daily
: actualisé tous les jours à 12h00 AM UTCWeekly
: actualisé tous les dimanches à 12h00 AM UTCMonthly
: actualisé le premier jour du mois calendaire à 12h00 AM UTCYearly
: actualisé le 1er janvier à 12h00 AM UTCNever
: le budget de confidentialité n’est jamais actualisé.
Par défaut : hebdomadaire
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
Spécifie le nom de la balise et la valeur de la chaîne de la balise.
La valeur de la balise est toujours une chaîne de caractères et le nombre maximum de caractères pour la valeur de la balise est 256.
Pour plus d’informations sur la spécification des balises dans une instruction, voir Quotas de balises pour les objets et les colonnes.
COMMENT = 'string_literal'
Ajoute un commentaire ou écrase le commentaire existant pour la politique de confidentialité.
Par défaut : aucune valeur
UNSET ...
Spécifie une ou plusieurs propriétés et/ou paramètres à désactiver, en les réinitialisant à leurs valeurs par défaut, pour la politique de confidentialité :
TAG tag_name [ , tag_name ... ]
COMMENT
Lors de la réinitialisation d’une propriété ou d’un paramètre, spécifiez seulement le nom ; si vous spécifiez une valeur pour la propriété, vous obtiendrez une erreur.
Exigences en matière de contrôle d’accès¶
Un rôle utilisé pour exécuter cette commande SQL doit avoir les privilèges suivants définis au minimum ainsi :
Privilège |
Objet |
Remarques |
---|---|---|
OWNERSHIP |
Politique de confidentialité |
OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). |
Notez que l’exploitation d’un objet dans un schéma requiert également le privilège USAGE sur la base de données et le schéma parents.
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.
Notes sur l’utilisation¶
Si vous souhaitez mettre à jour une politique de confidentialité existante et que vous avez besoin de voir la définition actuelle de la politique, exécutez la commande DESCRIBE PRIVACY POLICY. Vous pouvez également utiliser la fonction GET_DDL pour obtenir la définition complète de la politique de confidentialité, y compris son corps.
Le déplacement d’une politique de confidentialité vers un schéma d’accès géré (utilisant la syntaxe ALTER PRIVACY POLICY … RENAME TO) est interdit sauf si le propriétaire de la politique de confidentialité (c’est-à-dire le rôle qui a le privilège OWNERSHIP sur la politique de confidentialité) est également propriétaire du schéma cible.
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¶
Modifier le corps d’une politique de confidentialité my_priv_policy
pour qu’elle renvoie toujours un budget nommé analysts
:
-- Modify the body of privacy policy "my_priv_policy" so it always returns a -- budget named "analysts" ALTER PRIVACY POLICY my_priv_policy SET BODY -> PRIVACY_BUDGET(BUDGET_NAME => 'analysts'); -- Set budget limit to 50 and max budget per aggregate to 0.1 -- budget window is not mentioned so it is reset to its default value ALTER PRIVACY POLICY users_policy SET BODY -> privacy_budget(budget_name=>'analysts', budget_limit=>50, max_budget_per_aggregate=>0.1);