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¶
Im Zusammenhang mit einer App werden die folgenden Typen von ausführbaren Dateien unterstützt:
Gespeicherte Prozeduren im Besitz der Anwendung
In Anwendungen mit Containern verfügbare Dienste
Alle diese Typen von ausführbaren Dateien können so konfiguriert werden, dass sie entweder die Rechte des Besitzenden oder die beschränkten Rechte des Aufrufenden verwenden.
- Eigentümerrechte:
 Standardmäßig verwenden ausführbare Dateien innerhalb einer App die Rechte des Besitzenden, was bedeutet, dass sie mit den Berechtigungen ausgeführt werden, die dem Besitzenden der ausführbaren Datei, bei der es sich um die App selbst handelt, erteilt wurden.
Die Rechte des Besitzenden ermöglichen es beispielsweise einer ausführbaren Datei, auf Daten im Konto des Anbietenden zuzugreifen und diese Daten dem Verbrauchenden zu präsentieren. Sie ermöglichen dem Verbrauchenden jedoch keinen direkten Zugriff auf die Daten.
Beispiel: Der Befehl CREATE PROCEDURE erstellt eine gespeicherte Prozedur, die standardmäßig die Rechte des Besitzenden verwendet. Verbrauchende können die gespeicherte Prozedur aufrufen, wenn ihnen der Zugriff über Anwendungsrollen gewährt wurde. Wenn die App über die Berechtigungen zum Ausführen einer Operation verfügt, kann die gespeicherte Prozedur diese Operation ausführen.
Allgemeine Informationen zu Rechten von Besitzenden finden Sie unter Erläuterungen zu gespeicherten Prozeduren mit Aufruferrechten und Eigentümerrechten.
- 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.
Bemerkung
Um zu gewährleisten, dass ausführbare Dateien in einer App sicher sind, unterstützen Snowflake Native Apps keine uneingeschränkten Rechte des Aufrufenden.
Allgemeine Informationen zu beschränkten Aufruferrechten finden Sie unter Beschränkte Aufruferrechte.
Umfang der eingeschränkten Rechte des Aufrufenden in einer App¶
Snowflake empfiehlt, dass Verbrauchende Aufrufenden Rechte auf Container-Ebene gewähren und nicht für bestimmte Objekte in ihrem Konto.
- Schemaebene:
 Gewährt Aufrufenden Rechte für das Schema, aber keine Rechte für Objekte im Schema. Beispiel: Die Gewährung der Berechtigung CALLER USAGE für den Aufrufenden für ein Schema gewährt nur die USAGE-Berechtigung für das Schema. Um Zugriff auf ein bestimmtes Objekt, z. B. eine Funktion, zu gewähren, verwenden Sie GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN SCHEMA.
- Datenbankebene:
 Das Erteilen von Rechten für Aufrufende auf Datenbankebene erlaubt nur der ausführbaren Datei den Zugriff auf die Datenbank und alle Schemas in der Datenbank. Beispiel: Die Gewährung der Berechtigung CALLER USAGE für den Aufrufenden gewährt die USAGE-Berechtigung für die Datenbank. Um jedoch Zugriff auf ein bestimmtes Objekt zu gewähren, müssen Sie den folgenden Befehl verwenden:
GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN DATABASE;
- Kontoebene:
 Das Erteilen von Berechtigungen für Aufrufende auf Kontoebene ermöglicht es einer ausführbaren Datei, Operationen auf Kontoebene durchzuführen. Das Gewähren der Berechtigung CALLER USAGE für den Aufrufenden ermöglicht der ausführbaren Datei nur den Zugriff auf das Konto, sie bietet keinen Zugriff auf Objekte innerhalb des Kontos.
