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

Unter diesem Thema:

Syntax

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 ]

Wobei:

globalPrivileges ::=
  { { CREATE { ROLE | USER | WAREHOUSE | DATABASE | INTEGRATION } } | APPLY MASKING POLICY | APPLY ROW ACCESS POLICY | APPLY TAG | EXECUTE TASK | MANAGE GRANTS | MONITOR { EXECUTION | USAGE }  } [ , ... ]
accountObjectPrivileges ::=
-- For USER
  { MONITOR } [ , ... ]
-- For RESOURCE MONITOR
  { MODIFY | MONITOR } [ , ... ]
-- For WAREHOUSE
  { MODIFY | MONITOR | USAGE | OPERATE } [ , ... ]
-- 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 | ROW ACCESS POLICY | TAG | SEQUENCE | FUNCTION | PROCEDURE | FILE FORMAT | STAGE | PIPE | STREAM | TASK } } [ , ... ]
schemaObjectPrivileges ::=
-- For TABLE
  { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } [ , ... ]
-- For VIEW
  { SELECT | REFERENCES } [ , ... ]
-- For MATERIALIZED VIEW
    SELECT
-- 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 ROW ACCESS POLICY
    APPLY
-- For TAG
    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 | MASKING POLICY | ROW ACCESS POLICY | SEQUENCE | FUNCTION | PROCEDURE | FILE FORMAT | STAGE | PIPE | STREAM | TASK

Plural_des_Objekttyps

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

Beachten Sie, dass die Massenerteilung von Berechtigungen auf Pipes nicht zulässig ist.

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

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

Sicherheitsanforderungen

Erteilen von Berechtigungen für einzelne Objekte

Im Allgemeinen kann entweder ein Objekteigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für das Objekt) oder eine Rolle mit der globalen Berechtigung MANAGE GRANTS anderen Rollen Berechtigungen für das Objekt 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.

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 oder zu entziehen. Nur die Systemrollen SECURITYADMIN und ACCOUNTADMIN haben die MANAGE GRANTS-Berechtigung. Diese Berechtigung kann jedoch benutzerdefinierten Rollen erteilt werden.

Schemaebene

In verwalteten Zugriffsschemas (d. h. Schemas, die mit der CREATE SCHEMA … WITH MANAGED ACCESS-Syntax erstellt wurden) kann nur der Schemaeigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für das Schema) Berechtigungen für zukünftige Objekte des Schemas erteilen oder entziehen.

Bei Standardschemas ist die globale Berechtigung MANAGE GRANTS erforderlich, um Berechtigungen für zukünftige Objekte des Schemas zu erteilen oder zu entziehen.

Weitere Informationen zum Definieren von Zuweisungen für zukünftige Objekte eines bestimmten Typs finden Sie unter Zukünftige Zuweisungen für Datenbank- oder Schemaobjekte (unter diesem Thema).

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

    • Maskierungsrichtlinien und Zeilenzugriffsrichtlinien

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

    • Bevor die Eigentümerschaft eines verwalteten Zugriffsschemas auf eine andere Rolle übertragen werden kann, müssen alle offenen zukünftigen Zuweisungen der OWNERSHIP-Berechtigung unter Verwendung von 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 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 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;