Ajout d’un contenu de données partagées à un paquet d’application

Cette rubrique décrit comment ajouter du contenu de données partagées à un paquet d’application.

À propos du partage de contenu de données dans un paquet d’application

Le Snowflake Native App Framework permet d’ajouter un contenu de données partagées à un paquet d’application. Ce contenu de données est partagé avec les consommateurs qui utilisent votre Snowflake Native App. Le contenu de données que vous partagez dans un paquet d’application est partagé par toutes les instances installées de l”Snowflake Native App.

Le contenu des données partagées n’est pas versionné, ce qui signifie que toutes les versions de votre Snowflake Native App utilisent les mêmes données. Ceci est différent de la logique d’application, qui est versionnée.

Un consommateur ne peut pas accéder directement au contenu partagé. Au lieu de cela, un fournisseur crée une vue sécurisée dans le script d’installation d’un paquet d’application et accorde au consommateur l’accès à la vue sécurisée. Pour plus de détails, voir Exposition d’objets partagés à des consommateurs.

Objets de base de données pouvant être partagés avec un paquet d’application

Le Snowflake Native App Framework permet aux fournisseurs d’ajouter les objets de base de données suivants à un paquet d’application :

  • Schémas

  • Tables

  • Vues

Note

Lorsque vous partagez des objets de base de données tels que des tables et des vues, vous devez également partager le schéma qui les contient.

Les restrictions suivantes s’appliquent aux tables et aux vues partagées dans un paquet d’application :

  • Les tables ne peuvent pas comporter de colonnes virtuelles, notamment des politiques contenant du code Java, Python ou JavaScript.

  • Les définitions de vues ou les colonnes virtuelles qui leur sont associées, telles que les politiques, ne peuvent pas contenir d’appels à Java, Python ou JavaScript.

  • Les tables partagées ne peuvent pas être des tables temporaires, volatiles ou transitoires.

  • Les tables externes ne sont pas prises en charge.

Partage du contenu des données au sein d’un paquet d’application

Pour inclure un contenu de données dans un paquet d’application, vous devez accorder des privilèges sur l’objet à partager avec le paquet d’application. Lorsque vous créez un objet au sein d’un paquet d’application, l’objet est par défaut privé pour le paquet d’application et n’est pas visible lors de l’installation de l”Snowflake Native App.

Pour rendre les objets visibles aux Snowflake Native App installées à partir du paquet d’application, utilisez la commande GRANT … TO SHARE IN APPLICATION PACKAGE comme indiqué dans l’exemple suivant :

CREATE APPLICATION PACKAGE app_package;

GRANT USAGE ON SCHEMA app_package.shared_schema
  TO SHARE IN APPLICATION PACKAGE app_package;
GRANT SELECT ON TABLE app_package.shared_schema.shared_table
  TO SHARE IN APPLICATION PACKAGE app_package;
Copy

Dans cet exemple, la première commande accorde le privilège USAGE sur le schéma shared_schema au paquet d’application, ce qui permet de le partager avec des consommateurs. La deuxième commande accorde au paquet d’application le privilège SELECT sur la table shared_table au sein de shared_schema , ce qui permet à des consommateurs d’interroger la table.

Après avoir installé une Snowflake Native App à partir du paquet d’application app_package, le consommateur peut accéder au shared_schema et interroger la shared_table.

Note

Lorsque vous ajoutez un objet partagé à un paquet d’application, vous devez également partager le schéma qui contient l’objet.

Vous pouvez également partager des vues avec une application en exécutant des commandes SQL similaires.

Référence à des objets qui existent en dehors du paquet d’application

Pour partager un objet de base de données qui existe en dehors du paquet d’application, vous devez créer une vue dans le paquet d’application pour accéder à l’objet. Vous ne pouvez pas partager directement des objets en dehors du paquet d’application.

Avant de partager un objet dans une autre base de données, accordez le privilège REFERENCE_USAGE sur cette base de données à un partage dans le paquet d’application, comme indiqué dans l’exemple suivant :

GRANT REFERENCE_USAGE ON DATABASE other_db
  TO SHARE IN APPLICATION PACKAGE app_pkg;
Copy

Après avoir accordé REFERENCE_USAGE à la base de données externe, vous devez créer une vue dans le paquet d’application qui fait référence aux objets partagés, comme le montre l’exemple suivant :

CREATE VIEW app_pkg.shared_schema.shared_view
  AS SELECT c1, c2, c3, c4
  FROM other_db.other_schema.other_table;
Copy

Cette commande crée une vue dans le paquet d’application qui fait référence à une base de données, une table et un schéma en dehors du paquet d’application.

Après avoir créé la vue, vous devez accorder des privilèges sur le schéma et la vue à l’application, comme le montre l’exemple suivant :

GRANT USAGE ON SCHEMA app_pkg.shared_schema
  TO SHARE IN APPLICATION PACKAGE app_pkg;
GRANT SELECT ON VIEW app_pkg.shared_schema.shared_view
  TO SHARE IN APPLICATION PACKAGE app_pkg;
Copy

Autoriser un accès à des objets partagés dans une application

Les objets de la base de données définis et créés dans le script d’installation sont directement accessibles à une Snowflake Native App après l’installation. Ces objets peuvent être des fonctions, des procédures, des définitions de nouvelles vues, etc.

Seuls les consommateurs de l”Snowflake Native App installée peuvent accéder aux objets de base de données qui ne font pas partie du paquet d’application, en utilisant une vue sécurisée définie dans le script d’installation.

