Kategorien:

DDL für Benutzer und Sicherheit (Zugriffssteuerung)

GRANT <Berechtigungen> … TO ROLE

Gewährt einer Rolle ein oder mehrere Zugriffsrechte auf ein sicherungsfähiges Objekt. Die Berechtigungen, die vergeben werden können, sind objektspezifisch und werden 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).

Weitere Informationen zu Rollen und zu sicherungsfähigen Objekten finden Sie unter Zugriffssteuerung in Snowflake.

Variationen:

GRANT OWNERSHIP, GRANT <Berechtigung> … TO SHARE

Siehe auch:

REVOKE <Berechtigungen> … FROM ROLE

Syntax

GRANT {  { globalPrivileges         | ALL [ PRIVILEGES ] } ON ACCOUNT
       | { accountObjectPrivileges  | ALL [ PRIVILEGES ] } ON { 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 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 ]

Wobei:

globalPrivileges ::=
  { { CREATE { ROLE | USER | WAREHOUSE | DATABASE | INTEGRATION } } | APPLY MASKING POLICY | EXECUTE TASK | MANAGE GRANTS | MONITOR { EXECUTION | USAGE }  } [ , ... ]
accountObjectPrivileges ::=
-- For RESOURCE MONITOR
  { MODIFY | MONITOR } [ , ... ]
-- For WAREHOUSE
  { MODIFY | MONITOR | USAGE | OPERATE } [ , ... ]
-- For USER
  { MONITOR } [ , ... ]
-- For DATABASE
  { MODIFY | MONITOR | USAGE | CREATE SCHEMA | IMPORTED PRIVILEGES } [ , ... ]
-- For INTEGRATION
  { USAGE | USE_ANY_ROLE } [ , ... ]
schemaPrivileges ::=
  { MODIFY | MONITOR | USAGE | CREATE { TABLE | EXTERNAL TABLE | VIEW | MATERIALIZED VIEW | MASKING POLICY | FILE FORMAT | STAGE | PIPE | STREAM | TASK | SEQUENCE | FUNCTION (UDF) | PROCEDURE } } [ , ... ]
schemaObjectPrivileges ::=
-- For TABLE
  { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } [ , ... ]
-- For VIEW
    SELECT
-- For MATERIALIZED VIEW
    SELECT
-- For internal STAGE
    READ [ , WRITE ]
-- For external STAGE
    USAGE
-- For FILE FORMAT, FUNCTION (UDF or external function), or SEQUENCE
    USAGE
-- For STREAM
    SELECT
-- For TASK
   { MONITOR | OPERATE } [ , ... ]
-- For MASKING POLICY
    APPLY

Weitere Informationen zu den für jeden Objekttyp unterstützten Berechtigungen finden Sie unter Zugriffssteuerungsrechte.

Erforderliche Parameter

Objektname

Gibt den Bezeichner für das Objekt an, für das die Berechtigungen vergeben werden.

Objekttyp

Gibt den Typ des Objekts an (bei Schemaobjekten):

TABLE | EXTERNAL TABLE | VIEW | MATERIALIZED VIEW | STAGE | FILE FORMAT | FUNCTION | PROCEDURE | SEQUENCE | STREAM | TASK

Plural_des_Objekttyps

Pluralform von Objekttyp (z. B. TABLES, VIEWS).

Rollenname

Gibt den Bezeichner für die Empfängerrolle an (d. h. die Rolle, der die Berechtigungen erteilt werden).

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 Zuweisungen jederzeit mit REVOKE <Berechtigungen> … FROM ROLE 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 Zuweisungen finden Sie unter Zukünftige Zuweisungen für Datenbank- oder Schemaobjekte (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

  • Die globale Berechtigung MANAGE GRANTS ist erforderlich, um Berechtigungen für zukünftige Objekte auf Datenbankebene zu erteilen oder zu widerrufen. Standardmäßig haben nur die Rollen SECURITYADMIN und ACCOUNTADMIN die Berechtigung MANAGE GRANTS. Weitere Informationen zu zukünftigen Zuweisungen finden Sie unter Zukünftige Zuweisungen für Datenbank- oder Schemaobjekte (unter diesem Thema).

    Darüber hinaus gilt:

    • In regulären (nicht verwalteten) Schemas kann der Objekteigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für das Objekt) Berechtigungen für die einzelnen Objekte erteilen.

    • In verwalteten Zugriffsschemas verlieren Objekteigentümer die Möglichkeit, Berechtigungsentscheidungen zu treffen. Der Schemaeigentümer (d. h. die Rolle mit der OWNERSHIP-Berechtigung für das Schema) kann Berechtigungen für Objekte im Schema, einschließlich zukünftiger Zuweisungen erteilen.

  • 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 ] erteilt 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 Zugriffssteuerung in Snowflake.

  • 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.

  • Für Schemas und Objekte in Schemas wird eine Option ALL Plural_des_Objekttyps in Container angeboten, mit der allen Objekten desselben Typs innerhalb eines Containers (z. B. Datenbank oder Schema) Berechtigungen erteilt werden können. Dies ist eine praktische Option; intern wird der Befehl in eine Befehlsserie von individuellen 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.

  • Bei der Erteilung von Berechtigungen für eine einzelne UDF müssen Sie ggf. die Datentypen der Argumente der UDF angeben (in Form von UDF-Name ( [ Argumentdatentyp , ... ] )). Dies ist erforderlich, da Snowflake Argumentdatentypen zur Auflösung von UDFs verwendet, die innerhalb eines Schemas den gleichen Namen haben. Ein Beispiel dazu finden Sie unter Beispiele (unter diesem Thema). Weitere Details dazu finden Sie unter Übersicht zu UDFs.

