Balisage d’objets

Cette rubrique fournit des concepts et des instructions sur la façon d’utiliser les balises dans Snowflake.

Dans ce chapitre :

Qu’est-ce qu’une balise ?

Les balises permettent aux responsables des données de suivre les données sensibles pour les cas de conformité, de découverte, de protection et d’utilisation des ressources par le biais d’une approche centralisée ou décentralisée de la gestion de la gouvernance des données.

Une balise est un objet de niveau schéma qui peut être affecté à un autre objet Snowflake. Une balise peut se voir affecter une valeur de chaîne arbitraire lors de l’affectation de cette balise à un objet Snowflake. Snowflake stocke la balise et sa valeur de chaîne sous forme de paire clé-valeur. La balise doit être unique pour votre schéma et la valeur de la balise est toujours une chaîne. Le nombre maximum de caractères pour la valeur de la balise est 256. Le nombre maximum de clés de balises uniques pouvant être définies sur un seul objet est 20.

Note

Pour une table ou une vue et ses colonnes, le nombre total de clés de balises uniques qui peuvent être définies est 20.

Par exemple, si une colonne unique d’une table a 10 clés de balises uniques définies sur la colonne, Snowflake permet 10 clés de balises uniques supplémentaires à définir soit sur cette colonne, soit sur d’autres colonnes de la table, soit sur la table elle-même, soit sur une combinaison de la table et de ses colonnes. Une fois que la limite de 20 clés de balises uniques est atteinte, aucune clé de balise supplémentaire ne peut être définie sur la table ou ses colonnes.

Vous créez une balise à l’aide d’une instruction CREATE TAG et vous spécifiez la valeur de la chaîne de la balise lorsque vous l’affectez à un objet. La balise peut être assignée à un objet lors de la création de l’objet, à l’aide d’une instruction CREATE <objet> en supposant que la balise existe déjà. Vous pouvez également affecter la balise à un objet existant en utilisant une instruction ALTER <objet>.

Une même balise peut être affectée à différents types d’objets en même temps (par exemple, entrepôt et table simultanément). Au moment de l’affectation, la valeur de la chaîne de balise peut être dupliquée ou rester unique. Par exemple, la balise cost_center peut être affectée à plusieurs tables et la valeur de la chaîne de caractères de la balise peut toujours être sales. La valeur de la chaîne peut également être différente (par exemple engineering, marketing, finance). Après avoir défini les balises et les avoir attribuées à des objets Snowflake, les balises peuvent être interrogées pour suivre l’utilisation des objets afin de faciliter les opérations de gouvernance des données, telles que le suivi, l’audit et la création de rapports.

Étant donné que les balises peuvent être attribuées à des tables, des vues et des colonnes, le fait de définir une balise puis de l’interroger permet de découvrir une multitude d’objets et de colonnes de base de données qui contiennent des informations sensibles. Lors de la découverte, les gestionnaires de données peuvent déterminer la meilleure façon de rendre ces données disponibles, par exemple en effectuant un filtrage sélectif à l’aide des politiques d’accès aux lignes, ou en utilisant des politiques de masquage afin de déterminer si les données sont tokenisées, entièrement masquées, partiellement masquées ou non masquées.

L’attribution de balises aux entrepôts permet un suivi précis de l’utilisation des ressources. L’interrogation des balises sur les ressources permet de regrouper facilement les ressources par centre de coûts ou autres unités organisationnelles. En outre, la balise peut faciliter l’analyse d’activités commerciales à relativement court terme, telles que des projets, afin de fournir une vision plus granulaire de ce qui a été utilisé, et de quand et comment les ressources ont été utilisées.

Lignée de balises

Une balise est héritée en fonction de la hiérarchie des objets sécurisables de Snowflake. Snowflake recommande de définir les clés de balises aussi près que possible de la hiérarchie des objets sécurisables dans votre environnement Snowflake.

The tag administrator can apply masking policies to tables and views.

L’héritage des balises signifie que si une balise est appliquée à une table, elle s’applique également aux colonnes de cette table. Ce comportement est appelé « lignée de balises ».

Il est possible de remplacer une balise héritée sur un objet donné. Par exemple, si une colonne de table hérite de la balise nommée cost_center avec une valeur de chaîne appelée ventes, la balise peut être mise à jour avec une valeur de chaîne de balise plus spécifique telle que sales_na, pour spécifier le centre de coûts des ventes en Amérique du Nord. En outre, une nouvelle balise peut être appliquée à la colonne de la table. Utilisez une instruction ALTER TABLE … ALTER COLUMN pour mettre à jour la valeur de la chaîne de balises sur la colonne et pour définir une ou plusieurs balises supplémentaires sur une colonne.

