Partager du contenu de données dans une Snowflake Native App

Cette rubrique décrit comment les fournisseurs peuvent ajouter du contenu de données partagé à une Snowflake Native App.

Note

Les fournisseurs peuvent publier une Snowflake Native App dans Snowflake Marketplace sous forme d’une annonce d’essai limitée. Pour publier une application en tant qu’annonce d’essai, voir Préparation de l’offre d’une annonce d’essai limité.

À propos des données partagées dans une Snowflake Native App

La Snowflake Native App Framework permet aux fournisseurs d’ajouter du contenu de données partagé à une application. Ce contenu de données est partagé avec les consommateurs lorsqu’ils installent et utilisent l’application. Pour partager le contenu des données, les fournisseurs doivent accorder des privilèges sur les données partagées au paquet d’application. Le contenu de données que les fournisseurs partagent dans un paquet d’application est partagé par toutes les instances installées de l’application.

Prudence

Le contenu des données partagées n’est pas versionné, ce qui signifie que toutes les versions d’une application utilisent les mêmes données.

Les consommateurs ne peuvent 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 Permettre aux consommateurs d’accéder aux objets partagés dans une application.

Objets de base de données pouvant être partagés

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, y compris les tables externes et Apache Iceberg™

  • 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.

  • L’exécution automatique inter-cloud n’est pas prise en charge pour les applications qui contiennent des données externes ou des tables Apache Iceberg™.

Restrictions sur le partage du contenu de données contenant des politiques

Certaines fonctions auxquelles les politiques font généralement référence, telles que CURRENT_USER, se comportent différemment dans le contexte d’une application installée dans un compte de consommateur. Bien qu’une politique définie par un fournisseur puisse fonctionner correctement dans le compte du fournisseur, elle peut ne pas fonctionner correctement dans le compte du consommateur une fois qu’il a installé l’application.

Snowflake recommande que les fournisseurs définissent 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 de proxy garantit que la définition des politiques ne peut pas être modifiée après l’installation d’une application. 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.

Accorder des privilèges sur le contenu partagé à un paquet d’application

Pour inclure un contenu de données dans une application, les fournisseurs doivent accorder des privilèges sur l’objet à partager avec le paquet d’application. Lorsque les fournisseurs ajoutent 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’application.

Pour rendre les objets visibles à une application installée à 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. Cette commande permet de partager le schéma avec les consommateurs. La deuxième commande accorde au paquet d’application le privilège SELECT sur la table shared_table au sein de shared_schema. Cette commande permet aux consommateurs d’interroger la table.

Après avoir installé une application à 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.

Accorder des privilèges sur des objets extérieurs au paquet d’application

Pour partager un objet de base de données qui existe en dehors du paquet d’application, les fournisseurs doivent créer des vues dans le paquet d’application qui permettent d’accéder à l’objet. Vous ne pouvez pas partager directement des objets en dehors du paquet d’application avec une application installée dans le compte consommateur.

Par exemple, pour partager une base de données qui se trouve en dehors du paquet d’application, accordez le privilège REFERENCE_USAGE sur la base de données pour 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, un fournisseur doit créer une vue dans l’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 à la 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

Permettre aux consommateurs d’accéder aux objets partagés dans une application

Les objets de base de données créés dans le script d’installation sont directement accessibles à l’application après l’installation. Il s’agit notamment de tables, de fonctions, de procédures et de nouvelles définitions de vue,

Cependant, 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. Pour permettre l’accès aux modifications apportées à l’objet, les fournisseurs doivent créer une nouvelle version ou un correctif pour l’application.

  • 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

Dans cet exemple, la vue accède au contenu de shared_schema.shared_view et le partage avec le paquet d’application.

Note

Si un fournisseur tente 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.

Définir des politiques sur les vues proxy

Snowflake recommande de créer des vues proxy et de définir des politiques pour les protéger dans le script d’installation. La définition de politiques pour protéger la vue proxy garantit que la définition des politiques ne peut pas être modifiée après l’installation de l” 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 mise à niveau.

Prise en charge des tables externes et Apache Iceberg™

La Snowflake Native App Framework permet aux fournisseurs de partager des tables externes et Tables Apache Iceberg™ avec les consommateurs. La méthode de partage de ces types de tables est similaire aux tables normales dans la mesure où les fournisseurs ajoutent des vues au script d’installation et accordent des privilèges sur ces vues à un rôle d’application.

Prudence

Les tables externes et Apache Iceberg™ peuvent entraîner des coûts de sortie ou d’entrée supplémentaires pour le fournisseur ou le consommateur si le magasin d’objets de sauvegarde ne se trouve pas dans la même région que l’annonce de l’application.

Les restrictions et exigences suivantes s’appliquent lors du partage d’une table externe ou Iceberg :

  • Les tables et vues externes et Iceberg qui y accèdent sont en lecture seule pour l’application.

  • L’exécution automatique inter-cloud est non prise en charge pour les applications qui partagent des tables externes ou Iceberg.

  • Les consommateurs doivent autoriser l’application à utiliser une table externe ou Iceberg dans le compte du fournisseur avant qu’elle ne soit disponible pour l’application.

L’exécution automatique inter-cloud n’est pas prise en charge

Les tables externes et Iceberg ne sont pas prises en charge pour les applications qui ont des annonces qui permettent l’exécution automatique inter-cloud.

Note

Pour publier une application qui utilise des tables externes ou Iceberg dans plusieurs régions Snowflake, les fournisseurs doivent publier l’annonce dans chaque région.

Si un fournisseur crée une annonce pour une application qui inclut une table externe ou Iceberg, la possibilité de configurer l’exécution automatique inter-cloud est désactivée dans Snowight.

Si un fournisseur tente d’ajouter une version ou un correctif à un paquet d’application qui est le produit de données d’une annonce pour laquelle l’exécution automatique inter-cloud est configurée, Snowflake renvoie une erreur.

Ajouter une table externe ou Iceberg à une application

En plus d’ajouter une table externe ou Iceberg au paquet d’application, les fournisseurs doivent effectuer les opérations suivantes :

Soyez prudent lorsque vous révoquez des privilèges sur des objets partagés ou que vous les supprimez.

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

Révoquer et supprimer des 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.