Freigegebene Dateninhalte zu einem Anwendungspaket hinzufügen

Unter diesem Thema wird beschrieben, wie Sie zu einem Anwendungspaket freigegebene Dateninhalte hinzufügen.

Allgemeine Informationen zur Freigabe von Dateninhalten in einem Anwendungspaket

Mit Snowflake Native App Framework können Sie freigegebene Dateninhalte zu einem Anwendungspaket hinzufügen. Diese Dateninhalte werden für die Verbraucher freigegeben, die Ihre Snowflake Native App nutzen. Dateninhalte, die Sie in einem Anwendungspaket freigeben, werden für alle installierten Instanzen der Snowflake Native App freigegeben.

Freigegebene Dateninhalte sind nicht versioniert, was bedeutet, dass alle Versionen Ihrer Snowflake Native App die gleichen Daten verwenden. Das ist etwas anderes als die Anwendungslogik, die versioniert ist.

Ein Verbraucher kann nicht direkt auf freigegebene Dateninhalte 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 Verbrauchern den Zugriff auf freigegebene Objekte gewähren.

Datenbankobjekte, die für ein Anwendungspaket freigegeben werden können

Mit Snowflake Native App Framework können Anbieter die folgenden Datenbankobjekte zu einem Anwendungspaket hinzufügen:

  • Schemas

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

  • Externe Tabellen werden nicht unterstützt.

Einschränkungen für die Freigabe von Dateninhalten, die Richtlinien enthalten

Anbieter können Tabellen und Ansichten, die Richtlinien enthalten, nicht freigeben. Dazu zählen Maskierungs-, Zeilenzugriffs- und andere Typen von Richtlinien. Diese Einschränkung ist erforderlich, weil das Hinzufügen oder Ändern von Richtlinien auf Seiten des Anbieters zur sofortigen Unterbrechung von in Ausführung befindlichen Instanzen einer Snowflake Native App führen kann.

Außerdem verhalten sich einige Funktionen, die häufig von Richtlinien referenziert werden, wie z. B. CURRENT_USER, im Kontext eines in einem Verbraucherkonto erstellten Anwendungsobjekts anders. Auch wenn eine von einem Anbieter definierte Richtlinie im Konto des Anbieters korrekt funktioniert, funktioniert sie möglicherweise nicht korrekt, wenn der Verbraucher eine Snowflake Native App installiert.

Snowflake empfiehlt, dass Sie Richtlinien für die Proxy-Ansichten definieren, die im Setup-Skript angegeben sind. Das Definieren von Richtlinien für Proxy-Ansichten stellt sicher, dass die Definition der Richtlinien nach der Installation einer 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.

Dateninhalte in einem Anwendungspaket freigeben

Um Dateninhalte in ein Anwendungspaket einzubinden, müssen Sie Berechtigungen für das Objekt erteilen, das für das Anwendungspaket freigegeben werden soll. Wenn Sie ein Objekt zu einem Anwendungspaket hinzufügen, ist das Objekt standardmäßig privat für das Anwendungspaket und nicht sichtbar, wenn die Snowflake Native App installiert wird.

Um Objekte für eine Snowflake Native App sichtbar zu machen, die aus dem Anwendungspaket installiert wurden, 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, sodass es für die Verbraucher freigegeben werden kann. Mit dem zweiten Befehl wird dem Anwendungspaket die SELECT-Berechtigung für die Tabelle shared_table innerhalb von shared_schema erteilt, sodass die Verbraucher die Tabelle abfragen können.

Nachdem ein Verbraucher eine Snowflake Native 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 auch Ansichten für eine Anwendung freigeben, indem Sie ähnliche SQL-Befehle verwenden.

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.

Objekte referenzieren, die außerhalb des Anwendungspakets existieren

Um ein Datenbankobjekt freizugeben, das außerhalb des Anwendungspakets existiert, müssen Sie eine Ansicht innerhalb des Anwendungspakets erstellen, um auf das Objekt zuzugreifen. Sie können Objekte außerhalb des Anwendungspakets nicht direkt freigeben.

Bevor Sie ein Objekt in einer anderen Datenbank freigeben, müssen Sie einer Freigabe im Anwendungspaket die Berechtigung REFERENCE_USAGE für diese Datenbank erteilen, wie im folgenden Beispiel gezeigt:

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

Nachdem Sie die Berechtigung REFERENCE_USAGE für die externen Datenbank erteilt haben, müssen Sie eine Ansicht innerhalb des Anwendungspakets erstellen, die die freigegebenen Objekte referenziert, 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 eine Datenbank, eine Tabelle und ein Schema außerhalb des Anwendungspakets referenziert.

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

Zugriff auf freigegebene Objekte in einem Anwendungspaket gewähren

Die im Setup-Skript definierten und erstellten Datenbankobjekte sind nach der Installation direkt für eine Snowflake Native App zugänglich. Diese Objekte können Funktionen, Prozeduren, neue Ansichtsdefinitionen usw. enthalten.

Auf Datenbankobjekte außerhalb des Anwendungspakets können Verbraucher in der installierten Snowflake Native App nur über eine im Setup-Skript definierte sichere Ansicht zugreifen.

Das folgende Beispiel zeigt, wie Sie eine Ansicht im Setup-Skript definieren.

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

Diese Ansicht greift auf Inhalte in der Ansicht shared_schema.shared_view zu, die für das Anwendungspaket freigegeben sind, wie im Beispiel im vorherigen Abschnitt.

Bemerkung

Wenn Sie versuchen, eine Ansicht zu definieren, die direkt auf freigegebene Dateninhalte zugreift, z. B. auf Datenbankobjekte außerhalb des Anwendungspakets, gibt Snowflake einen Fehler zurück.

Verbrauchern den Zugriff auf freigegebene Objekte gewähren

Standardmäßig sind Datenbankobjekte, die für ein Anwendungspaket freigegeben werden, für den Verbraucher 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.

  • 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

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.

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.