Après avoir défini les clés de balises et assigné des balises aux objets Snowflake, suivez les balises, les références de balises et la lignée de balises à l’aide des fonctions de table spécifiées ou interrogez les vues comme indiqué dans Utilisation des balises (dans cette rubrique).

Note

La lignée de balises ne comprend pas la propagation aux objets imbriqués. Par exemple :

table_1 » view_1 » materialized_view_1

Si des objets imbriqués existent déjà par rapport à une table ou une vue sous-jacente, une balise définie sur l’objet sous-jacent n’entraîne pas automatiquement la définition d’une balise sur l’objet imbriqué. Dans cet exemple, une balise définie sur table_1 n’entraîne pas la définition de la même balise sur view_1 et materialized_view_1. Ce comportement est également vrai pour les colonnes.

S’il est nécessaire que les balises des objets ou colonnes sous-jacents soient transférées sur les objets imbriqués, exécutez une instruction CREATE OR REPLACE sur l’objet imbriqué et assurez-vous que l’instruction SQL spécifie la balise de l’objet ou de la colonne imbriquée.

Avantages des balises

Facilité d’utilisation

Définissez une balise une fois et appliquez-la à autant d’objets différents que vous le souhaitez.

Lignée de balises

Étant donné que les balises sont héritées, l’application de la balise aux objets situés à un niveau supérieur dans la hiérarchie des objets sécurisables entraîne l’application de la balise à tous les objets enfants. Par exemple, si une balise est définie sur une table, la balise sera héritée par toutes les colonnes de cette table.

Attribution cohérente avec réplication

Snowflake réplique les balises et leurs affectations dans la base de données principale vers la base de données secondaire.

Pour plus d’informations, voir Réplication (dans ce chapitre).

Suivi des données sensibles et utilisation des ressources

Les balises simplifient l’identification des données sensibles (par exemple, PII, Secret) et apportent de la visibilité à l’utilisation des ressources de Snowflake. Avec les données et les métadonnées dans le même système, les analystes peuvent rapidement déterminer quelles ressources consomment le plus de crédits Snowflake en se basant sur la définition de la balise (par exemple cost_center, department).

Gestion centralisée ou décentralisée

Les balises prennent en charge différentes approches de gestion pour faciliter la conformité aux exigences réglementaires internes et externes.

Dans une approche centralisée, le rôle personnalisé tag_admin crée et applique des balises aux objets Snowflake.

Dans une approche décentralisée, les équipes individuelles appliquent des balises aux objets Snowflake et le rôle personnalisé tag_admin crée des balises afin de garantir une dénomination cohérente des balises.

Utilisation des balises avec les objets et les fonctionnalités de Snowflake

Les paragraphes suivants décrivent comment les balises affectent les objets et les fonctionnalités dans Snowflake.

Objets pris en charge

Le tableau suivant répertorie les objets pris en charge pour les balises, y compris les colonnes, en fonction de la hiérarchie des objets sécurisables de Snowflake.

Une balise peut être définie sur un objet avec une instruction CREATE <objet> ou une instruction ALTER <objet> sauf indication contraire dans le tableau ci-dessous.

Une balise peut être définie sur une colonne à l’aide d’une instruction CREATE TABLE, CREATE VIEW, ALTER TABLE … MODIFY COLUMN ou ALTER VIEW.

Hiérarchie des objets

Objets pris en charge

Remarques

Organisation

Compte

Une balise peut être définie sur votre compte actuel par un rôle disposant du privilège global APPLY TAG.

Compte

Intégration

Partager

Entrepôt

Utilisateur

Rôle

Base de données

Tous les types d’intégration sont pris en charge. Utilisez une commande ALTER INTEGRATION pour définir une balise sur l’intégration.

Les balises sont définies sur le partage par le fournisseur de partage de données. Ces balises ne sont pas visibles pour le consommateur de partage de données. Utilisez une commande ALTER SHARE pour définir une balise sur le partage.

Base de données

Schéma

Schéma

Flux

Tâche

Canal

Table

Table externe

Vue

Vue matérialisée

Zone de préparation

