GRANT <Berechtigungen>¶
Gewährt einer Rolle oder Datenbankrolle ein oder mehrere Zugriffsrechte auf ein sicherungsfähiges Objekt. Die Berechtigungen, die erteilt werden können, sind objektspezifisch.
Weitere Informationen zum Erteilen von Berechtigungen für sicherungsfähige Objekte an eine Freigabe finden Sie unter GRANT <Berechtigung> … TO SHARE.
- Rollen
Die Berechtigungen, die Rollen erteilt werden können, sind in die folgenden Kategorien unterteilt:
Globale Berechtigungen
Berechtigungen für Kontoobjekte (Ressourcenmonitore, virtuelle Warehouses und Datenbanken).
Berechtigungen für Schemas
Berechtigungen für Schemaobjekte (Tabellen, Ansichten, Stagingbereiche, Dateiformate, UDFs und Sequenzen).
- Datenbankrollen
Die Berechtigungen, die Datenbankrollen erteilt werden können, sind in die folgenden Kategorien unterteilt:
Berechtigungen für die Datenbank, die die Datenbankrolle enthält.
Berechtigungen für Schemas der Datenbank, die die Datenbankrolle enthält.
Berechtigungen für Schemaobjekte (Tabellen, Ansichten, Stagingbereiche, Dateiformate, UDFs und Sequenzen) in der Datenbank, die die Datenbankrolle enthält.
Weitere Informationen zu Rollen und zu sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.
- Variationen:
- Siehe auch:
Syntax¶
Kontorollen:
GRANT { { globalPrivileges | ALL [ PRIVILEGES ] } ON ACCOUNT
| { accountObjectPrivileges | ALL [ PRIVILEGES ] } ON { USER | RESOURCE MONITOR | WAREHOUSE | DATABASE | INTEGRATION } <object_name>
| { schemaPrivileges | ALL [ PRIVILEGES ] } ON { SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> }
| { schemaPrivileges | ALL [ PRIVILEGES ] } ON { FUTURE SCHEMAS IN DATABASE <db_name> }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
}
TO [ ROLE ] <role_name> [ WITH GRANT OPTION ]
Datenbankrollen:
GRANT { { CREATE SCHEMA| MODIFY | MONITOR | USAGE } [ , ... ] } ON DATABASE <object_name>
| { schemaPrivileges | ALL [ PRIVILEGES ] } ON { SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> }
| { schemaPrivileges | ALL [ PRIVILEGES ] } ON { FUTURE SCHEMAS IN DATABASE <db_name> }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
| { schemaObjectPrivileges | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
}
TO DATABASE ROLE <database_role_name> [ WITH GRANT OPTION ]
Wobei:
globalPrivileges ::= { CREATE { ACCOUNT | DATA EXCHANGE LISTING | DATABASE | INTEGRATION | NETWORK POLICY | ROLE | SHARE | USER | WAREHOUSE } | APPLY MASKING POLICY | APPLY PASSWORD POLICY | APPLY ROW ACCESS POLICY | APPLY SESSION POLICY | APPLY TAG | ATTACH POLICY | EXECUTE ALERT | EXECUTE TASK | IMPORT SHARE | MANAGE GRANTS | MONITOR { EXECUTION | USAGE } | OVERRIDE SHARE RESTRICTIONS } [ , ... ]accountObjectPrivileges ::= -- For USER { MONITOR } [ , ... ] -- For RESOURCE MONITOR { MODIFY | MONITOR } [ , ... ] -- For WAREHOUSE { MODIFY | MONITOR | USAGE | OPERATE } [ , ... ] -- For DATABASE { CREATE { DATABASE ROLE | SCHEMA } | IMPORTED PRIVILEGES | MODIFY | MONITOR | USAGE } [ , ... ] -- For INTEGRATION { USAGE | USE_ANY_ROLE } [ , ... ]schemaPrivileges ::= { MODIFY | MONITOR | USAGE | CREATE { ALERT | EXTERNAL TABLE | FILE FORMAT | FUNCTION | MASKING POLICY | MATERIALIZED VIEW | PASSWORD POLICY | PIPE | PROCEDURE | ROW ACCESS POLICY | SECRET | SESSION POLICY | SEQUENCE | STAGE | STREAM | TAG | TABLE | TASK | VIEW } | ADD SEARCH OPTIMIZATION } [ , ... ]schemaObjectPrivileges ::= -- For TABLE { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } [ , ... ] -- For VIEW { SELECT | REFERENCES } [ , ... ] -- For MATERIALIZED VIEW { SELECT | REFERENCES } [ , ... ] -- For SEQUENCE, FUNCTION (UDF or external function), PROCEDURE, or FILE FORMAT USAGE -- For internal STAGE READ [ , WRITE ] -- For external STAGE USAGE -- For PIPE { MONITOR | OPERATE } [ , ... ] -- For STREAM SELECT -- For TASK { MONITOR | OPERATE } [ , ... ] -- For MASKING POLICY APPLY -- For PASSWORD POLICY APPLY -- For ROW ACCESS POLICY APPLY -- For SESSION POLICY APPLY -- For TAG APPLY -- For ALERT OPERATE -- For SECRET USAGE
Weitere Informationen zu den für jeden Objekttyp unterstützten Berechtigungen finden Sie unter Zugriffssteuerungsrechte.
Erforderliche Parameter¶
object_name
Gibt den Bezeichner für das Objekt an, für das die Berechtigungen vergeben werden.
object_type
Gibt den Typ des Objekts an (bei Schemaobjekten):
ALERT | EXTERNAL TABLE | FILE FORMAT | FUNCTION | MASKING POLICY | MATERIALIZED VIEW | PASSWORD POLICY | PIPE | PROCEDURE | ROW ACCESS POLICY | SECRET | SESSION POLICY | SEQUENCE | STAGE | STREAM | TABLE | TASK | VIEW
object_type_plural
Pluralform von Objekttyp
object_type
(z. B.TABLES
,VIEWS
).Beachten Sie, dass die Massenerteilung von Berechtigungen auf Pipes nicht zulässig ist.
role_name
Gibt den Bezeichner für die Empfängerrolle an (d. h. die Rolle, der die Berechtigungen erteilt werden).
database_role_name
Gibt den Bezeichner für die Empfänger-Datenbankrolle an (d. h. die Rolle, der die Berechtigungen erteilt werden). Wenn der Bezeichner nicht vollqualifiziert ist (im Format
db_name.database_role_name
), sucht der Befehl die Datenbankrolle in der aktuellen Datenbank der Sitzung.Alle Berechtigungen sind auf die Datenbank beschränkt, die die Datenbankrolle enthält, sowie auf andere Objekte in derselben Datenbank.
Optionale Parameter¶
ON FUTURE
Gibt an, dass Berechtigungen für neue (d. h. zukünftige) Datenbank- oder Schemaobjekte eines angegebenen Typs (z. B. Tabellen oder Ansichten) und nicht für vorhandene Objekte erteilt werden. Beachten Sie, dass zukünftige Berechtigungszuweisungen jederzeit mit REVOKE <Berechtigungen> und den Schlüsselwörtern ON FUTURE widerrufen werden können. Alle Berechtigungen, die für vorhandene Objekte erteilt wurden, bleiben erhalten. Weitere Informationen zu zukünftigen Berechtigungszuweisungen finden Sie unter Zukünftige Berechtigungszuweisungen zu Datenbank- oder Schemaobjekten (unter diesem Thema).
WITH GRANT OPTION
Wenn angegeben, erlaubt es der Empfängerrolle, die Berechtigungen auch anderen Rollen zu erteilen.
Standard: Kein Wert (die Empfängerrolle kann die Berechtigungen nicht anderen Rollen erteilen)
Bemerkung
Der Parameter WITH GRANT OPTION unterstützt nicht die Berechtigung IMPORTED PRIVILEGES. Weitere Informationen dazu finden Sie unter Erteilen von Berechtigungen für eine freigegebene Datenbank.
Nutzungshinweise¶
Um einer Rolle die OWNERSHIP-Berechtigung für ein Objekt (oder alle Objekte eines bestimmten Typs in einem Schema) zu erteilen und damit den Besitz des Objekts von einer Rolle auf eine andere Rolle zu übertragen, verwenden Sie stattdessen GRANT OWNERSHIP. Der Befehl GRANT OWNERSHIP hat eine andere Syntax.
Mehrere Berechtigungen für den gleichen Objekttyp können in einer einzigen GRANT-Anweisung angegeben werden (wobei jede Berechtigung durch Kommas getrennt wird). Alle anwendbaren Berechtigungen für den angegebenen Objekttyp können auch mit dem speziellen Schlüsselwort
ALL [ PRIVILEGES ]
vergeben werden. Beachten Sie jedoch, dass nur Berechtigungen, die die Rolle innehat und erteilen kann, die den Befehl GRANT ausführt, tatsächlich der Zielrolle gewährt werden. Für alle Berechtigungen, die nicht gewährt werden konnten, wird eine Warnmeldung ausgegeben.Berechtigungen, die einer bestimmten Rolle erteilt werden, werden automatisch an alle anderen Rollen vererbt, denen die Rolle zugewiesen wird, sowie an alle anderen übergeordneten Rollen innerhalb der Rollenhierarchie. Weitere Details dazu finden Sie unter Übersicht zur Zugriffssteuerung.
Bei Datenbanken gilt die Berechtigung IMPORTED PRIVILEGES nur für gemeinsam genutzte Datenbanken (d. h. Datenbanken, die aus einer Freigabe erstellt wurden). Weitere Details dazu finden Sie unter Datenverbraucher. Beachten Sie, dass die Berechtigung IMPORTED PRIVILEGES einer Datenbankrolle nicht erteilt werden kann.
Für Schemas und Objekte in Schemas wird eine Option
ALL object_type_plural in container
angeboten, um Berechtigungen für alle Objekte desselben Typs innerhalb des Containers (d. h. Datenbank oder Schema) zu vergeben. Dies ist eine praktische Option; intern wird der Befehl in eine Folge von einzelnen GRANT-Befehlen für jedes Objekt erweitert. Es sind nur Objekte betroffen, die derzeit innerhalb des Containers vorhanden sind.Beachten Sie jedoch, dass im Snowflake-Modell die Massenerteilung von Berechtigungen keine empfohlene Praxis ist. Stattdessen empfiehlt Snowflake, eine gemeinsame Rolle anzulegen und mit dieser Rolle Objekte zu erstellen, die automatisch für alle Benutzer zugänglich sind, denen die Rolle zugewiesen wurde.
In verwalteten Zugriffsschemas:
Die Berechtigung OWNERSHIP für Objekte kann nur an eine untergeordnete Rolle des Schemaeigentümers übertragen werden.
Für Stagingbereiche:
USAGE gilt nur für externe Stagingbereiche.
READ | WRITE gilt nur für interne Stagingbereiche. Um die WRITE-Berechtigung für einen internen Stagingbereich erteilen zu können, muss zuerst die READ-Berechtigung für den Stagingbereich erteilt werden.
Weitere Informationen zu externen und internen Stagingbereichen finden Sie unter CREATE STAGE.
Beim Erteilen von Berechtigungen für eine einzelne UDF oder gespeicherte Prozedur müssen Sie die Datentypen der Argumente, falls vorhanden, mit der unten dargestellten Syntax angeben:
<udf_or_stored_procedure_name> ( [ <arg_data_type> [ , ... ] ] )
Snowflake verwendet Argumentdatentypen zur Auflösung von UDFs oder gespeicherten Prozeduren, die innerhalb eines Schemas den gleichen Namen haben. Weitere Informationen dazu finden Sie unter Überladen von Namen.
Anforderungen an die Zugriffssteuerung¶
- Erteilen von Berechtigungen für einzelne Objekte
Im Allgemeinen kann eine Rolle mit einer der folgenden Berechtigungen anderen Rollen Berechtigungen für ein Objekt erteilen:
Die globale Berechtigung MANAGE GRANTS
Nur die Systemrollen SECURITYADMIN und ACCOUNTADMIN haben die MANAGE GRANTS-Berechtigung. Diese Berechtigung kann jedoch kundenspezifischen Rollen erteilt werden.
Die OWNERSHIP-Berechtigung für das Objekt. Beim Erteilen von Berechtigungen für Schemaobjekte (z. B. Tabelle und Ansichten) muss die Rolle außerdem über die Berechtigung USAGE für die übergeordnete Datenbank und das übergeordnete Schema verfügen.
Wenn einer Rolle eine Berechtigung erteilt wurde und dabei in der GRANT <Berechtigungen> … TO ROLE-Anweisung der Parameter WITH GRANT OPTION enthalten war, kann die Rolle diese Berechtigung auch anderen Rollen erteilen.
In verwalteten Zugriffsschemas (d. h. Schemas, die mit der CREATE SCHEMA … WITH MANAGED ACCESS-Syntax erstellt wurden) verlieren Objekteigentümer die Möglichkeit, Entscheidungen über das Erteilen von Berechtigungen zu treffen. Nur der Schemaeigentümer (d. h. die Rolle mit der OWNERSHIP-Berechtigung für das Schema) oder eine Rolle mit der Berechtigung MANAGE GRANTS kann Berechtigungen für Objekte im Schema erteilen.
Beachten Sie, dass eine Rolle mit der globalen Berechtigung MANAGE GRANTS der aktuellen (Berechtigungsgeber-)Rolle keine zusätzlichen Berechtigungen erteilen kann.
- Definieren von Zuweisungen für zukünftige Objekte eines bestimmten Typs
Datenbankebene
Die globale Berechtigung MANAGE GRANTS ist erforderlich, um Berechtigungen für zukünftige Objekte einer Datenbank zu erteilen. Nur die Systemrollen SECURITYADMIN und ACCOUNTADMIN haben die MANAGE GRANTS-Berechtigung. Diese Berechtigung kann jedoch kundenspezifischen Rollen erteilt werden.
Schemaebene
In verwalteten Zugriffsschemas (d. h. Schemas, die mit der CREATE SCHEMA … WITH MANAGED ACCESS-Syntax erstellt wurden) kann entweder der Schemaeigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für das Schema) oder eine Rolle mit der globalen Berechtigung MANAGE GRANTS Berechtigungen für zukünftige Objekte des Schemas erteilen.
Bei Standardschemas ist die globale Berechtigung MANAGE GRANTS erforderlich, um Berechtigungen für zukünftige Objekte des Schemas zu erteilen.
Weitere Informationen zum Definieren von Zuweisungen für zukünftige Objekte eines bestimmten Typs finden Sie unter Zukünftige Berechtigungszuweisungen zu Datenbank- oder Schemaobjekten (unter diesem Thema).
Zukünftige Berechtigungszuweisungen zu Datenbank- oder Schemaobjekten¶
Die Hinweise in diesem Abschnitt gelten für das Festlegen zukünftiger Berechtigungszuweisungen zu Objekten in einem Schema oder einer Datenbank, d. h. wenn Sie das Schlüsselwort ON FUTURE verwenden.
Weitere Informationen dazu finden Sie unter verwaltete Zugriffsschemas.
Hinweise¶
Wenn zukünftige Berechtigungszuweisungen zu demselben Objekttyp sowohl für eine Datenbank als auch für ein Schema in dieser Datenbank definiert werden, haben die Zuweisungen auf Schemaebene Vorrang vor den Zuweisungen auf Datenbankebene, und die Zuweisungen auf Datenbankebene werden ignoriert. Dieses Verhalten gilt für Berechtigungen auf zukünftige Objekte, die einer Rolle oder verschiedenen Rollen erteilt werden.
Mit den folgenden Anweisungen werden beispielsweise unterschiedliche Berechtigungen für Objekte desselben Typs auf Datenbank- und Schemaebene erteilt.
Der Rolle
r1
wird die SELECT-Berechtigung für alle zukünftigen Schemas der Datenbankd1
erteilt:GRANT SELECT ON FUTURE TABLES IN DATABASE d1 TO ROLE r1;
Der Rolle
r2
werden die Berechtigungen INSERT und DELETE für alle zukünftigen Tabellen erteilt, die im Schemad1.s1
erstellt werden:GRANT INSERT,DELETE ON FUTURE TABLES IN SCHEMA d1.s1 TO ROLE r2;
Die zukünftigen Berechtigungszuweisungen der Rolle
r1
werden vollständig ignoriert. Wenn im Schemad1.s1
eine neue Tabelle erstellt wird, kommen nur die zukünftigen Berechtigungszuweisungen zur Anwendung, die für Tabellen der Roller2
definiert wurden.Zukünftige Berechtigungszuweisungen auf Datenbankebene gelten sowohl für reguläre als auch für verwaltete Zugriffsschemas.
Einschränkungen¶
Für jeden sicherungsfähigen Objekttyp ist nur eine zukünftige Berechtigungszuweisung der OWNERSHIP-Berechtigung zulässig.
Für Objekte der folgenden Typen können keine zukünftige Berechtigungszuweisungen definiert werden:
Externe Funktion
Richtlinienobjekte:
Maskierungsrichtlinie
Zeilenzugriffsrichtlinie
Sitzungsrichtlinie
Tag
Eine zukünftige Berechtigungszuweisungen von OWNERSHIP-Berechtigungen für Objekte eines angegebenen Typs in einer Datenbank gilt nicht für neue Objekte in einem verwalteten Zugriffsschema.
Die folgenden Einschränkungen gelten für zukünftige Berechtigungszuweisungen für Objekte in einem verwalteten Zugriffsschema:
Eine zukünftige Berechtigungszuweisung der OWNERSHIP-Berechtigung für Objekte kann nur auf eine untergeordnete Rolle des Schemaeigentümers angewendet werden (d. h. auf die Rolle, die die OWNERSHIP-Berechtigung für das Schema hat).
Bevor die Eigentümerschaft eines verwalteten Zugriffsschemas auf eine andere Rolle übertragen werden kann, müssen alle offenen zukünftigen Berechtigungszuweisungen der OWNERSHIP-Berechtigung unter Verwendung von REVOKE <Berechtigungen> und den Schlüsselwörtern ON FUTURE widerrufen werden.
Zukünftige Berechtigungszuweisungen werden nicht angewendet, wenn eine Tabelle umbenannt oder ausgetauscht wird.
Zukünftige Berechtigungszuweisungen werden für benannte Stagingbereiche mit den folgenden Einschränkungen unterstützt:
Die Berechtigung WRITE kann nicht ohne die Berechtigung READ angegeben werden.
Die Berechtigung READ kann nicht widerrufen werden, wenn die Berechtigung WRITE vorhanden ist.
Für interne Stagingbereiche werden nur zukünftige Berechtigungszuweisungen mit den Berechtigungen READ oder WRITE materialisiert.
Für externe Stagingbereiche werden nur zukünftige Berechtigungszuweisungen mit den USAGE-Berechtigungen materialisiert.
Beispiele¶
Rollen¶
Erteilen Sie der analyst
-Rolle die erforderlichen Berechtigungen zur Steuerung (d. h. Anhalten und Fortsetzen) des report_wh
-Warehouse:
GRANT OPERATE ON WAREHOUSE report_wh TO ROLE analyst;
Wie im vorherigen Beispiel, aber erlaubt der Rolle analyst
auch das Erteilen von Berechtigungen für andere Rollen:
GRANT OPERATE ON WAREHOUSE report_wh TO ROLE analyst WITH GRANT OPTION;
Erteilen Sie der Rolle analyst
die Berechtigung SELECT für alle vorhandenen Tabellen im mydb.myschema
-Schema:
GRANT SELECT ON ALL TABLES IN SCHEMA mydb.myschema to ROLE analyst;
Erteilen Sie der Rolle analyst
alle Berechtigungen an zwei UDFs im Schema mydb.myschema
:
GRANT ALL PRIVILEGES ON FUNCTION mydb.myschema.add5(number) TO ROLE analyst; GRANT ALL PRIVILEGES ON FUNCTION mydb.myschema.add5(string) TO ROLE analyst;Beachten Sie, dass die UDFs unterschiedliche Argumente haben, sodass Snowflake UDFs mit gleichem Namen eindeutig identifizieren kann. Weitere Informationen zur Benennung von UDFs finden Sie unter Übersicht zu benutzerdefinierten Funktionen.
Erteilen Sie der Rolle analyst
die Nutzungsberechtigung für eine im Schema mydb.myschema
gespeicherte Prozedur:
GRANT USAGE ON PROCEDURE mydb.myschema.myprocedure(number) TO ROLE analyst;Beachten Sie, dass Namen von gespeicherten Prozeduren (wie UDF-Namen) überladen werden können. Daher müssen Sie den Datentyp des/der Argumente(s) angeben. Weitere Informationen zum Überladen von Namen finden Sie unter Überladen von Namen.
Erteilen Sie die Berechtigung für das Erstellen von materialisierte Ansichten im angegebenen Schema:
GRANT CREATE MATERIALIZED VIEW ON SCHEMA mydb.myschema TO ROLE myrole;
Erteilen Sie der Rolle role1
die Berechtigungen SELECT und INSERT für alle zukünftigen Tabellen, die im mydb.myschema
-Schema erstellt werden:
GRANT SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema TO ROLE role1;
Erteilen Sie der Rolle role1
die Berechtigung USAGE für alle zukünftigen Schemas in der mydb
-Datenbank:
use role accountadmin; grant usage on future schemas in database mydb to role role1;
Datenbankrollen¶
Erteilen Sie der Datenbankrolle mydb.dr1
die SELECT-Berechtigung für alle vorhandenen Tabellen im mydb.myschema
-Schema:
GRANT SELECT ON ALL TABLES IN SCHEMA mydb.myschema TO DATABASE ROLE mydb.dr1;
Erteilen Sie der Datenbankrolle mydb.dr1
alle Berechtigungen an zwei UDFs im Schema mydb.myschema
:
GRANT ALL PRIVILEGES ON FUNCTION mydb.myschema.add5(number) TO DATABASE ROLE mydb.dr1; GRANT ALL PRIVILEGES ON FUNCTION mydb.myschema.add5(string) TO DATABASE ROLE mydb.dr1;Beachten Sie, dass die UDFs unterschiedliche Argumente haben, sodass Snowflake UDFs mit gleichem Namen eindeutig identifizieren kann. Weitere Informationen zur Benennung von UDFs finden Sie unter Übersicht zu benutzerdefinierten Funktionen.
Erteilen Sie der Datenbankrolle mydb.dr1
die Nutzungsberechtigung an einer im Schema mydb.myschema
gespeicherten Prozedur:
GRANT USAGE ON PROCEDURE mydb.myschema.myprocedure(number) TO DATABASE ROLE mydb.dr1;Beachten Sie, dass Namen von gespeicherten Prozeduren (wie UDF-Namen) überladen werden können. Daher müssen Sie den Datentyp des/der Argumente(s) angeben. Weitere Informationen zum Überladen von gespeicherten Prozeduren finden Sie unter Überladen von Namen.
Erteilen Sie der Datenbankrolle mydb.dr1
die Berechtigung zum Erstellen von materialisierte Ansichten im angegebenen Schema:
GRANT CREATE MATERIALIZED VIEW ON SCHEMA mydb.myschema TO DATABASE ROLE mydb.dr1;
Erteilen Sie der Datenbankrolle mydb.dr1
die Berechtigungen SELECT und INSERT für alle zukünftigen Tabellen, die im Schema mydb.myschema
erstellt werden:
GRANT SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema TO DATABASE ROLE mydb.dr1;
Erteilen Sie der Rolle role1
die Berechtigung USAGE für alle zukünftigen Schemas in der mydb
-Datenbank:
USE ROLE ACCOUNTADMIN; GRANT USAGE ON FUTURE SCHEMAS IN DATABASE mydb TO DATABASE ROLE mydb.dr1;