Beschränkte Aufruferrechte¶
Eine ausführbare Datei wie eine gespeicherte Prozedur oder ein Snowpark Container Services-Dienst kann mit Berechtigungen des Eigentümers der ausführbaren Datei (Eigentümerrechte) oder des Aufrufers der ausführbaren Datei (Aufruferrechte) ausgeführt werden. Wenn eine ausführbare Datei mit den Aufruferrechten ausgeführt wird, kann die ausführbare Datei eine Aktion nur ausführen, wenn der Aufrufer die Berechtigung hat, diese Aktion außerhalb des Kontexts der ausführbaren Datei auszuführen.
Beschränkte Aufruferrechte erlauben es einer ausführbaren Datei, mit den Aufruferrechten ausgeführt zu werden, schränken aber ein, mit welchen Berechtigungen des Aufrufers die ausführbare Datei läuft. Bei eingeschränkten Aufruferrechten kann eine ausführbare Datei nicht mit einer bestimmten Berechtigung ausgeführt werden, es sei denn, ein Administrator erlaubt dies ausdrücklich.
Über Aufruferberechtigungen¶
Administratoren verwenden Aufruferberechtigungen um festzulegen, mit welchen Berechtigungen des Aufrufers eine ausführbare Datei ausgeführt werden kann. Wenn zum Beispiel ein Aufrufer die Berechtigungen SELECT und INSERT für eine Tabelle hat, es aber keine Aufruferberechtigung gibt, die es der ausführbaren Datei erlaubt, mit der INSERT-Berechtigung ausgeführt zu werden, dann kann die ausführbare Datei mit eingeschränkten Aufruferrechten nicht mit der INSERT-Berechtigung ausgeführt werden, wenn sie auf die Tabelle zugreift.
Eine Aufruferberechtigung gibt keine Berechtigungen, sondern schränkt ein, welche der vorhandenen Berechtigungen des Aufrufers verwendet werden, wenn er die ausführbare Datei ausführt. Wenn z. B. ein Aufrufer eine gespeicherte Prozedur ausführt, um aus einer Tabelle auszuwählen, muss der Aufrufer bereits die SELECT-Berechtigung auf der Tabelle haben und das Aufruferrecht muss die Ausführung der gespeicherte Prozedur mit der SELECT-Berechtigung auszuführen.
Aufruferberechtigungen werden vom Administrator für die Rolle gewährt, die eine ausführbare Datei besitzt. Die Aufruferberechtigungen werden auf Objekte wie Tabellen und Warehouses gewährt, auf die die ausführbare Datei zugreift. Wenn die ausführbare Datei versucht, auf die Objekte zuzugreifen, werden die mit dem Eigentümer der ausführbaren Datei verbundenen Aufruferberechtigungen verwendet, um festzustellen, welche der Aufruferberechtigungen für den Vorgang verwendet werden können.
Ausführbare Dateien, die mit eingeschränkten Aufruferrechten laufen¶
Der Benutzer, der eine ausführbare Datei erstellt, bestimmt, ob die ausführbare Datei mit den Eigentümerrechten, Aufruferrechten oder mit eingeschränkten Aufruferrechten ausgeführt wird. Wenn sie sich für eingeschränkte Zugriffsrechte entscheiden, muss jede von der ausführbaren Datei benötigte Berechtigung in einer oder mehreren Aufruferberechtigungen festgelegt werden, die dem Eigentümer der ausführbaren Datei erteilt werden.
Bei einer gespeicherten Prozedur legt der Parameter EXECUTE AS
fest, ob die Prozedur mit Eigentümerrechten, Aufruferrechten oder mit eingeschränkten Aufruferrechten ausgeführt wird. Im Folgenden finden Sie ein Beispiel für die Definition einer Prozedur, die mit eingeschränkten Aufruferrechten ausgeführt wird:
CREATE OR REPLACE PROCEDURE sp_pi()
RETURNS FLOAT NOT NULL
LANGUAGE JAVASCRIPT
EXECUTE AS RESTRICTED CALLER
AS
$$
RETURN 3.1415926;
$$
;
Eine Liste der Einschränkungen für ausführbare Dateien, die mit eingeschränkten Rechten ausgeführt werden, finden Sie unter Beschränkungen einer ausführbaren Datei mit eingeschränkten Aufruferberechtigungen.
Aufruferrechte gewähren¶
Aufruferrechte werden auf Objekten wie Tabellen und Datenbanken gewährt, auf die eine ausführbare Datei zugreift. Aufruferberechtigungen werden für die Rolle oder Datenbankrolle gewährt, die die ausführbare Datei besitzt.
Die GRANT-Anweisung, die ein Administrator verwendet, um eine Aufruferberechtigung zu erteilen, hat verschiedene Variationen, je nachdem, wie Sie die Aufruferberechtigungen erteilen möchten. Die Variationen sind wie folgt:
GRANT CALLER — Gewährt Aufruferberechtigungen für ein bestimmtes Objekt. Jede durch die Anweisung erzeugte Aufruferberechtigung erlaubt der ausführbaren Datei, mit einer bestimmten Berechtigung ausgeführt zu werden.
GRANT ALL CALLER PRIVILEGES — Gewährt Aufruferberechtigungen für ein bestimmtes Objekt. Die durch die Anweisung erzeugten Aufruferberechtigungen erlauben der ausführbaren Datei, mit allen Berechtigungen des Aufrufers zu laufen.
GRANT INHERITED CALLER — Gewährt Aufruferberechtigungen für alle aktuellen und zukünftigen Objekte desselben Typs, wenn sie ein gemeinsames Schema, eine Datenbank oder ein Konto haben. Jede durch die Anweisung erzeugte Aufruferberechtigung erlaubt der ausführbaren Datei, mit einer bestimmten Berechtigung ausgeführt zu werden.
GRANT ALL INHERITED CALLER PRIVILEGES — Gewährt Aufruferberechtigungen für alle aktuellen und zukünftigen Objekte desselben Typs, wenn sie ein gemeinsames Schema, eine Datenbank oder ein Konto haben. Die durch die Anweisung erzeugten Aufruferberechtigungen erlauben der ausführbaren Datei, mit allen Berechtigungen des Aufrufers zu laufen.
Eine einzige GRANT-Anweisung kann dazu führen, dass dem Eigentümer der ausführbaren Datei mehrere Aufruferrechte gewährt werden. Beispielsweise führt GRANT CALLER INSERT, SELECT … zu zwei Aufruferberechtigung, eine für die Berechtigung INSERT und eine für die Berechtigung SELECT. In ähnlicher Weise führt die GRANT ALL INHERITED CALLER PRIVILEGES-Anweisung dazu, dass der Aufrufer jede Berechtigung erhält, die für den angegebenen Objekttyp erteilt werden kann.
Die vollständige Syntax, einschließlich der Parameter, für die Gewährung einer Aufruferberechtigung finden Sie unter GRANT CALLER.
Beispiele¶
Im Folgenden finden Sie Beispiele dafür, wie ein Administrator mithilfe von Aufruferberechtigungen steuern kann, mit welchen Aufruferrechten die ausführbare Datei ausgeführt werden kann.
Ausführbare Dateien, die owner_role
gehören und auf eine Ansicht v1
zugreifen, können mit der SELECT-Berechtigung auf der Ansicht ausgeführt werden:
GRANT CALLER SELECT ON VIEW v1 TO owner_role;
Ausführbare Dateien, die owner_role
gehören und auf eine Tabelle im db.sch
-Schema zugreifen, können mit den Berechtigungen SELECT und INSERT des Aufrufers ausgeführt werden.
GRANT INHERITED CALLER SELECT, INSERT ON ALL TABLES IN SCHEMA db.sch TO ROLE owner_role;
Ausführbare Dateien, die owner_role
gehören und auf Schemas im aktuellen Konto zugreifen, können mit allen Aufruferberechtigungen auf den Schemas ausgeführt werden.
GRANT ALL INHERITED CALLER PRIVILEGES ON ALL SCHEMAS IN ACCOUNT TO ROLE owner_role;
Ausführbare Dateien, die der Datenbankrolle db.r
gehören und auf die Tabelle db.sch1.t1
zugreifen, können mit der SELECT-Berechtigung in der Tabelle ausgeführt werden.
GRANT CALLER SELECT ON TABLE db.sch1.t1 TO DATABASE ROLE db.r;
Ausführbare Dateien, die owner_role
gehören und auf die Datenbank my_db
zugreifen, können mit allen Aufruferberechtigungen auf der Datenbank ausgeführt werden.
GRANT ALL CALLER PRIVILEGES ON DATABASE my_db TO ROLE owner_role;
Widerrufen einer Aufruferberechtigung¶
Administratoren verwenden die REVOKE-Anweisung, um Berechtigungen zu widerrufen, die einem Eigentümer einer ausführbaren Datei zuvor durch eine Aufruferberechtigung erteilt wurden. Diese Anweisung gibt es in verschiedenen Variationen, je nachdem, wie Sie die Aufruferberechtigungen widerrufen wollen.
REVOKE CALLER — Widerrufen bestimmter Berechtigungen für ein bestimmtes Objekt.
REVOKE ALL CALLER PRIVILEGES — Widerrufen aller Berechtigungen für ein bestimmtes Objekt. Die ausführbare Datei kann nicht mit den Berechtigungen des Aufrufers ausgeführt werden, wenn sie versucht, auf das Objekt zuzugreifen.
REVOKE INHERITED CALLER — Entzieht allen aktuellen und zukünftigen Objekten desselben Typs die Aufruferberechtigung, wenn sie ein gemeinsames Schema, eine gemeinsame Datenbank oder ein gemeinsames Konto haben. Nur Berechtigungen in einer bestimmten Liste werden widerrufen.
REVOKE ALL INHERITED CALLER PRIVILEGES — Entzieht allen aktuellen und zukünftigen Objekten desselben Typs die Aufruferberechtigung, wenn sie ein gemeinsames Schema, eine gemeinsame Datenbank oder ein gemeinsames Konto haben. Alle Berechtigungen werden widerrufen; die ausführbare Datei kann nicht mit den Berechtigungen des Aufrufers ausgeführt werden.
Die Ausführung eines REVOKE INHERITED CALLER- oder REVOKE ALL INHERITED CALLER PRIVILEGES- Befehls widerruft nicht eine Aufruferberechtigung, die für ein bestimmtes Objekt innerhalb des Kontos, der Datenbank oder des Schemas mit einer GRANT CALLER-Anweisung erteilt wurde. Wenn Sie z. B. eine Aufruferberechtigung für die Tabelle my_db.sch1.t1
direkt erteilt haben, wird durch die Ausführung von REVOKE INHERITED CALLER SELECT ON ALL TABLES IN DATABASE my_db ...
die Aufruferberechtigung für t1
nicht widerrufen.
Die vollständige Syntax, einschließlich der Parameter, für das Widerrufen einer Aufruferberechtigung finden Sie unter REVOKE CALLER.
Beispiele¶
Ausführbare Dateien, die owner_role
gehören, können nicht mehr mit den Aufruferberechtigungen ausgeführt werden, wenn sie auf Ansichten im aktuellen Konto zugreifen.
REVOKE ALL INHERITED CALLER PRIVILEGES ON ALL VIEWS IN ACCOUNT FROM ROLE owner_role;
Ausführbare Dateien, die owner_role
gehören, können nicht mehr mit der Berechtigung USAGE ausgeführt werden, wenn sie auf das Schema db.sch1
zugreifen.
REVOKE CALLER USAGE ON SCHEMA db.sch1 FROM ROLE owner_role;
Aufruferberechtigungen auflisten¶
Benutzer können den Befehl SHOW CALLER GRANTS verwenden, um Aufruferberechtigungen aufzulisten. Sie können diesen Befehl verwenden, um alle Aufruferberechtigungen aufzulisten, die einem bestimmten Eigentümer erteilt wurden (SHOW CALLER GRANTS TO …) oder um alle Aufruferberechtigungen für ein bestimmtes Objekt aufzulisten (SHOW CALLER GRANTS ON …).
Wenn Sie den Befehl SHOW CALLER GRANTS ON … für ein bestimmtes Objekt ausführen, kann jede Zeile eine der folgenden Angaben enthalten:
Eine Aufruferberechtigung wurde direkt auf das Objekt gewährt.
Zum Beispiel enthält die Ausgabe von
SHOW CALLER GRANTS ON TABLE db.sch.t1
eine Zeile, wenn der AdministratorGRANT CALLER SELECT ON TABLE db.sch.t1
ausgeführt hat.Das Objekt hat eine Aufruferberechtigung geerbt.
Zum Beispiel enthält die Ausgabe von
SHOW CALLER GRANTS ON TABLE db1.sch.t1
eine Zeile, wenn der AdministratorGRANT INHERITED CALLER SELECT ON ALL TABLES IN SCHEMA db1.sch
ausgeführt hat.Das Objekt wurde mit einer IN-Klausel spezifiziert, sodass andere Objekte, die es enthält, Aufruferrechte geerbt haben.
Zum Beispiel enthält die Ausgabe von
SHOW CALLER GRANTS ON ACCOUNT
eine Zeile, wenn der AdministratorGRANT INHERITED CALLER SELECT ON ALL TABLES IN ACCOUNT
ausgeführt hat.Das Objekt ist ein Vorfahre eines Objekts mit einer vererbten Aufruferberechtigung sowie der Nachfahre des Objekts, das mit einer IN-Klausel angegeben wurde, die zur Vererbung führte.
Zum Beispiel enthält
SHOW CALLER GRANTS ON SCHEMA my_db.sch1
eine Zeile, wenn der AdministratorGRANT INHERITED CALLER SELECT ON ALL TABLES IN DATABASE my_db
ausgeführt hat.
Bedingte Ausgabe¶
Die Ausgabe des Befehls SHOW CALLER GRANTS variiert je nach den Berechtigungen der ausführenden Rolle. Wenn ein Benutzer SHOW CALLER GRANTS ausführt, enthalten die Ergebnisse nur Objekte, auf die er mindestens eine Berechtigung hat. Er kann die Existenz eines Objekts nur dann feststellen, wenn er darauf zugreifen kann, selbst wenn es eine Berechtigung für den Aufruf gibt.
Nehmen wir zum Beispiel an, es gibt eine Aufruferberechtigung für die Datenbanken DB1
und DB2
. Nehmen wir nun an, die Rolle R2
hat die Berechtigung USAGE auf DB1
, aber keine Berechtigung auf DB2
. Wenn R2
SHOW CALLER GRANTS ausführt, zeigt die Ausgabe, dass es eine Aufruferberechtigung für DB1
gibt, aber DB2
wird nicht aufgeführt. Wenn R2
Berechtigungen für beide Datenbanken hätte, würde die Ausgabe zeigen, dass die Aufruferberechtigung für beide Datenbanken gilt.
Beispiele¶
Listet Aufruferberechtigungen, die in der Tabelle t1
gewährt wurden.
SHOW CALLER GRANTS ON TABLE t1;
Listet alle Aufruferberechtigungen auf, die für das aktuelle Konto gewährt wurden. Dazu gehören Berechtigungen direkt auf dem Konto (GRANT CALLER … ON ACCOUNT) und Berechtigungen für alle Objekte in einem Konto (GRANT INHERITED CALLER … IN ACCOUNT).
SHOW CALLER GRANTS ON ACCOUNT;
Listet alle Aufruferrechte auf, die der Datenbankrolle db.owner_role
gewährt wurden.
SHOW CALLER GRANTS TO DATABASE ROLE db.owner_role;
Beschränkung der Aufruferberechtigungen¶
Aufruferberechtigungen werden nicht repliziert oder geklont.
Beschränkungen einer ausführbaren Datei mit eingeschränkten Aufruferberechtigungen¶
Wenn eine ausführbare Datei mit eingeschränkten Aufrufer ausgeführt wird, unterliegt sie den folgenden Einschränkungen.
Externe Stagingbereiche
Ausführbare Datei kann keinen externen Stagingbereich ohne Angabe einer Speicherintegration erstellen.
Ausführbare Datei kann nicht in einen externen Stagingbereich kopiert werden.
Ausführbare Datei kann nicht in eine externe URL kopieren, ohne dass eine Speicherintegration angegeben wird.
Gespeicherte Prozeduren
Die ausführbare Datei kann keine Snowflake-Objekte erstellen, die mit Eigentümerrechten , Aufruferrechten oder mit eingeschränkten Aufruferrechten ausgeführt werden. Sie kann zum Beispiel keine gespeicherte Prozedur erstellen.
Ausführbare Datei kann die Rechte, mit denen eine gespeicherte Prozedur ausgeführt wird, nicht ändern. Zum Beispiel kann die ausführbare Datei eine gespeicherte Prozedur nicht von Eigentümerrechten zu Aufruferrechten Aufrufers ändern.
Rollen und Berechtigungen
Ausführbare Datei kann die Befehle USE ROLE und USE SECONDARY ROLES nicht ausführen.
Ausführbare Datei kann keine GRANT-Anweisungen verwenden, um Berechtigungen zu erteilen und Aufruferberechtigungen zu gewähren.
Die ausführbare Datei kann keine REVOKE-Anweisungen verwenden, um Berechtigungen zu widerrufen.
Referenzen
Ausführbare Datei kann keine transienten und persistenten Referenzen erstellen.
Sitzungsbezogene Operationen
Ausführbare Datei kann keine SET- oder UNSET-Befehle ausführen.
Ausführbare Datei kann SHOW VARIABLES oder SHOW PARAMETERS nicht ausführen.
Ausführbare Datei kann keine Sitzungsvariablen verwenden oder lesen.
Ausführbare Datei kann ALTER SESSION nicht ausführen.
Ausführbare Datei kann keine in der Sitzung enthaltenen temporären Objekte erstellen.
Ausführbare Datei kann USE DATABASE, USE SCHEMA oder USE WAREHOUSE nicht ausführen.