Catégories :

Table, vue et séquence DDL

ALTER VIEW

Modifie les propriétés d’une vue existante. Actuellement, les seules opérations prises en charge sont les suivantes :

  • Renommage d’une vue.

  • Conversion (entrante ou sortante) d’une vue sécurisée.

  • Ajout, écrasement ou suppression d’un commentaire pour une vue.

Notez que vous ne pouvez pas utiliser cette commande pour changer la définition d’une vue. Pour modifier la définition de la vue, vous devez détruire la vue, puis la recréer.

Voir aussi :

CREATE VIEW , DROP VIEW , SHOW VIEWS , DESCRIBE VIEW

Dans ce chapitre :

Syntaxe

ALTER VIEW [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER VIEW [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'

ALTER VIEW [ IF EXISTS ] <name> UNSET COMMENT

ALTER VIEW <name> SET SECURE

ALTER VIEW <name> UNSET SECURE

ALTER VIEW [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER VIEW [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

ALTER VIEW [ IF EXISTS ] <name>
  ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])

ALTER VIEW [ IF EXISTS ] <name>
  DROP ROW ACCESS POLICY <policy_name>

ALTER VIEW [ IF EXISTS ] <name>
  ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])
  , DROP ROW ACCESS POLICY <policy_name>

ALTER VIEW [ IF EXISTS ] <name> DROP ALL ROW ACCESS POLICIES

ALTER VIEW <name> { ALTER | MODIFY } [ COLUMN ] <col_name> SET MASKING POLICY <policy_name> [ USING ( <col_name> , cond_col_1 , ... ) ]
                                                                                            [ FORCE ]

ALTER VIEW <name> { ALTER | MODIFY } [ COLUMN ] <col_name> UNSET MASKING POLICY

ALTER VIEW <name> { ALTER | MODIFY } [ COLUMN ] <col_name> SET TAG <tag_name> = '<string_literal>' [ , <tag_name> = '<string_literal>' ... ]

ALTER VIEW <name> { ALTER | MODIFY } COLUMN <col_name> UNSET TAG <tag_name> [ , <tag_name> ... ]

Paramètres

name

Indique l’identifiant de la vue à 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.

RENAME TO new_name

Indique le nouvel identifiant de la vue ; doit être unique pour le schéma.

Pour plus de détails, 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 forme db_name.schema_name.object_name ou schema_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.

Lorsqu’un objet est renommé, les autres objets qui le référencent doivent être mis à jour avec le nouveau nom.

SET ...

Spécifie la propriété à définir pour la vue :

SECURE

Spécifie une vue comme sécurisée.

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 de détails 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 un commentaire existant pour la vue.

Note

Vous devez définir chaque propriété de vue individuellement.

UNSET ...

Spécifie la propriété à désactiver pour la vue, qui est rétablie à la valeur par défaut :

  • SECURE

  • TAG TAG tag_name = 'tag_value' [, TAG tag_name = 'tag_value' ... ]

  • COMMENT

Lors de la réinitialisation d’une propriété, spécifiez seulement le nom ; si vous spécifiez une valeur pour la propriété, vous obtiendrez une erreur.

Note

Vous devez réinitialiser chaque propriété de vue individuellement.

policy_name

Identificateur de la politique d’accès à la ligne ; doit être unique pour votre schéma.

ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ])

Ajoute une politique d’accès aux lignes à une vue.

Au moins un nom de colonne doit être spécifié. Des colonnes supplémentaires peuvent être spécifiées en séparant chaque nom de colonne par une virgule.

DROP ROW ACCESS POLICY <policy_name>

Détruit une politique d’accès aux lignes d’une vue.

DROP ALL ROW ACCESS POLICIES

Détruit toutes les associations de politique d’accès aux lignes d’une vue.

Cette expression est utile lorsqu’une politique d’accès aux lignes est détruite d’un schéma avant de détruire la politique d’une vue.

ALTER | MODIFY <col_name> SET MASKING POLICY <policy_name>

Applique une politique de masquage Sécurité au niveau des colonnes à une colonne de vue.

USING ( col_name , cond_col_1 ... )

Spécifie les arguments à passer dans l’expression SQL de la politique de masquage conditionnelle.

La première colonne de la liste spécifie la colonne pour les conditions de la politique de masquage ou de tokenisation des données et doit correspondre à la colonne à laquelle la politique de masquage est définie.

Les colonnes supplémentaires spécifient les colonnes à évaluer pour déterminer s’il faut masquer ou tokeniser les données de chaque ligne du résultat de la requête lorsqu’une requête est effectuée sur la première colonne.

Si la clause USING est omise, Snowflake traite la politique de masquage conditionnelle comme une politique de masquage normale.

FORCE

Remplace une politique de masquage actuellement définie sur une colonne par une politique de masquage différente dans une seule instruction.

Si aucune politique de masquage n’est actuellement définie sur la colonne, la spécification de ce mot-clé n’a aucun effet.

Pour plus de détails, voir : Remplacer une politique de masquage sur une colonne.

