Dateninhalte freigeben in einer Snowflake Native App¶
In diesem Thema wird beschrieben, wie Anbieter freigegebene Inhalte zu einer Snowflake Native App hinzufügen können.
Bemerkung
Anbieter können eine Snowflake Native App auf der Snowflake Marketplace als begrenzte Testversion veröffentlichen. Wie Sie eine App als begrenzte Testversion veröffentlichen können, erfahren Sie unter Vorbereiten des Freigabeangebots einer begrenzten Testversion.
Informationen zu freigegebenen Daten in einer Snowflake Native App¶
Mit Snowflake Native App Framework können Anbieter freigegebene Dateninhalte zu einer App hinzufügen. Diese Dateninhalte werden für die Verbraucher freigegeben, wenn sie die App installieren und verwenden. Um Inhalte freigeben zu können, müssen Anbieter dem Anwendungspaket Berechtigungen für die freigegebenen Daten erteilen. Die Dateninhalte, die Anbieter mit einem Anwendungspaket freigeben, werden von allen installierten Instanzen der Anwendung gemeinsam genutzt.
Vorsicht
Die freigegebenen Dateninhalte sind nicht versioniert, was bedeutet, dass alle Versionen einer App die gleichen Daten verwenden.
Verbraucher können nicht direkt auf freigegebene Inhalte zugreifen. Stattdessen erstellt ein Anbieter im Setup-Skript eines Anwendungspakets eine sichere Ansicht und gewährt dem Verbraucher Zugriff auf die sichere Ansicht. Weitere Details dazu finden Sie unter Ermöglichen Sie Verbrauchern den Zugriff auf gemeinsame Objekte in einer App.
Datenbankobjekte, die freigegeben werden können¶
Mit Snowflake Native App Framework können Anbieter die folgenden Datenbankobjekte zu einem Anwendungspaket hinzufügen:
Schemas
Tabellen, einschließlich externer und Apache Iceberg™ Tabellen
Ansichten
Bemerkung
Wenn Sie Datenbankobjekte wie Tabellen und Ansichten freigeben, müssen Sie auch das Schema, das diese enthält, freigeben.
Die folgenden Einschränkungen gelten für Tabellen und Ansichten, die in einem Anwendungspaket freigegeben werden:
Tabellen dürfen keine virtuellen Spalten haben, einschließlich Richtlinien, die Java-, Python- oder JavaScript-Code enthalten.
Ansichtsdefinitionen oder mit ihnen verbundene virtuelle Spalten, wie z. B. Richtlinien, dürfen keine Aufrufe von Java, Python oder JavaScript enthalten.
Freigegebene Tabellen können keine temporären, flüchtigen oder transienten Tabellen sein.
Cross-Cloud Auto-Fulfillment wird nicht für Apps unterstützt, die externe oder Apache Iceberg™-Tabellen enthalten.
Einschränkungen für die Freigabe von Dateninhalten, die Richtlinien enthalten¶
Einige Funktionen, auf die häufig in Richtlinien verwiesen wird, wie CURRENT_USER, verhalten sich im Zusammenhang mit einer App, die in einem Verbraucherkonto installiert ist, anders. Auch wenn eine von einem Anbieter definierte Richtlinie im Konto des Anbieters korrekt funktioniert, kann es sein, dass sie im Konto des Verbrauchers nicht korrekt funktioniert, nachdem der Verbraucher die App installiert hat.
Snowflake empfiehlt Anbietern, Richtlinien für die Proxy-Ansichten zu definieren, die im Setup-Skript angegeben werden. Die Definition von Richtlinien in den Proxy-Ansichten stellt sicher, dass die Definition der Richtlinien nach der Installation einer App nicht mehr geändert werden kann. Die Definition von Richtlinien für Proxy-Ansichten stellt außerdem sicher, dass bei Upgrades der laufende Code weiterhin die Richtlinien verwendet, die bei der Erstellung der Version angewendet wurden.
Erteilen von Berechtigungen für freigegebene Inhalte an ein Anwendungspaket¶
Um freigegebene Inhalte in eine App einzubinden, müssen Anbieter Berechtigungen für das Objekt gewähren, das mit Anwendungspaket freigegeben werden soll. Wenn Anbieter ein Objekt zu einem Anwendungspaket hinzufügen, ist das Objekt standardmäßig privat für das Anwendungspaket und nicht sichtbar, wenn die App installiert wird.
Um Objekte für eine aus dem Anwendungspaket installierte App sichtbar zu machen, verwenden Sie den Befehl GRANT … TO SHARE IN APPLICATION PACKAGE wie im folgenden Beispiel gezeigt:
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;
In diesem Beispiel wird mit dem ersten Befehl dem Anwendungspaket die USAGE-Berechtigung für das Schema shared_schema
erteilt. Mit diesem Befehl können Sie das Schema für die Verbraucher freigeben. Mit dem zweiten Befehl wird dem Anwendungspaket die SELECT-Berechtigung für die Tabelle shared_table
innerhalb von shared_schema
erteilt. Mit diesem Befehl können Verbraucher die Tabelle abfragen.
Nachdem ein Verbraucher eine App aus dem Anwendungspaket app_package
installiert hat, kann er auf das shared_schema
zugreifen und die shared_table
abfragen.
Bemerkung
Wenn Sie ein freigegebenes Objekt zu einem Anwendungspaket hinzufügen, müssen Sie auch das Schema freigeben, das das Objekt enthält.
Sie können Ansichten auch für eine App freigeben, indem Sie ähnliche SQL-Befehle verwenden.
Berechtigungen auf Objekte außerhalb des Anwendungspakets erteilen¶
Um ein Datenbankobjekt freizugeben, das außerhalb des Anwendungspakets existiert, müssen Anbieter im Anwendungspaket Ansichten erstellen, die den Zugriff auf das Objekt ermöglichen. Sie können Objekte außerhalb des Anwendungspakets nicht direkt mit der im Konto des Verbrauchers installierten App teilen.
Wenn Sie beispielsweise eine Datenbank freigeben möchten, die sich außerhalb des Anwendungspakets befindet, erteilen Sie dem Anwendungspaket die REFERENCE_USAGE-Berechtigung für die Datenbank, wie im folgenden Beispiel gezeigt:
GRANT REFERENCE_USAGE ON DATABASE other_db
TO SHARE IN APPLICATION PACKAGE app_pkg;
Nach der Gewährung der REFERENCE_USAGE auf der externen Datenbank muss ein Anbieter eine Ansicht innerhalb der Anwendung erstellen, um auf die freigegebenen Objekte zu verweisen, wie im folgenden Beispiel gezeigt:
CREATE VIEW app_pkg.shared_schema.shared_view
AS SELECT c1, c2, c3, c4
FROM other_db.other_schema.other_table;
Dieser Befehl erstellt eine Ansicht im Anwendungspaket, die auf die Datenbank, die Tabelle und das Schema verweist, die sich außerhalb des Anwendungspakets befinden.
Nachdem Sie die Ansicht erstellt haben, müssen Sie der Anwendung Berechtigungen für das Schema und die Ansicht erteilen, wie im folgenden Beispiel gezeigt:
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;
Ermöglichen Sie Verbrauchern den Zugriff auf gemeinsame Objekte in einer App¶
Datenbankobjekte, die im Setup-Skript erstellt werden, sind nach der Installation direkt für die App zugänglich. Dazu gehören Tabellen, Funktionen, Prozeduren und neue Definitionen von Ansichten,
Standardmäßig sind Datenbankobjekte, die gemeinsam mit einem Anwendungspaket genutzt werden, für Verbraucher jedoch nicht sichtbar. Um Verbrauchern die Anzeige und den Zugriff auf Dateninhalte zu ermöglichen, muss das Anwendungspaket eine sichere Ansicht erstellen und dann entsprechende Berechtigungen dafür erteilen.
Dieser Ansatz bietet die folgenden Vorteile:
Das Erstellen der Ansicht im Setup-Skript stellt sicher, dass Änderungen, die direkt an den freigegebenen Objekten vorgenommen werden, wie z. B. neue Spalten, für die Version der Snowflake Native App, die vom Setup-Skript installiert wird, nicht sichtbar sind. Um den Zugriff auf Änderungen an dem Objekt zu ermöglichen, müssen Anbieter eine neue Version oder einen Patch für die App erstellen.
Das Erstellen der Ansicht in einem versionierten Schema stellt sicher, dass jede Version der Snowflake Native App nur die jeweils für diese Version definierte Ansicht enthält. Dies ist wichtig für Upgrade-Szenarios.
Um freigegebene Objekte für einen Verbraucher offenzulegen, muss das Setup-Skript Befehle für folgende Aufgaben enthalten:
Installieren von Ansichten innerhalb eines versionierten Schemas im Anwendungspaket.
Gewähren von Zugriff auf diese Ansicht für den Verbraucher mittels einer Anwendungsrolle
Im folgenden Beispiel wird beschrieben, wie Sie mithilfe von Anwendungsrollen den Zugriff auf freigegebene Objekte innerhalb des Setup-Skripts des Anwendungspakets gewähren:
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;
In diesem Beispiel greift die Ansicht auf den Inhalt von shared_schema.shared_view
zu und gibt ihn für das Anwendungspaket frei.
Bemerkung
Wenn ein Anbieter versucht, eine Ansicht zu definieren, die direkt auf freigegebene Dateninhalte zugreift, wie z. B. auf Datenbankobjekte außerhalb des Anwendungspakets, gibt Snowflake einen Fehler zurück.
Richtlinien für Proxy-Ansichten definieren¶
Snowflake empfiehlt, dass Sie im Setup-Skript Proxy-Ansichten erstellen und Richtlinien zu deren Schutz definieren. Durch das Definieren von Richtlinien zum Schutz der Proxy-Ansicht wird sichergestellt, dass die Definition der Richtlinien nach der Installation der Snowflake Native App nicht mehr geändert werden kann. Das Definieren von Richtlinien für Proxy-Ansichten stellt außerdem sicher, dass bei Upgrades der in Ausführung befindliche Code weiterhin die Richtlinien verwendet, die beim Erstellen der Version angewendet wurden.
Unterstützung für externe und Apache Iceberg™-Tabellen¶
Die Snowflake Native App Framework ermöglicht es Anbietern, externe Tabellen und Apache Iceberg™-Tabellen mit Verbrauchern zu teilen. Die Methode für die Freigabe dieser Art von Tabellen ähnelt der von normalen Tabellen, da die Anbieter dem Skript Ansichten hinzufügen und einer Anwendungsrolle Berechtigungen für diese Ansichten erteilen.
Vorsicht
Externe und Apache Iceberg™-Tabellen können zusätzliche Kosten für den Anbieter oder Verbraucher verursachen, wenn sich der unterstützende Objektspeicher nicht in der gleichen Region befindet wie das Freigabeangebot der App.
Die folgenden Einschränkungen und Anforderungen gelten für die Freigabe einer externen oder Iceberg-Tabelle:
Externe und Iceberg-Tabellen und Ansichten, die auf sie zugreifen, sind für die App schreibgeschützt.
Cross-Cloud Auto-Fulfillment wird nicht für Apps unterstützt, die externe oder Iceberg-Tabellen gemeinsam nutzen.
Verbraucher müssen der App erlauben, eine externe oder Iceberg-Tabelle im Konto des Anbieters zu verwenden, bevor sie für die App verfügbar ist.
Cross-Cloud Auto-Fulfillment wird nicht unterstützt¶
Externe und Iceberg-Tabellen werden für Apps mit Auflistungen, die Cross-Cloud Auto-Fulfillment aktivieren, nicht unterstützt.
Bemerkung
Um eine App, die externe oder Iceberg-Tabellen verwendet, in mehreren Snowflake-Regionen zu veröffentlichen, müssen Anbieter die Auflistung in jeder Region veröffentlichen.
Wenn ein Anbieter ein Freigabeangebot für eine App erstellt, die eine externe Tabelle oder eine Iceberg-Tabelle enthält, ist die Möglichkeit zur Konfiguration von Cross-Cloud Auto-Fulfillment in Snowflake deaktiviert.
Wenn ein Anbieter versucht, eine Version oder einen Patch zu einem Anwendungspaket hinzuzufügen, das das Datenprodukt einer Auflistung ist, die Cross-Cloud Auto-Fulfillment konfiguriert hat, gibt Snowflake einen Fehler zurück.
Hinzufügen einer externen oder Iceberg-Tabelle zu einer App¶
Zusätzlich zum Hinzufügen einer externen oder Iceberg-Tabelle zum Anwendungspaket müssen Anbieter Folgendes tun:
Fügen Sie einen Eintrag in die Manifestdatei ein, um externe und Iceberg-Tabellen zu aktivieren. Weitere Informationen finden Sie unter . Fügen Sie dem Manifest einen Eintrag für externe und Iceberg-Tabellen hinzu.
Anbieter können die Python Permission SDK verwenden, um Verbrauchern die Verwendung von Snowsight zu ermöglichen, damit die App auf eine externe oder Iceberg-Tabelle zugreifen kann. Alternativ können Anbieter die Verbraucher auffordern, die externe oder Iceberg-Tabelle manuell zu aktivieren. Weitere Informationen finden Sie unter Anfrage von Berechtigungen für den Zugriff auf externe und Iceberg-Tabellen.
Vorsicht beim Entziehen von Berechtigungen für oder Löschen von freigegebenen Objekten¶
Seien Sie vorsichtig, wenn Sie Berechtigungen für freigegebene Objekte in einem Anwendungspaket entziehen oder wenn Sie freigegebene Objekte löschen. Wenn die installierte Version einer Snowflake Native App noch Zugriff auf diese Objekte benötigt, kann die Snowflake Native App instabil werden oder ausfallen.
Berechtigungen für freigegebene Objekte entziehen und löschen¶
Seien Sie vorsichtig, wenn Sie einem Anwendungspaket Berechtigungen für freigegeben Objekte entziehen oder freigegebene Objekte löschen. Wenn eine installierte Version der Snowflake Native App noch Zugriff auf diese Objekte benötigt, kann die Snowflake Native App instabil werden oder ausfallen.