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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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:

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.