Verwenden von Eigentümerrechten und beschränkten Aufruferrechten in einer Anwendung

Unter diesem Thema wird beschrieben, wie Sie eine Anwendung so konfigurieren, dass sie Eigentümerrechte und beschränkte Aufruferrechte verwendet.

Allgemeine Informationen zu Eigentümerrechten und beschränkten Aufruferrechten in einer Anwendung

Innerhalb einer Snowflake Native App werden ausführbare Dateien entweder mit Eigentümerrechten oder beschränkten Aufruferrechten ausgeführt. Im Rahmen von Snowflake Native App Framework werden die folgenden Arten von ausführbaren Dateien unterstützt:

  • Gespeicherte Prozeduren im Besitz der Anwendung

  • In Anwendungen mit Containern verfügbare Dienste

Eigentümerrechte:

Ausführbare Dateien, die Eigentümerrechte verwenden, werden mit den Berechtigungen ausgeführt, die dem Eigentümer der ausführbaren Datei gewährt wurden. Standardmäßig verwenden ausführbare Dateien innerhalb einer App Eigentümerrechte. Bei einer Anwendung ist der Eigentümer der ausführbaren Datei die Anwendung selbst.

Der Befehl CREATE PROCEDURE zum Beispiel erstellt eine gespeicherte Prozedur, die standardmäßig Eigentümerrechte verwendet. Verbraucher können die gespeicherte Prozedur aufrufen, wenn sie über Anwendungsrollen Zugriff erhalten haben. Wenn die Anwendung über die Berechtigungen zur Durchführung einer Aufgabe verfügt, kann die gespeicherte Prozedur diese Operation ausführen.

Informationen zu Eigentümerrechten finden Sie unter Erläuterungen zu gespeicherten Prozeduren mit Aufruferrechten und Eigentümerrechten.

Aufruferrechte:

Ausführbare Programme, die Aufruferrechte verwenden, werden mit den Berechtigungen ausgeführt, die dem Aufrufer gewährt wurden. Aus Sicherheitsgründen unterstützt Snowflake Native App Framework jedoch keine ausführbaren Dateien mit Aufruferrechten.

Beschränkte Aufruferrechte:

Beschränkte Aufruferrechte erlauben es einer ausführbaren Datei, mit Aufruferrechten zu laufen, schränken aber die Berechtigungen des Aufrufers ein, mit denen die Datei läuft. Bei beschränkten Aufruferrechten kann eine ausführbare Datei, die einer Anwendung gehört, nicht mit einer bestimmten Berechtigung ausgeführt werden, es sei denn, ein Administrator im Benutzerkonto erlaubt dies ausdrücklich mit dem Befehl GRANT CALLER.

Der Einfachheit halber werden ausführbare Dateien, die mit beschränkten Aufruferrechten ausgeführt werden, auch als RCR bezeichnet.

Allgemeine Informationen zu beschränkten Aufruferrechten finden Sie unter Beschränkte Aufruferrechte.

Bestimmen der Zugriffsanforderungen einer Anwendung

Snowflake Native App Framework bietet Anbietern Flexibilität bei der Konfiguration des Zugriffs auf die von der Anwendung verwalteten Daten und ausführbaren Dateien. Die folgende Tabelle enthält Richtlinien dafür, welcher Mechanismus je nach den Zugriffsanforderungen der Anwendung zu verwenden ist:

Zugriff erforderlich

Wie Sie Zugriff erhalten

Daten oder Funktionen, die der Anwendung gehören

Verwenden Sie standardmäßig Eigentümerrechte. Anbieter müssen keinen Zugriff vom Verbraucher anfordern, um der Anwendung gehörende Objekte zu erstellen oder darauf zuzugreifen.

Bestimmte Tabellen, Ansichten oder Funktionen im Kundenkonto

Fordern Sie Referenzen vom Verbraucher an

Tabellen, Ansichten, Funktionen und Zeilenrichtlinien, die einem anderen Benutzer oder einer anderen Rolle gehören.

Verwenden Sie eingeschränkte Aufruferrechte, die es dem Verbraucher erlauben, den Zugriff auf diese Objekte zu ermöglichen.

Breiter Zugang zu Datenbanken im Besitz der Verbraucher

Verwenden Sie Datenbank-Rollenberechtigungen

Abfragen, die auf eine Kombination aus Verbraucher- und Anbieterdaten zugreifen

Verwenden Sie Referenzen und Eigentümerrechte gemeinsam

Objekte auf Kontoebene

Stellen Sie benutzerdefinierte Skripts bereit, die GRANT-Befehle enthalten, um Berechtigungen für bestimmte Objekte zu erteilen.

Fügen Sie die Eigenschaft restricted_callers_rights zum Manifest hinzu

Wenn Sie als Anbieter eine ausführbare RCR-Datei in eine Anwendung einbinden, empfiehlt Snowflake, die restricted_callers_rights zur Manifestdatei hinzuzufügen wie im folgenden Beispiel gezeigt:

