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 {
               ACCOUNT | DATA EXCHANGE LISTING | DATABASE | INTEGRATION
               | NETWORK POLICY | ROLE | SHARE | USER | WAREHOUSE
     }
     | APPLY MASKING POLICY | APPLY ROW ACCESS POLICY | APPLY SESSION POLICY | APPLY TAG | ATTACH POLICY
     | 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
  { 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 | SESSION POLICY
                 | TAG | SEQUENCE | FUNCTION | PROCEDURE | FILE FORMAT | STAGE | PIPE | STREAM | TASK
              }
     | 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 ROW ACCESS POLICY
    APPLY
-- For SESSION POLICY
    APPLY
-- For TAG
    APPLY

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):

TABLE | EXTERNAL TABLE | VIEW | MATERIALIZED VIEW | MASKING POLICY | ROW ACCESS POLICY | SESSION POLICY | SEQUENCE | FUNCTION | PROCEDURE | FILE FORMAT | STAGE | PIPE | STREAM | TASK

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

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> … 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 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 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 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:

    Beispiele dazu finden Sie unter Beispiele (unter diesem Thema) und unter Überladen der Namen gespeicherter Prozeduren.

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 benutzerdefinierten 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 benutzerdefinierten 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 Datenbank d1 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 Schema d1.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 Schema d1.s1 eine neue Tabelle erstellt wird, kommen nur die zukünftigen Berechtigungszuweisungen zur Anwendung, die für Tabellen der Rolle r2 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> … FROM ROLE 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

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 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 gespeicherten Prozeduren 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;
Zurück zum Anfang