Kategorien:

DDL für Benutzer und Sicherheit (Zugriffssteuerung)

REVOKE <Berechtigungen> … FROM ROLE

Entfernt eine oder mehrere Berechtigungen für ein sicherungsfähiges Objekt von einer Rolle. Die Berechtigungen, die widerrufen werden können, sind objektspezifisch und in folgende Kategorien unterteilt:

  • Globale Berechtigungen.

  • Berechtigungen für Kontoobjekte (Ressourcenmonitore, virtuelle Warehouses und Datenbanken).

  • Berechtigungen für Schemata.

  • Berechtigungen für Schemaobjekte (Tabellen, Ansichten, Stagingbereiche, Dateiformate, UDFs und Sequenzen).

Weitere Informationen zu Rollen und zu sicherbaren Objekten finden Sie unter Zugriffssteuerung in Snowflake.

Siehe auch:

GRANT <Berechtigungen> … TO ROLE, GRANT OWNERSHIP

REVOKE <Berechtigung> … FROM SHARE

Unter diesem Thema:

Syntax

REVOKE [ GRANT OPTION FOR ]
    {
       { 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> }
    }
  FROM [ ROLE ] <role_name> [ RESTRICT | CASCADE ]

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 | ATTACH POLICY
     | EXECUTE TASK | IMPORT SHARE | MANAGE GRANTS | MONITOR { EXECUTION | USAGE } | OVERRIDE SHARE RESTRICTIONS
  }
  [ , ... ]
accountObjectPrivileges ::=
-- 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 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, dem die Berechtigungen entzogen werden.

object_type

Gibt den Typ des Objekts an (bei Schemaobjekten):

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

object_type_plural

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

role_name

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

Optionale Parameter

GRANT OPTION FOR

Entfernt, falls angegeben, die Möglichkeit, dass die Empfängerrolle die Berechtigungen einer anderen Rolle erteilt.

Standard: Kein Wert

ON FUTURE

Wenn angegeben, werden nur Berechtigungen entfernt, die für neue (d. h. zukünftige) Schemaobjekte eines angegebenen Typs (z. B. Tabellen oder Ansichten) und nicht für vorhandene Objekte erteilt wurden. Beachten Sie, dass alle Berechtigungen für vorhandene Objekte beibehalten werden.

RESTRICT | CASCADE

Ermittelt, falls angegeben, ob die Widerrufsoperation für die Berechtigungen erfolgreich ist oder fehlschlägt, basierend darauf, ob die Berechtigungen einer anderen Rolle erneut erteilt wurden.

  • RESTRICT: Wenn die zu widerrufende Berechtigung einer anderen Rolle erneut erteilt wurde, schlägt der Befehl REVOKE fehl.

  • CASCADE: Wenn die zu widerrufende Berechtigung erneut erteilt wurde, widerruft der Befehl REVOKE diese abhängigen Berechtigungen rekursiv. Wenn der Zielrolle von einem anderen Berechtigten (parallele Erteilung) die gleiche Berechtigung für ein Objekt erteilt wurde, ist diese Erteilung nicht betroffen und die Zielrolle behält die Berechtigung.

Standard: RESTRICT

Sicherheitsanforderungen

Entziehen von Berechtigungen für einzelne Objekte

Eine aktive Rolle, die eines der folgenden Kriterien erfüllt, oder eine höhere Rolle kann verwendet werden, um anderen Rollen die Berechtigungen für ein Objekt zu entziehen:

  • Die Rolle wird in der GRANTED_BY-Spalte der Ausgabe von SHOW GRANTS als Berechtigungsgeber de Berechtigung identifiziert.

    Wenn für das angegebene Objekt mehrere Instanzen einer Berechtigung erteilt wurden, werden nur die von der aktiven Berechtigungsgeberrrolle erteilten Berechtigungsinstanzen entzogen.

  • Die Rolle hat die globale Berechtigung MANAGE GRANTS.

    Wenn für das angegebene Objekt mehrere Instanzen einer Berechtigung erteilt wurden, werden alle Berechtigungsinstanzen entzogen.

    Beachten Sie, dass nur die Systemrolle SECURITYADMIN und höhere Rollen standardmäßig über die Berechtigung MANAGE GRANTS verfügen. Die Berechtigung kann jedoch auch kundenspezifischen Rollen erteilt werden.

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) oder eine Rolle mit der globalen Berechtigung MANAGE GRANTS oder eine höhere Rolle Berechtigungen für Objekte des Schemas entziehen.