restricted_callers_rights:
  enabled: true
  description: This app includes stored procedure that uses restricted caller's rights.
Copy

Wenn restricted_callers_rights vorhanden ist, obwohl es nicht erforderlich ist, und wenn enabled auf true, gesetzt ist, enthält Snowsight einen Abschnitt namens Restricted caller’s rights im Freigabeangebot der Anwendung.

Konfigurieren Sie eine Prozedur oder einen Dienst, um beschränkte Aufruferrechte zu verwenden

Um eine gespeicherte Prozedur zu erstellen, die beschränkte Aufruferrechte verwendet, verwenden Sie die Klausel EXECUTE AS RESTRICTED CALLER wie im folgenden Beispiel gezeigt:

CREATE OR REPLACE PROCEDURE CORE.HELLO()
RETURNS STRING
LANGUAGE SQL
EXECUTE AS RESTRICTED CALLER
AS
BEGIN
  RETURN 'Hello Snowflake!';
END;
Copy

Weitere Informationen dazu finden Sie unter CREATE PROCEDURE.

Verwendung eines Dienstes für beschränkte Aufruferrechte in einer Anwendung

Weitere Informationen zur Konfiguration eines Dienstes für die Verwendung beschränkter Aufruferrechte finden Sie unter Konnektivität mit Snowflake aus einem Container heraus unter Verwendung Aufruferrechte.

In einer Anwendung kann ein Snowpark Container Services-Dienst mit den Berechtigungen der Anwendung (Eigentümerrechte) oder mit den Berechtigungen des Aufrufers des Dienstes (beschränkte Aufruferrechte) ausgeführt werden. Die Rolle des Diensteigentümers ist jedoch die Anwendung und nicht die Rolle des Benutzers des Dienstes. Bei der Gewährung von Aufruferberechtigungen gibt ein Verbraucher die Anwendung mithilfe der TO APPLICATION-Klausel an wie im folgenden Beispiel gezeigt:

GRANT CALLER USAGE ON DATABASE consumer_db TO APPLICATION hello_snowflake_app;
Copy

In diesem Beispiel kann der Dienst mit beschränkten Aufruferrechten ausgeführt werden, um die Rolle des Aufrufers für den Zugriff auf die Datenbank consumer_db zu verwenden.

Beschränkungen von beschränkten Aufruferrechten in einer Anwendung

Die folgenden Beschränkungen gelten bei der Verwendung beschränkter Aufruferrechte innerhalb einer Anwendung.

Allgemeine Beschränkungen von beschränkten Aufruferrechten

Allgemeine Beschränkungen von beschränkten Aufruferrechten für ausführbare Dateien siehe Beschränkungen einer ausführbaren Datei mit eingeschränkten Aufruferberechtigungen. Die dort aufgeführten Beschränkungen gelten auch für Anwendungen.

Zusätzliche Beschränkungen für Anwendungen

Zusätzlich zu den allgemeinen Beschränkungen von beschränkten Aufruferrechten gelten für Anwendungen die folgenden Beschränkungen:

  • Unbeschränkte Aufruferrechte werden für ausführbare Dateien in einer Anwendung nicht unterstützt.

  • Die folgenden Befehle können nicht ausgeführt werden:

    • SHOW ROLES

    • SHOW USERS

    • SHOW [CALLER] GRANTS

    • SHOW AVAILABLE LISTINGS

  • Die folgenden Funktionen können nicht ausgeführt werden:

    • ALL_USER_NAMES

    • GET_USERS_FOR_COLLABORATION

    • CURRENT_IP_ADDRESS

    • CURRENT_AVAILABLE_ROLES

    • CURRENT_SECONDARY_ROLES

    • SYSTEM$ALLOWLIST (oder die veraltete SYSTEM$WHITELIST)

  • Persistente Referenzfunktionen werden nicht unterstützt.

  • Relative Pfade zu Objekten in einem Stagingbereich werden nicht unterstützt.

  • Ausführbare RCR-Dateien können nicht auf die internen Objekte der Anwendung zugreifen.

  • Ausführbare Dateien mit Eigentümerrechten können keine anderen ausführbaren Dateien aufrufen, die unbeschränkte Aufruferrechte verwenden.

    Obwohl ausführbare Dateien mit Eigentümerrechten, die der Anwendung gehören, ausführbare RCR-Dateien aufrufen können, müssen die ausführbaren RCR-Dateien ebenfalls der Anwendung gehören. Zum Beispiel kann eine gespeicherte Prozedur einer Anwendung mit Eigentümerrechten nicht die gespeicherte Prozedur eines Verbrauchers mit beschränkten Aufruferrechten aufrufen.

Aufrufen von Abrechnungsfunktionen aus einer Prozedur mit beschränkten Aufruferrechten in einer Anwendung

