REVOKE <Berechtigungen>¶
Entfernt eine oder mehrere Berechtigungen für ein sicherungsfähiges Objekt von einer Kontorolle oder einer Datenbankrolle. Die Berechtigungen, die entzogen werden können, sind objektspezifisch.
- Rollen:
Die Berechtigungen, die Rollen entzogen 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 entzogen werden können, sind objektspezifisch und in folgende 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.
Syntax¶
Kontorollen:
REVOKE [ GRANT OPTION FOR ]
{
{ globalPrivileges | ALL [ PRIVILEGES ] } ON ACCOUNT
| { accountObjectPrivileges | ALL [ PRIVILEGES ] } ON { RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | FAILOVER GROUP | REPLICATION GROUP | EXTERNAL VOLUME } <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 ]
Datenbankrollen:
REVOKE [ GRANT OPTION FOR ]
{
{ CREATE SCHEMA | MODIFY | MONITOR | USAGE } [ , ... ] } ON DATABASE <object_name>
{ globalPrivileges | ALL [ PRIVILEGES ] } ON ACCOUNT
| { accountObjectPrivileges | ALL [ PRIVILEGES ] } ON { RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | EXTERNAL VOLUME } <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 DATABASE ROLE <database_role_name> [ RESTRICT | CASCADE ]
Wobei:
globalPrivileges ::=
{
CREATE {
ACCOUNT | COMPUTE POOL | DATA EXCHANGE LISTING | DATABASE | FAILOVER GROUP | INTEGRATION
| NETWORK POLICY | EXTERNAL VOLUME | REPLICATION GROUP | ROLE | SHARE
| USER | WAREHOUSE
}
| APPLY { { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY | TAG }
| ATTACH POLICY | AUDIT | BIND SERVICE ENDPOINT
| EXECUTE { ALERT | TASK }
| IMPORT SHARE
| MANAGE { GRANTS | LISTING AUTO FULFILLMENT | WAREHOUSES }
| MODIFY { LOG LEVEL | TRACE LEVEL | SESSION LOG LEVEL | SESSION TRACE LEVEL }
| MONITOR { EXECUTION | SECURITY | USAGE }
| OVERRIDE SHARE RESTRICTIONS | PURCHASE DATA EXCHANGE LISTING | RESOLVE ALL
}
[ , ... ]
accountObjectPrivileges ::=
-- For COMPUTE POOL
{ MODIFY | MONITOR | OPERATE | USAGE } [ , ... ]
-- For DATABASE
{ APPLYBUDGET | CREATE { DATABASE ROLE | SCHEMA } | IMPORTED PRIVILEGES | MODIFY | MONITOR | USAGE } [ , ... ]
-- For EXTERNAL VOLUME
{ USAGE } [ , ... ]
-- For FAILOVER GROUP
{ FAILOVER | MODIFY | MONITOR | REPLICATE } [ , ... ]
-- For INTEGRATION
{ USAGE | USE_ANY_ROLE } [ , ... ]
-- For REPLICATION GROUP
{ MODIFY | MONITOR | REPLICATE } [ , ... ]
-- For RESOURCE MONITOR
{ MODIFY | MONITOR } [ , ... ]
-- For USER
{ MONITOR } [ , ... ]
-- For WAREHOUSE
{ APPLYBUDGET | MODIFY | MONITOR | USAGE | OPERATE } [ , ... ]
schemaPrivileges ::=
ADD SEARCH OPTIMIZATION
| APPLYBUDGET
| CREATE {
ALERT | DYNAMIC TABLE | EXTERNAL TABLE | FILE FORMAT | FUNCTION | HYBRID TABLE | IMAGE REPOSITORY |
| ICEBERG TABLE | MATERIALIZED VIEW | MODEL | NETWORK RULE | PIPE | PROCEDURE
| { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY | SERVICE
| SECRET | SEQUENCE | STAGE | STREAM | STREAMLIT
| SNOWFLAKE.CORE.BUDGET |
| SNOWFLAKE.ML.ANOMALY_DETECTION | SNOWFLAKE.ML.FORECAST
| TAG | TABLE | TASK | VIEW
}
| MODIFY | MONITOR | USAGE
[ , ... ]
schemaObjectPrivileges ::=
-- For ALERT
{ MONITOR | OPERATE } [ , ... ]
-- For DYNAMIC TABLE
MONITOR, OPERATE, SELECT [ , ...]
-- For EVENT TABLE
{ INSERT | SELECT } [ , ... ]
-- For FILE FORMAT, FUNCTION (UDF or external function), MODEL, PROCEDURE, SECRET, or SEQUENCE
USAGE [ , ... ]
-- For HYBRID TABLE
{ INSERT | SELECT | UPDATE } [ , ... ]
-- For IMAGE REPOSITORY
{ READ, WRITE } [ , ... ]
-- For ICEBERG TABLE
{ APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
-- For PIPE
{ APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
-- For { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY or TAG
APPLY [ , ... ]
-- For SECRET
READ, USAGE [ , ... ]
-- For SERVICE
{ USAGE | MONITOR | OPERATE } [ , ... ]
-- For external STAGE
USAGE [ , ... ]
-- For internal STAGE
READ [ , WRITE ] [ , ... ]
-- For STREAM
SELECT [ , ... ]
-- For STREAMLIT
USAGE [ , ... ]
-- For TABLE
{ APPLYBUDGET | DELETE | EVOLVE SCHEMA | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
-- For TAG
READ
-- For TASK
{ APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
-- For VIEW
{ REFERENCES | SELECT } [ , ... ]
-- For MATERIALIZED VIEW
{ APPLYBUDGET | REFERENCES | SELECT } [ , ... ]
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 für Objekte auf Schemaebene an.
AGGREGATION POLICY
ALERT
AUTHENTICATION POLICY
DYNAMIC TABLE
EVENT TABLE
EXTERNAL TABLE
FILE FORMAT
FUNCTION
HYBRID TABLE
IMAGE REPOSITORY
ICEBERG TABLE
MASKING POLICY
MATERIALIZED VIEW
MODEL
NETWORK RULE
PACKAGES POLICY
PASSWORD POLICY
PIPE
PROCEDURE
PROJECTION POLICY
ROW ACCESS POLICY
SECRET
SERVICE
SESSION POLICY
SEQUENCE
STAGE
STREAM
TABLE
TAG
TASK
VIEW
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).
database_role_name
Gibt den Bezeichner für die Empfänger-Datenbankrolle an (d. h. die Rolle, der die Berechtigungen entzogen 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.
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¶
Berechtigungen für beliebige Klassen können nicht direkt erteilt oder entzogen werden. Sie können jedoch eine Instanz einer Klasse erstellen und einer Kontorolle die Instanzrollen entziehen. Entziehen Sie die Berechtigung CREATE <class_name> für das Schema, damit eine Rolle keine Instanz einer Klasse erstellen kann.
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.Sie können dieses Schlüsselwort nicht für Tags angeben.
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 freigegebene Datenbanken (d. h. Datenbanken, die aus einer Freigabe erstellt wurden). Weitere Details dazu finden Sie unter Verwenden von freigegebenen Daten.
Für Schemas sowie Objekte in Schemas 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 benutzerdefinierten Funktionen.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¶
Rollen¶
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 benutzerdefinierten Funktionen.
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.
Entziehen Sie der Rolle role1
die Berechtigungen für SELECT und INSERT, die allen zukünftigen Tabellen erteilt wurden, die im mydb.myschema
-Schema erstellt werden:
REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema FROM ROLE role1;
Datenbankrollen¶
Entziehen Sie der Datenbankrolle mydb.dr1
die Berechtigung SELECT für alle im Schema mydb.myschema
vorhandenen Tabellen:
REVOKE SELECT ON ALL TABLES IN SCHEMA mydb.myschema FROM DATABASE ROLE mydb.dr1;
Entziehen Sie der Datenbankrolle mydb.dr1
alle Berechtigungen für zwei UDFs (mit dem gleichen Namen im aktuellen Schema):
REVOKE ALL PRIVILEGES ON FUNCTION add5(number) FROM DATABASE ROLE mydb.dr1; REVOKE ALL PRIVILEGES ON FUNCTION add5(string) FROM 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.
Entziehen Sie der Datenbankrolle mydb.dr1
alle Berechtigungen für zwei gespeicherte Prozeduren (mit dem gleichen Namen im aktuellen Schema):
REVOKE ALL PRIVILEGES ON PROCEDURE clean_schema(string) FROM DATABASE ROLE mydb.dr1; REVOKE ALL PRIVILEGES ON procedure clean_schema(string, string) FROM DATABASE ROLE mydb.dr1;Beachten Sie, dass die beiden gespeicherten Prozeduren unterschiedliche Argumente haben, sodass Snowflake Prozeduren mit dem gleichen Namen eindeutig identifizieren kann.
Entziehen Sie der Datenbankrolle mydb.dr1
die Berechtigungen für SELECT und INSERT, die allen zukünftigen Tabellen erteilt wurden, die im Schema mydb.myschema
erstellt werden:
REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema FROM DATABASE ROLE mydb.dr1;