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;
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;
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;
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;
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;
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 :
Ajoutez une entrée au fichier manifeste pour activer les tables externes et Iceberg. Voir Ajouter une entrée pour les tables externes et Iceberg au manifeste pour plus d’informations.
Les fournisseurs peuvent utiliser Python Permission SDK pour permettre aux consommateurs d’utiliser Snowsight pour permettre à l’application d’accéder à une table externe ou Iceberg. Alternativement, les fournisseurs peuvent demander aux consommateurs d’activer manuellement la table externe ou Iceberg. Voir Demander des autorisations pour accéder aux tables externes et Iceberg pour plus d’informations.
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.