Utilisez une commande ALTER STREAM pour définir une balise sur la zone de préparation.

Utilisez une commande ALTER TASK pour définir une balise sur la tâche.

Utilisez une commande ALTER PIPE pour définir une balise sur le canal.

Table ou vue

Colonne

Spécification de valeurs de balises

La propriété de balise ALLOWED_VALUES permet de spécifier les valeurs de chaîne possibles qui peuvent être affectées à la balise lorsque celle-ci est définie sur un object. Le nombre maximal de valeurs de chaîne possibles pour une seule balise est 50.

Vous pouvez spécifier ces valeurs lorsque vous créez ou remplacez une balise avec une instruction CREATE TAG ou lorsque vous modifiez une clé de balise existante avec une instruction ALTER TAG. Notez que l’instruction ALTER TAG prend en charge l’ajout de valeurs autorisées pour une balise et la destruction de valeurs existantes pour une balise.

Par exemple :

Créez une balise nommée cost_center avec 'finance' et 'engineering' comme les deux seules valeurs de chaîne autorisées :

create tag cost_center
    allowed_values 'finance', 'engineering';

Modifiez la balise nommée cost_center pour ajouter 'marketing' comme valeur de chaîne autorisée :

alter tag cost_center
    add allowed_values 'marketing';

Modifiez la balise nommée cost_center pour détruire 'engineering' comme valeur de chaîne autorisée :

alter tag cost_center
    drop allowed_values 'engineering';

Pour obtenir la liste des valeurs de chaîne autorisées pour une balise donnée, appelez la fonction SYSTEM$GET_TAG_ALLOWED_VALUES. Par exemple, supposons que la balise cost_center soit stockée dans une base de données nommée governance et un schéma nommé tags :

select system$get_tag_allowed_values('governance.tags.cost_center');

+--------------------------------------------------------------+
| SYSTEM$GET_TAG_ALLOWED_VALUES('GOVERNANCE.TAGS.COST_CENTER') |
|--------------------------------------------------------------|
| ["finance","marketing"]                                      |
+--------------------------------------------------------------+

Instructions CREATE TABLE

Avec CREATE TABLE … LIKE, les balises affectées à la table source sont affectées à la table cible.

Réplication

Les balises peuvent être répliquées.

L’opération de réplication échoue si l’une des conditions suivantes est vraie :

  • La base de données principale se trouve dans un compte Enterprise (ou supérieur) et contient une balise, mais au moins un des comptes approuvés pour la réplication se trouve sur des éditions inférieures.

  • Un objet contenu dans la base de données principale fait référence à une balise dans une autre base de données.

    Note

    En cas d’utilisation des actions de basculement et de restauration, le compte Snowflake doit être Business Critical Edition ou supérieur.

    Pour plus d’informations, voir Réplication de base de données et basculement/restauration automatique.

Clonage

Snowflake prend en charge le comportement suivant des balises pendant les opérations de clonage :

  • Les associations de balises dans l’objet source sont maintenues dans les objets clonés.

  • Lorsqu’une opération de clonage est exécutée sur une base de données ou un schéma, les balises stockées dans cette base de données ou ce schéma sont également clonées.

  • Après le clonage, les objets et leurs associations de balises dans la base de données ou le schéma source restent les mêmes. Dans la base de données ou le schéma cloné, les objets et leurs associations de balises sont spécifiques à la base de données et au schéma cloné.

Utilisation des balises

Voici un aperçu détaillé de l’utilisation des balises dans Snowflake :

  1. Définissez un rôle personnalisé et attribuez des privilèges.

  2. Attribuez le rôle personnalisé à un utilisateur.

  3. Créez une balise en utilisant une instruction CREATE TAG.

  4. Affectez une balise à un objet Snowflake existant à l’aide de la commande ALTER <objet>.

    Notez que vous pouvez aussi affecter une balise à un objet nouveau en utilisant une commande CREATE <objet>.

  5. Suivez les balises à l’aide de fonctions de table et de vues.

Pour simplifier, ces étapes supposent une approche de gestion centralisée des balises, où le rôle personnalisé tag_admin dispose des privilèges CREATE et APPLY pour la balise.

Étape 1 : Créer un rôle personnalisé et attribuer des privilèges

Dans une approche de gestion centralisée, le rôle personnalisé tag_admin est chargé de créer et d’attribuer des balises aux objets Snowflake.