L’exemple suivant montre comment définir une vue dans le script d’installation.

CREATE VIEW IF NOT EXISTS inst_schema.shared_view
  AS SELECT c1, c2, c3, c4
  FROM shared_schema.shared_view;
Copy

Cette vue accède au contenu de la shared_schema.shared_view qui est partagée avec le paquet d’application, comme dans l’exemple de la section précédente.

Note

Si vous essayez de définir une vue qui accède directement au contenu de données partagées, par exemple un objet de base de données externe au paquet d’application, Snowflake renvoie une erreur.

Exposition d’objets partagés à des consommateurs

Par défaut, les objets de base de données partagés avec un paquet d’application ne sont pas visibles pour le consommateur. Pour permettre aux consommateurs de visualiser le contenu de données et d’y accéder, le paquet d’application doit créer une vue sécurisée et accorder les privilèges appropriés.

Cette approche présente les avantages suivants :

  • La création de la vue dans le script d’installation garantit que les modifications apportées directement aux objets partagés, telles que les nouvelles colonnes, ne sont pas visibles pour la version de l”Snowflake Native App installée par le script d’installation.

  • La création de la vue dans un schéma versionné garantit que chaque version de l”Snowflake Native App ne contient que la définition de la vue pour cette version. Ceci est important pour les scénarios de mise à niveau.

Pour exposer les objets partagés à un consommateur, le script d’installation doit inclure les commandes suivantes :

  • Installez les vues dans un schéma versionné dans le paquet d’application.

  • Accordez l’accès à ces vues au consommateur à l’aide d’un rôle d’application.

L’exemple suivant décrit comment utiliser les rôles d’application pour accorder un accès à des objets partagés dans le script d’installation du paquet d’application :

CREATE APPLICATION ROLE app_user;

CREATE OR ALTER VERSIONED SCHEMA inst_schema;
GRANT USAGE ON SCHEMA inst_schema
  TO APPLICATION ROLE app_user;

CREATE VIEW IF NOT EXISTS inst_schema.shared_view
  AS SELECT c1, c2, c3, c4
  FROM shared_schema.shared_table;

GRANT SELECT ON VIEW inst_schema.shared_view
  TO APPLICATION ROLE app_user;
Copy

Comment le Snowflake Native App Framework protège les contenus partagés

Pour protéger la confidentialité et l’intégrité du contenu de données d’un fournisseur, le Snowflake Native App Framework met en œuvre la restriction suivante :

  • Les objets partagés sont en lecture seule pour une Snowflake Native App installée.

  • Les objets partagés ne sont pas directement exposés aux consommateurs. Les objets ne sont exposés qu’à travers une vue sécurisée qui est installée lors de l’exécution du script d’installation pendant l’installation de l”Snowflake Native App.

  • Seul le fournisseur peut mettre à jour le contenu partagé.

  • Seuls les objets suivants peuvent être partagés avec les instances d’une Snowflake Native App installée avec certains privilèges :

    • Schémas : seul le privilège USAGE peut être accordé au contenu partagé d’une Snowflake Native App.

    • Tables : seul le privilège SELECT peut être accordé au contenu partagé d’une Snowflake Native App. Les tables avec des politiques définies (accès par ligne, masquage, basées sur des balises, etc.) ne peuvent pas être partagées. Les politiques peuvent être définies sur les objets lorsqu’ils sont exposés aux consommateurs.

    • Vues : seul le privilège SELECT peut être accordé au contenu partagé d’un paquet d’application. Les vues avec des politiques définies, y compris l’accès aux lignes, le masquage, celles basées sur des balises, etc., ne peuvent pas être partagées.

Note

La vue, ou toutes les vues à partir desquelles elles sont composées, ne peuvent pas contenir de fonctions JavaScript, Java, Python ou Scala.

Reportez-vous à Exposition d’objets partagés à des consommateurs pour plus d’informations.

Restrictions concernant le partage de contenu de données avec les politiques

Les fournisseurs ne peuvent pas partager des tables et des vues avec des politiques, notamment le masquage, l’accès aux lignes et d’autres types de politiques. Cette restriction est nécessaire, car l’ajout ou la modification de politiques du côté du fournisseur peut immédiatement interrompre les instances d’une Snowflake Native App en cours d’exécution.

En outre, certaines fonctions auxquelles les politiques font généralement référence, telles que CURRENT_USER, se comportent différemment dans le contexte d’un paquet d’application. Bien qu’une politique définie par un fournisseur puisse fonctionner correctement dans le compte du fournisseur, elle peut ne pas fonctionner lorsque le consommateur installe l”Snowflake Native App.

Snowflake recommande de définir des politiques sur les vues du proxy qui sont spécifiées dans le script d’installation. La définition de politiques sur les vues proxy garantit que la définition des politiques ne peut pas être modifiée après l’installation d’une Snowflake Native App. La définition de politiques sur les vues proxy garantit également que, lors des mises à niveau, le code en cours d’exécution continue d’utiliser les politiques appliquées lors de la création de la version.

Révocation et suppression d’autorisations sur des objets partagés

Agissez avec prudence lorsque vous révoquez des autorisations sur des objets partagés à partir d’un paquet d’application ou lorsque vous supprimez des objets partagés. Si une version installée de l”Snowflake Native App nécessite encore l’accès à ces objets, l”Snowflake Native App risque de devenir instable ou de ne plus fonctionner.