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