Hinzufügen von freigegebenen Dateninhalten zu einem Anwendungspaket

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 Offenlegen freigegebener Objekte für Verbraucher.

Datenbankobjekte, die an 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.

Freigabe von Dateninhalten in einem Anwendungspaket

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.

Referenzieren von Objekten, 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

Gewähren von Zugriff auf freigegebene Objekte in einer Anwendung

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.

Offenlegen freigegebener Objekte für Verbraucher

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

Wie das Snowflake Native App Framework freigegebene Inhalte schützt

Um die Vertraulichkeit und die Integrität der Dateninhalte eines Anbieters sicherzustellen, implementiert das Snowflake Native App Framework die folgende Einschränkung:

  • Freigegebene Objekte einer installierten Snowflake Native App sind schreibgeschützt.

  • Die freigegebenen Objekte sind für Verbraucher nicht direkt sichtbar. Objekte sind nur über eine sichere Ansicht zugänglich, die installiert wird, wenn das Setup-Skript während der Installation der Snowflake Native App ausgeführt wird.

  • Nur der Anbieter kann die freigegebenen Inhalte aktualisieren.

  • Nur die folgenden Objekte können für Instanzen einer installierten Snowflake Native App mit bestimmten Berechtigungen freigegeben werden:

    • Schemas: Nur die USAGE-Berechtigung kann für freigegebene Inhalte einer Snowflake Native App erteilt werden.

    • Tabellen: Nur die SELECT-Berechtigung kann für freigegebene Inhalte einer Snowflake Native App erteilt werden. Tabellen mit definierten Richtlinien (Zeilenzugriff, Maskierung, Tag-basiert usw.) können nicht freigegeben werden. Richtlinien können für die Objekte definiert werden, wenn diese für die Verbraucher zugänglich sind.

    • Ansichten: Für freigegebene Inhalte eines Anwendungspakets kann nur die SELECT-Berechtigung erteilt werden. Ansichten mit definierten Richtlinien, einschließlich Zeilenzugriff, Maskierung, Tag-basiert usw., können nicht freigegeben werden.

Bemerkung

Die Ansicht bzw. alle Ansichten, aus denen sie zusammengesetzt ist, dürfen keine JavaScript-, Java-, Python- oder Scala-Funktionen enthalten.

Weitere Informationen dazu finden Sie unter Offenlegen freigegebener Objekte für Verbraucher.

Einschränkungen für die Freigabe von Dateninhalten mit Richtlinien

Anbieter können Tabellen und Ansichten mit Richtlinien nicht freigeben, einschließlich Maskierung, Zeilenzugriff und anderen Richtlinientypen. 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 Anwendungspakets anders. Auch wenn eine von einem Anbieter definierte Richtlinie im Konto des Anbieters korrekt funktioniert, funktioniert sie möglicherweise nicht, wenn der Verbraucher die Snowflake Native App installiert.

Snowflake empfiehlt, dass Sie Richtlinien für die ##Hilfsansichten definieren, die im Setup-Skript angegeben sind. Die Definition 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. 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.

Entziehen und Löschen von Berechtigungen für freigegebene Objekte

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.