Zukünftige Zuweisungen für Datenbank- oder Schemaobjekte

Die Hinweise in diesem Abschnitt gelten für das Festlegen zukünftiger Zuweisungen für Objekte in einem Schema oder einer Datenbank, d. h. wenn Sie das Schlüsselwort ON FUTURE verwenden.

Hinweise

  • Zukünftige Zuweisungen, die für ein Objekt auf Datenbankebene definiert sind, gelten für alle Objekte dieses Typs, die in Zukunft erstellt werden.

  • Sie müssen zukünftige Zuwendungen für jeden Objekttyp (Schemata, Tabellen, Ansichten, Streams usw.) einzeln definieren.

  • Die mit zukünftigen Berechtigungen definierten Zuweisungen werden automatisch zum Zeitpunkt der Objekterstellung erteilt.

  • Wenn zukünftige Zuweisungen sowohl auf Datenbank- als auch auf Schemaebene definiert werden, haben die Zuweisungen auf Schemaebene Vorrang vor den Zuweisungen auf Datenbankebene, und die Zuweisungen auf Datenbankebene werden ignoriert.

  • Zukünftige Zuweisungen beziehen sich nur auf neue Objekte. Sie müssen einer Rolle für vorhandene Objekte mit dem Befehl GRANT <Berechtigungen> … TO ROLE explizit die gewünschten Berechtigungen erteilen.

  • Zukünftige Zuweisungen auf Datenbankebene gelten sowohl für reguläre als auch für verwaltete Zugriffsschemas.

Klonen von Objekten

  • Wenn eine Datenbank geklont wird, kopieren die Schemas in der geklonten Datenbank die zukünftigen Berechtigungen aus den Quellschemas. Auf diese Weise wird die Konsistenz mit den regulären Objektzuweisungen beibehalten, bei denen nicht die Berechtigungen des Quellobjekts (d. h. der Datenbank) in den Klon kopiert werden, sondern die Berechtigungen für alle untergeordneten Objekte (d. h. Schemas in der Datenbank).

  • Wenn ein Schema geklont wird, werden die zukünftigen Zuweisungen aus dem Quellschema nicht in den Klon kopiert.

  • Wenn ein Objekt in einem Schema geklont wird, werden alle zukünftigen Zuweisungen, die für diesen Objekttyp im Schema definiert sind, auf das geklonte Objekt angewendet, es sei denn, die Option COPY GRANTS wird in der CREATE <Objekt>-Anweisung der Klonoperation angegeben. In diesem Fall behält das neue Objekt die Zugriffsberechtigungen des ursprünglichen Objekts bei und erbt nicht die zukünftigen Zuweisungen für Objekte dieses Typs.

Einschränkungen

  • Zukünftige Zuweisungen werden nicht unterstützt für:

    • Datenfreigabe (Data Sharing)

    • Datenreplikation

  • Zukünftige Zuweisungen 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 Zuweisungen mit den Berechtigungen READ oder WRITE materialisiert.

    • Für externe Stagingbereiche werden nur zukünftige Zuweisungen mit den USAGE-Berechtigungen materialisiert.

  • Zukünftige Zuweisungen werden nicht angewendet, wenn eine Tabelle umbenannt oder ausgetauscht wird.

  • Für jeden sicherungsfähigen Objekttyp ist nicht mehr als eine zukünftige Zuweisungen der Berechtigung OWNERSHIP zulässig.

  • In verwalteten Zugriffsschemas:

    • Eine zukünftige Zuweisung der Berechtigung OWNERSHIP 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 besitzt).

    • Bevor die Eigentümerschaft eines verwalteten Zugriffsschemas auf eine andere Rolle übertragen wird, müssen alle offenen zukünftigen Zuweisungen mit REVOKE <Berechtigungen> … FROM ROLE und den Schlüsselwörtern ON FUTURE widerrufen werden.

Beispiele

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 für zwei UDFs (mit dem gleichen Namen im aktuellen Schema):

GRANT ALL PRIVILEGES ON FUNCTION add5(number) TO ROLE analyst;

GRANT ALL PRIVILEGES ON FUNCTION 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 UDFs.

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;