Um den Zugriff auf bestimmte Objekte zu ermöglichen, gewähren Sie Zugriff auf bestimmte Typen von Objekten im Konto. Beispiel: Das Gewähren der Berechtigung CREATE DATABASE für den Aufrufenden ermöglicht es einer ausführbaren Datei, Datenbanken im Konto des Verbrauchenden zu erstellen, wie im folgenden Beispiel gezeigt:
GRANT CALLER CREATE DATABASE ON ACCOUNT TO my_app;
Berechtigungen für Aufrufende auf Kontoebene, die einer App gewährt werden können¶
Anbietende können eine ausführbare Datei in einer App so konfigurieren, dass sie die folgenden Berechtigungen für Aufrufende auf Kontoebene verwendet:
CREATE DATABASE
EXECUTE ALERT
EXECUTE MANAGED TASK
EXECUTE TASK
READ SESSION
VIEW-LINEAGE
Bemerkung
Verbrauchende sollten Vorsicht walten lassen, wenn sie einer App Berechtigungen für Aufrufende auf Kontoebene gewähren.
Bestimmen der Zugriffsanforderungen einer Anwendung¶
Snowflake Native Apps geben Anbietenden Flexibilität bei der Konfiguration des Zugriffs auf die von der App verwalteten Daten und ausführbaren Dateien. Die folgende Tabelle enthält Richtlinien für den zu verwendenden Mechanismus, abhängig von den Zugriffsanforderungen der App:
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ühren Sie Operationen auf Kontoebene aus, wie z. B. das Erstellen von Datenbanken oder das Ausführen von Aufgaben.  | 
Verwenden Sie eingeschränkte Rechte für Aufrufende, die es dem Verbrauchenden ermöglichen, den Zugriff zu aktivieren, um diese Aktionen auszuführen.  | 
Fügen Sie die Eigenschaft restricted_callers_rights zum Manifest hinzu¶
Wenn Sie als Anbietender eine ausführbare Datei in einer App so konfigurieren, dass sie eingeschränkte Rechte für Aufrufende verwendet, empfiehlt Snowflake, die restricted_callers_rights zur Manifest-Datei hinzuzufügen, wie im folgenden Beispiel gezeigt:
restricted_callers_rights:
  enabled: true
  description: This app includes stored procedure that uses restricted caller's rights.
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 eingeschränkte Rechte für den Aufrufenden nutzt, verwenden Sie die Klausel EXECUTE AS RESTRICTED CALLER, wenn die App eine ausführbare Datei erstellt, 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;
Weitere Informationen dazu finden Sie unter CREATE PROCEDURE.
Verwenden eines Services mit eingeschränkten Rechten für den Aufrufenden in einer App mit Containern¶
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 App mit Containern kann ein Snowpark Container Services-Service mit den Berechtigungen der App (Rechte des Besitzenden) oder mit den Berechtigungen des Aufrufenden des Service (eingeschränkte Rechte des Aufrufenden) ausgeführt werden. Die Rolle service _owner_ anstelle der Rolle service _user_ ist jedoch die App. Bei der Gewährung von Berechtigungen für Aufrufende gibt ein Verbrauchender die App durch Verwendung der Klausel TO APPLICATION an, wie im folgenden Beispiel gezeigt:
GRANT CALLER USAGE ON DATABASE consumer_db TO APPLICATION hello_snowflake_app;
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 Dateien mit eingeschränkten Rechten für Aufrufende können nicht auf die internen Objekte der App 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 Rechten für den Besitzenden, die der Anwendung gehören, ausführbare Dateien mit eingeschränkten Rechten für Aufrufende aufrufen können, müssen diese ausführbaren Dateien ebenfalls der App gehören. So kann beispielsweise die gespeicherte Prozedur einer App mit den Rechten des Besitzenden nicht die gespeicherte Prozedur eines Verbrauchenden mit eingeschränkten Rechten für den Aufrufenden 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 eingeschränkten Rechten für den Aufrufenden blenden auch interne Informationen über die App aus. Dies gilt insbesondere für die folgenden Befehle, Ansichten und Funktionen, bei denen ein Großteil der Informationen ausgeblendet sind:
Befehl DESCRIBE PROCEDURE
Die Ansicht PROCEDURES des Information Schema
Die Ansicht PROCEDURES des Account Information Schema
Funktion GET_DDL
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, denen die MANAGE CALLER GRANTS-Berechtigung zugewiesen wurde, einer ausführbaren Datei Rechte für den Aufrufenden gewähren. Während des Entwicklungszyklus einer Snowflake Native App müssen Anbietende die App häufig erstellen und löschen. Snowflake Native Apps bieten einen Mechanismus zur Erstellung von Rechten für Aufrufende für eine App 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;
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.