ALTER | MODIFY <col_name> UNSET MASKING POLICY

Supprime une politique de masquage de sécurité au niveau des colonnes d’une colonne de vue.

Notes sur l’utilisation

  • Le déplacement d’une vue vers un schéma d’accès géré (utilisant la syntaxe ALTER VIEW … RENAME TO) est interdit sauf si le propriétaire de la vue (c’est-à-dire le rôle qui a le privilège OWNERSHIP sur la vue) est également propriétaire du schéma cible.

  • Pour les politiques de masquage :

    • La clause USING et le mot-clé FORCE sont tous deux facultatifs ; ils ne sont pas nécessaires pour définir une politique de masquage sur une colonne. La clause USING et le mot-clé FORCE peuvent être utilisés séparément ou ensemble. Pour plus de détails, voir :

    • Une seule politique de masquage qui utilise des colonnes conditionnelles peut être appliquée à plusieurs tables, à condition que la structure des colonnes de la table corresponde aux colonnes spécifiées dans la politique.

    • Lorsque vous modifiez une ou plusieurs colonnes de la table avec une politique de masquage ou la table elle-même avec une politique d’accès aux lignes, utilisez la fonction POLICY_CONTEXT pour simuler une requête sur la ou les colonnes protégées par une politique de masquage et la table protégée par une politique d’accès aux lignes.

  • Une seule politique de masquage qui utilise des colonnes conditionnelles peut être appliquée à plusieurs vues, à condition que la structure des colonnes de la vue corresponde aux colonnes spécifiées dans la politique.

  • Pour les politiques d’accès aux lignes :

    • Snowflake prend en charge l’ajout et la suppression des politiques d’accès aux lignes dans une seule instruction SQL.

      Par exemple, pour remplacer une politique d’accès aux lignes déjà définie sur une table par une politique différente, il faut d’abord détruire la politique d’accès aux lignes, puis ajouter la nouvelle politique d’accès aux lignes.

    • Pour une ressource donnée (c’est-à-dire une table ou une vue), pour ADD ou DROP une politique d’accès aux lignes, vous devez disposer du privilège APPLY ROW ACCESS POLICY sur le schéma, ou du privilège OWNERSHIP sur la ressource et du privilège APPLY sur la ressource de la politique d’accès aux lignes.

    • Une table ou une vue ne peut être protégée que par une seule politique d’accès aux lignes à la fois. L’ajout d’une politique échoue si le corps de la politique fait référence à une colonne de table ou de vue qui est protégée par une politique d’accès aux lignes ou à la colonne protégée par une politique de masquage.

      De même, l’ajout d’une politique de masquage à une colonne de table échoue si le corps de la politique de masquage fait référence à une table qui est protégée par une politique d’accès aux lignes ou une autre politique de masquage.

    • Les politiques d’accès aux lignes ne peuvent pas être appliquées aux vues système ou aux fonctions de table.

    • Comme pour les autres opérations DROP <objet>, Snowflake renvoie une erreur en cas de tentative de destruction d’une politique d’accès aux lignes d’une ressource à laquelle aucune politique d’accès aux lignes n’a été ajoutée.

    • Si un objet possède à la fois une politique d’accès aux lignes et une ou plusieurs politiques de masquage Sécurité au niveau des colonnes , la politique d’accès aux lignes est évaluée en premier.

  • 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

Renommer la vue view1 en view2 :

ALTER VIEW view1 RENAME TO view2;

Convertir une vue en vue sécurisée :

ALTER VIEW view1 SET SECURE;

Rétablir une vue sécurisée en vue normale :

ALTER VIEW view1 UNSET SECURE;

Appliquez une politique de masquage de sécurité au niveau des colonnes à une colonne de vue :

-- single column

ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v;

-- multiple columns

ALTER VIEW user_info_v MODIFY
    COLUMN ssn_number SET MASKING POLICY ssn_mask_v
  , COLUMN dob SET MASKING POLICY dob_mask_v
;

Annulez une politique de masquage de sécurité au niveau des colonnes depuis une colonne de vue :

-- single column

ALTER VIEW user_info_v modify column ssn_number unset masking policy;

-- multiple columns

ALTER VIEW user_info_v modify
    column ssn_number unset masking policy
  , column dob unset masking policy
;

L’exemple suivant ajoute une politique d’accès aux lignes sur une vue. Après avoir défini les politiques, vous pouvez vérifier en contrôlant Information Schema.

alter view v1
  add row access policy rap_v1 on (empl_id);

L’exemple suivant détruit une politique d’accès aux lignes d’une vue. Vérifiez que les politiques ont été détruites en interrogeant Information Schema.

alter view v1
  drop row access policy rap_v1;

L’exemple suivant montre comment combiner l’ajout et la destruction de politiques d’accès aux lignes dans une seule instruction SQL pour une vue. Vérifiez les résultats en contrôlant Information Schema.

alter view v1
  drop row access policy rap_v1_version_1,
  add row access policy rap_v1_version_2 on (empl_id);
Revenir au début