Notez que cet exemple utilise le rôle système ACCOUNTADMIN. Si l’utilisation de ce rôle à privilèges plus élevés dans un environnement de production n’est pas souhaitable, vérifiez que le rôle qui attribue des privilèges au rôle personnalisé tag_admin dispose des privilèges nécessaires pour qualifier le rôle personnalisé tag_admin. Pour plus d’informations, voir Gestion des balises (dans ce chapitre).

use role useradmin;
create role tag_admin;
use role accountadmin;
grant create tag on schema <schema_name> to role tag_admin;
grant apply tag on account to role tag_admin;

Étape 2 : Accorder le rôle personnalisé TAG_ADMIN à un utilisateur

Accordez le rôle personnalisé TAG_ADMIN à un utilisateur qui sert d’administrateur de balises.

use role useradmin;
grant role tag_admin to user jsmith;

Étape 3 : Créer une balise

Exécutez une instruction CREATE TAG pour créer une balise.

use role tag_admin;
use schema my_db.my_schema;
create tag cost_center;

Étape 4 : Affecter une balise à un objet Snowflake

Affectez une balise à un objet Snowflake nouveau en utilisant une instruction CREATE <objet>.

Par exemple, pour définir une balise sur un nouvel entrepôt, utilisez la commande CREATE WAREHOUSE.

use role tag_admin;
create warehouse mywarehouse with tag (cost_center = 'sales');

Affectez une balise à un objet Snowflake existant à l’aide de l’instruction ALTER <objet>.

Par exemple, pour définir une balise sur un entrepôt existant, utilisez la commande ALTER WAREHOUSE.

use role tag_admin;
alter warehouse wh1 set tag cost_center = 'sales';

Pour définir ou désactiver une balise sur une colonne existante, utilisez la commande ALTER TABLE … MODIFY COLUMN pour une colonne de table ou la commande ALTER VIEW … MODIFY COLUMN pour une colonne de vue. Notez que plus d’une balise peut être activée ou désactivée dans une seule instruction.

-- For a table or external table column

alter table <table_name> modify column <column_name> set tag <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ];
alter table <table_name> modify column <column_name> unset tag <tag_name> [ , <tag_name> , ... ];

-- For a view or materialized view column

alter view <view_name> modify column <column_name> set tag <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ];
alter view <view_name> modify column <column_name> unset tag <tag_name> [ , <tag_name> , ... ];

Étape 5 : Effectuer un suivi des balises

Vous pouvez suivre l’utilisation des balises grâce à deux vues différentes Account Usage, deux fonctions de table Information Schema, et une fonction de table Account Usage et une fonction système.

Il peut être utile de penser à deux approches générales pour déterminer comment suivre l’utilisation des balises :

  • Découvrir ou répertorier les balises.

  • Identifier les affectations (c’est-à-dire les références) entre une balise et un objet.

Découvrir les balises

Snowflake prend en charge les options suivantes pour répertorier les balises et identifier la valeur de la chaîne de balises pour une clé de balise donnée.

  • Identifier les balises dans votre compte :

    Utilisez la vue TAGS dans le schéma Account Usage de la base de données partagée SNOWFLAKE. Cette vue peut être considérée comme un catalogue de toutes les balises de votre compte Snowflake qui fournit des informations sur les balises actuelles et supprimées. Par exemple :

    select * from snowflake.account_usage.tags
    order by tag_name;
    
  • Identifier une valeur pour une balise donnée :

    Utilisez la fonction système SYSTEM$GET_TAG pour renvoyer la valeur de la balise affectée à la balise spécifiée, ainsi que l’objet ou la colonne Snowflake.

    select system$get_tag('cost_center', 'my_table', 'table');
    
Identifier les affectations