Entziehen von Berechtigungszuweisungen 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 entziehen. Beachten Sie, dass nur die Systemrolle SECURITYADMIN und höhere Rollen standardmäßig über die Berechtigung MANAGE GRANTS verfügen. Die Berechtigung kann jedoch auch 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 entziehen.

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

Nutzungshinweise

  • Eine Berechtigung kann einer Rolle mehrfach von unterschiedlichen Berechtigungsgebern erteilt werden. Eine REVOKE <Berechtigung>-Anweisung widerruft nur Berechtigungszuweisungen, bei denen die aktive Rolle oder eine niedrigere Rolle in einer Hierarchie der Berechtigungsgeber ist. Jede weitere Berechtigungszuweisung einer bestimmten Berechtigung durch andere Berechtigungsgeber wird ignoriert.

    Beachten Sie außerdem, dass eine REVOKE <Berechtigung>-Anweisung auch dann erfolgreich ist, wenn keine Berechtigungen entzogen werden. Eine REVOKE <Berechtigung>-Anweisung gibt nur dann einen Fehler zurück, wenn eine angegebene Berechtigung abhängige Berechtigungszuweisungen hat und in der Anweisung die CASCADE-Klausel fehlt.

  • 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 Schemata und Objekte in Schemata wird eine Option 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 Reihe 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.

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

  • Wenn Sie Berechtigungen für eine einzelne UDF vergeben, müssen Sie die Datentypen für die Argumente, falls vorhanden, für die UDF in der Form udf_name ( [ arg_data_type , ... ] ) angeben. 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.

  • Wenn Sie Berechtigungen für eine einzelne gespeicherte Prozedur vergeben, müssen Sie für die Prozedur die Datentypen für die Argumente, falls vorhanden, in der Form procedure_name ( [ arg_data_type , ... ] ) angeben. Dies ist erforderlich, da Snowflake Argumentdatentypen zur Auflösung von gespeicherten Prozeduren verwendet, die innerhalb eines Schemas den gleichen Namen haben.

  • Zukünftige Berechtigungszuweisungen: Durch das Entziehen von zukünftige Berechtigungszuweisungen werden nur Zuweisungen von Berechtigungen für zukünftige Objekte eines bestimmten Typs gelöscht. Berechtigungen, die vorhandenen Objekten erteilt werden, bleiben erhalten.

    Weitere Informationen dazu finden Sie unter verwaltete Zugriffsschemas.

Beispiele

Widerrufen Sie für die Rolle analyst die erforderlichen Berechtigungen zur Steuerung (d. h. Anhalten und Fortsetzen) des report_wh-Warehouses:

REVOKE OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;

Entziehen Sie der Rolle analyst nur die Zuweisungsoption für die OPERATE-Berechtigung für das Warehouse report_wh. Die Rolle behält die OPERATE-Berechtigung, kann aber anderen Rollen nicht mehr die OPERATE-Berechtigung für das Warehouse erteilen:

REVOKE GRANT OPTION FOR OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;

Widerrufen Sie für die Rolle analyst die Berechtigung SELECT für alle vorhandenen Tabellen im mydb.myschema-Schema:

REVOKE SELECT ON ALL TABLES IN SCHEMA mydb.myschema from ROLE analyst;

Widerrufen Sie für die Rolle analyst alle Berechtigungen für zwei UDFs (mit dem gleichen Namen im aktuellen Schema):

REVOKE ALL PRIVILEGES ON FUNCTION add5(number) FROM ROLE analyst;

REVOKE ALL PRIVILEGES ON FUNCTION add5(string) FROM 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.

Widerrufen Sie alle Berechtigungen für zwei gespeicherte Prozeduren (mit dem gleichen Namen im aktuellen Schema) der Rolle analyst:

REVOKE ALL PRIVILEGES ON PROCEDURE clean_schema(string) FROM ROLE analyst;

REVOKE ALL PRIVILEGES ON procedure clean_schema(string, string) FROM ROLE analyst;

Beachten Sie, dass die beiden gespeicherten Prozeduren unterschiedliche Argumente haben, sodass Snowflake Prozeduren mit dem gleichen Namen eindeutig identifizieren kann.

Widerrufen Sie die Berechtigungen für SELECT und INSERT, die allen zukünftigen Tabellen erteilt wurden, die im mydb.myschema-Schema von der Rolle role1 erstellt werden:

REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema
FROM ROLE role1;
Zurück zum Anfang