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