Snowflake prend en charge différentes options pour identifier les affectations de balises, selon que la requête doit cibler le compte ou une base de données spécifique, et selon que la lignée des balises est nécessaire.

  • Requête au niveau du compte avec lignée :

    Utilisez la fonction de table Account Usage TAG_REFERENCES_WITH_LINEAGE pour déterminer tous les objets qui ont une clé de balise et une valeur de balise données qui incluent également la lignée de balise :

    select *
    from table(snowflake.account_usage.tag_references_with_lineage('my_db.my_schema.cost_center'));
    
  • Requête au niveau du compte sans lignée :

    Utilisez la vue TAG_REFERENCES Account Usage pour déterminer tous les objets qui ont une clé de balise et une valeur de balise données, mais qui n’incluent pas la lignée de balise :

    select * from snowflake.account_usage.tag_references
    order by tag_name, domain, object_id;
    
  • Requête au niveau de la base de données, avec lignée :

    Chaque base de données Snowflake comprend un Schéma d’information de Snowflake. Utilisez la fonction de table Information Schema TAG_REFERENCES pour déterminer tous les objets qui ont une balise donnée et qui comprennent également la lignée de balises dans une base de données spécifique :

    select *
    from table(my_db.information_schema.tag_references('my_table', 'table'));
    
  • Requête au niveau de la base de données pour toutes les balises de chaque colonne d’une table ou d’une vue, avec lignée :

    Utilisez la fonction de table Information Schema TAG_REFERENCES_ALL_COLUMNS pour obtenir toutes les balises qui sont définies sur chaque colonne dans une table ou une vue donnée.

    Notez que le domaine TABLE doit est utilisé pour tous les objets qui contiennent des colonnes, même si le nom de l’objet est une vue (c’est-à-dire une vue, une vue matérialisée).

    select *
    from table(information_schema.tag_references_all_columns('my_table', 'table'));
    

Gestion des balises

Privilèges des balises

Snowflake prend en charge les privilèges suivants pour déterminer si les utilisateurs peuvent créer, définir et posséder des balises.

Privilège

Utilisation

CREATE

Permet de créer une nouvelle balise dans un schéma.

APPLY

Permet de réaliser des opérations de définition et d’annulation pour la balise sur un objet Snowflake. Pour des exemples de syntaxe, voir : Résumé des commandes, opérations et privilèges DDL.

OWNERSHIP

Transfère la propriété de la balise, ce qui permet d’en avoir le contrôle total. Nécessaire pour modifier la plupart des propriétés d’une balise.

Note

Les balises sont stockées au niveau du schéma.

Effectuer des opérations sur une balise nécessite également le privilège USAGE sur la base de données et le schéma parents.

Référence de balise DDL

Snowflake prend en charge les DDL suivants pour créer et gérer les balises.

Notez que Snowflake ne prend pas en charge l’opération describe pour l’objet de balise.

Résumé des commandes, opérations et privilèges DDL

La table suivante résume la relation entre les privilèges des balises et les opérations DDL.

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.

Opération

Privilège requis

Créer une balise.

Un rôle avec le privilège CREATE TAG dans le même schéma.

Modifier une balise.

Le rôle avec le privilège OWNERSHIP sur la balise.

Détruire ou rétablir une balise.

Un rôle avec le privilège OWNERSHIP sur la balise et le privilège USAGE sur la base de données et le schéma dans lesquels la balise existe.

Afficher les balises.

Un des éléments suivants : . Un rôle avec le privilège USAGE sur le schéma dans lequel les balises existent, ou . Un rôle avec le privilège APPLY TAG sur ACCOUNT.

Active ou désactive une balise sur un objet.

Pour les objets individuels, un rôle avec le privilège APPLY TAG sur le compte, ou le privilège APPLY TAG sur la balise et le privilège OWNERSHIP sur l’objet sur lequel la balise est définie. Voir Objets pris en charge.

Définir ou annuler une balise sur une colonne.

Un rôle avec le privilège APPLY sur la balise et le privilège OWNERSHIP sur la table ou la vue.

Obtenir des balises sur un objet.

Voir SYSTEM$GET_TAG, TAG_REFERENCES, et TAG_REFERENCES_WITH_LINEAGE.

Snowflake prend en charge différentes autorisations pour créer et définir une balise sur un objet.

  1. Pour une approche de gestion centralisée des balises, dans laquelle le rôle personnalisé tag_admin crée et définit des balises sur tous les objets, les autorisations suivantes sont nécessaires :

    use role securityadmin;
    grant create tag on schema to role tag_admin;
    grant apply tag on account to role tag_admin;
    
  2. Dans une approche de gestion hybride, un rôle unique dispose du privilège CREATE TAG pour garantir que les clés de balises sont nommées de manière cohérente, et des équipes ou rôles individuels disposent du privilège APPLY pour une balise spécifique.

    Par exemple, le rôle personnalisé finance_role peut se voir accorder l’autorisation de définir la clé de balise cost_center sur les tables et les vues que le rôle possède :

    use role securityadmin;
    grant create tag on schema to role tag_admin;
    grant apply on tag cost_center to role finance_role;
    
Revenir au début