Abrechnungsfunktionen wie SYSTEM$CREATE_BILLING_EVENT oder SYSTEM$CREATE_BILLING_EVENTS können nicht von einer ausführbaren RCR-Datei aufgerufen werden. Um diese Funktionen von einer ausführbaren RCR-Datei in einer Anwendung aufzurufen, fügen Sie diese Funktionen in eine Prozedur mit Eigentümerrechten ein und rufen die Prozedur von der Prozedur mit beschränkten Aufruferrechten aus auf.

Schutz des geistigen Eigentums und beschränkte Aufruferrechte

Apps, die gespeicherte Prozeduren mit Eigentümerrechten enthalten, halten Informationen über die interne Implementierung der Anwendung zurück. Weitere Informationen dazu finden Sie unter Schutz des geistigen Eigentums von Anbietern.

Gespeicherte Prozeduren mit beschränkten Aufruferrechten halten auch interne Informationen über die Anwendung zurück. Dies gilt insbesondere für die folgenden Befehle, Ansichten und Funktionen, bei denen ein Großteil der Informationen geschwärzt ist:

Im Gegensatz zu gespeicherten Prozeduren mit Eigentümerrechten werden bei Prozeduren mit beschränkten Aufruferrechten jedoch keine Informationen aus dem Abfrageverlauf und den Abfrageprofilen entfernt.

Entwicklung von Anwendungen, die beschränkte Aufruferrechte nutzen

Im Allgemeinen können nur Rollen, die über die Berechtigung MANAGE CALLER GRANTS verfügen, einer ausführbaren Datei Aufruferberechtigungen gewähren. Während des Entwicklungszyklus einer Snowflake Native App müssen Anbieter die Anwendung jedoch möglicherweise häufig erstellen und wieder löschen. Snowflake Native App Framework bietet einen Mechanismus zur Erstellung von Aufruferberechtigungen für eine Anwendung im Entwicklungsmodus.

Anbieter können eine Rolle ohne die MANAGE CALLER GRANTS verwenden, um einer Anwendung Aufruferberechtigungen zu gewähren. Dazu müssen jedoch alle folgenden Punkte erfüllt sein:

  • Die Anwendung muss im Entwicklungsmodus erstellt werden.

  • Die aktuelle Rolle hat in der Rollenhierarchie die Rolle des Anwendungseigentümers.

  • Die Rolle des Anwendungseigentümers verfügt über eine Obermenge der gewährten Aufruferberechtigungen.

    Bemerkung

    Die Berechtigung ALL CALLER PRIVILEGES ist eine Obermenge aller Aufruferberechtigungen.

Das Erfordernis der Obermenge kann nicht durch INHERITED CALLER-Berechtigungen erfüllt werden, die normalerweise alle aktuellen und zukünftigen Objekte eines bestimmten Typs unter einem bestimmten Container abdecken. Weitere Informationen dazu finden Sie unter GRANT CALLER.

Um diese Anforderung zu erfüllen, müssen die gewährten Aufruferberechtigungen ausdrücklich durch die Aufruferberechtigungen abgedeckt sein, die der Rolle des Anwendungseigentümers gewährt werden.

Anwendungsentwicklern ermöglichen, einer Anwendung im Entwicklungsmodus Aufruferrechte zu gewähren

Damit eine Rolle des Anwendungseigentümers einer Anwendung im Entwicklungsmodus einen bestimmten Satz von Aufruferberechtigungen gewähren kann, muss ein Benutzer mit der Rolle ACCOUNTADMIN oder einer Rolle, welche die Berechtigung MANAGE CALLER GRANTS erhalten hat, zunächst die Aufruferberechtigungen gewähren, die den Satz von Berechtigungen für die Rolle des Anwendungseigentümers abdecken.

Das folgende Beispiel zeigt, wie Sie die erforderlichen Aufruferberechtigungen für die Datenbanken eines Kontos vergeben:

GRANT ALL INHERITED CALLER PRIVILEGES
  ON ALL DATABASES IN ACCOUNT
  TO ROLE app_dev_role;
Copy

Dieser Befehl gewährt der Rolle app_dev_role alle Aufruferberechtigungen auf alle Datenbanken.

Bemerkung

Dieser Befehl gewährt nur Aufruferberechtigungen. Er erlaubt dem Anwendungsentwickler nicht, auf ein Objekt zuzugreifen, auf das er nicht bereits Zugriff hat.

Zusätzliche Sicherheitsmaßnahmen für Anwendungen im Entwicklungsmodus

Wenn Sie Anwendungsentwicklern Eigentümerrollen ohne die Berechtigung MANAGE CALLER GRANTS zugestehen, wird der Entwicklungsprozess rationalisiert, aber es ergeben sich auch potenzielle Sicherheitsrisiken. Um diese Risiken zu minimieren, prüft Snowflake, ob der Anwendungseigentümer weiterhin über die erforderlichen Aufruferberechtigungen für die Anwendung verfügt. Wenn der Anwendungseigentümer die erforderlichen Aufruferberechtigungen verliert, verliert sie die Anwendung ebenfalls.