GRANT OWNERSHIP

Überträgt die Eigentümerschaft an einem Objekt oder an allen Objekten eines bestimmten Typs in einem Schema von einer Rolle auf eine andere Rolle. Rolle verweist dabei auf eine Kontorolle oder eine Datenbankrolle.

OWNERSHIP ist ein spezieller Typ von Berechtigung, der einer Rolle nur von einer anderen Rolle erteilt werden kann. Die Berechtigung kann nicht wieder entzogen werden. Weitere Details dazu finden Sie unter Übersicht zur Zugriffssteuerung.

Dieser Befehl ist eine Variation von GRANT <Berechtigungen>.

Siehe auch:

REVOKE <Berechtigungen>

Syntax

-- Role
GRANT OWNERSHIP
   { ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
   | ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
   }
   TO ROLE <role_name>
   [ { REVOKE | COPY } CURRENT GRANTS ]

-- Database role
GRANT OWNERSHIP
   { ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
   | ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
   }
   TO DATABASE ROLE <database_role_name>
   [ { REVOKE | COPY } CURRENT GRANTS ]
Copy

Erforderliche Parameter

object_name

Gibt den Bezeichner für das Objekt an, auf das Sie die Eigentümerschaft übertragen.

object_type

Gibt den Typ des Objekts an.

  • AGGREGATION POLICY

  • ALERT

  • AUTHENTICATION POLICY

  • COMPUTE POOL

  • DATABASE

  • DATABASE ROLE

  • DYNAMIC TABLE

  • EVENT TABLE

  • EXTERNAL TABLE

  • EXTERNAL VOLUME

  • FAILOVER GROUP

  • FILE FORMAT

  • FUNCTION

  • HYBRID TABLE

  • ICEBERG TABLE

  • IMAGE REPOSITORY

  • INTEGRATION

  • MATERIALIZED VIEW

  • NETWORK POLICY

  • NETWORK RULE

  • PACKAGES POLICY

  • PIPE

  • PROCEDURE

  • MASKING POLICY

  • PASSWORD POLICY

  • PROJECTION POLICY

  • REPLICATION GROUP

  • ROLE

  • ROW ACCESS POLICY

  • SCHEMA

  • SESSION POLICY

  • SECRET

  • SEQUENCE

  • STAGE

  • STREAM

  • TABLE

  • TAG

  • TASK

  • USER

  • VIEW

  • WAREHOUSE

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

Der Bezeichner der Rolle, an die die Eigentümerschaft an dem Objekt übertragen wird.

database_role_name

Der Bezeichner der Datenbankrolle, an die die Eigentümerschaft an dem Objekt übertragen wird. Wenn der Bezeichner nicht vollqualifiziert ist (im Format db_name.database_role_name), sucht der Befehl die Datenbankrolle in der aktuellen Datenbank der Sitzung.

Die Eigentümerschaft ist auf Objekte in der Datenbank beschränkt, die die Datenbankrolle enthält.

Optionale Parameter

[ REVOKE | COPY ] CURRENT GRANTS

Gibt an, ob alle vorhandenen ausgehenden Berechtigungen für das Objekt entfernt oder übertragen werden sollen, wenn die Eigentümerschaft auf eine neue Rolle übertragen wird:

Bemerkung

Ausgehende Berechtigungen beziehen sich auf alle Berechtigungen, die für das einzelne Objekt erteilt werden, dessen Eigentümerschaft sich ändert.

Bei der Übertragung der Eigentümerschaft auf eine Rolle beziehen sich die aktuellen Berechtigungen auf alle Rollen, die der aktuellen Rolle erteilt wurden (um eine Rollenhierarchie zu erstellen). Wenn die Eigentümerschaft an einer Rolle übertragen wird, während die aktuellen Berechtigungen kopiert werden, zeigt die Ausgabe des Befehls SHOW GRANTS den neuen Eigentümer als Berechtigungsgeber aller untergeordneten Rollen der aktuellen Rolle an.

REVOKE

Setzt RESTRICT-Semantik durch, die das Entfernen aller ausgehenden Berechtigungen an einem Objekt erfordert, bevor die Eigentümerschaft auf eine neue Rolle übertragen wird. Dies soll die Rolle, die neuer Eigentümer ist, davor schützen, das Objekt unwissentlich mit bereits erteilten Berechtigungen zu erben.

Nach Übertragung der Eigentümerschaft müssen die Berechtigungen für das Objekt explizit neu an die Rolle vergeben werden.

Beachten Sie, dass das Schlüsselwort REVOKE nicht funktioniert, wenn Sie einer Rolle die Eigentümerschaft an zukünftigen Objekten eines bestimmten Typs in einer Datenbank oder einem Schema zuweisen (mit GRANT OWNERSHIP ON FUTURE <Objekttyp>).

COPY

Überträgt die Eigentümerschaft an einem Objekt zusammen mit einer Kopie aller vorhandenen ausgehenden Berechtigungen für das Objekt. Nach der Übertragung wird der neue Eigentümer im System als Berechtigungsgeber der kopierten ausgehenden Berechtigungen identifiziert (d. h. in der SHOW GRANTS-Ausgabe für das Objekt wird der neue Eigentümer in der Spalte GRANTED_BY für alle Berechtigungen aufgeführt). Infolgedessen sind alle Berechtigungen, die später vor dem Eigentümerwechsel wieder vergeben werden, nicht mehr von der ursprünglichen Rolle des Berechtigungsgebers abhängig.

Der Widerruf einer Berechtigung unter Verwendung von REVOKE <Berechtigungen> mit der Option CASCADE führt nicht zum rekursiven Widerruf dieser ehemals abhängigen Berechtigungen. Die Berechtigungen müssen ausdrücklich widerrufen werden.

Dieser Parameter erfordert, dass die Rolle, die den Befehl GRANT OWNERSHIP ausführt, über die Berechtigung MANAGE GRANTS für das Konto verfügt.

Standard: Keine. Es werden keine Operationen auf bestehenden ausgehenden Berechtigungen ausgeführt.

Bemerkung

Eine GRANT OWNERSHIP-Anweisung schlägt fehl, wenn bestehende ausgehende Berechtigungen für das Objekt weder entzogen noch kopiert wurden.

Nutzungshinweise

  • Sie können die Berechtigung OWNERSHIP nicht auf folgende Objekte übertragen:

    • APPLICATION ROLE

    • CONNECTION

      Nur die Rolle ACCOUNTADMIN kann die Berechtigung OWNERSHIP für ein Verbindungsobjekt haben.

    • SERVICE

    • SHARE

  • Eine Rolle, die die Berechtigung MANAGE GRANTS hat, kann die Eigentümerschaft an einem Objekt auf eine beliebige Rolle übertragen. Eine Rolle, die die Berechtigung MANAGE GRANTS nicht hat, kann hingegen die Eigentümerschaft nur von sich selbst auf eine untergeordnete Rolle innerhalb der Rollenhierarchie übertragen.

  • Die GRANT OWNERSHIP-Anweisung wird blockiert, wenn ausgehende (d. h. abhängige) Berechtigungen auf dem Objekt existieren. Der Objekteigentümer (oder eine höhere Rolle) kann explizit alle aktuellen Berechtigungen auf die Rolle, die neuer Eigentümer ist, kopieren (mit der Option COPY CURRENT GRANTS) oder alle ausgehenden Berechtigungen an dem Objekt zurücknehmen, bevor die Eigentümerschaft übertragen wird (mit der Option REVOKE CURRENT GRANTS).

    Snowflake verhindert die Ausführung des Befehls GRANT OWNERSHIP … REVOKE CURRENT GRANTS auf einer freigegebenen Datenbank. Weitere Informationen dazu finden Sie im Beispiel zu Freigegebene Datenbank unter diesem Thema.

  • Die Übertragung der Eigentümerschaft betrifft nur die zum Ausführungszeitpunkt des Befehls vorhandenen Objekte. Alle Objekte, die nach Ausführung des Befehls erstellt werden, befinden sich im Eigentum der Rolle, die bei der Erstellung des Objekts verwendet wurde.

  • Die Übertragung der Eigentümerschaft an Objekte der folgenden Typen ist gesperrt, es sei denn, folgende zusätzliche Bedingungen sind erfüllt:

    Pipes:

    Die Pipe muss angehalten sein.

    Aufgaben:

    Die geplante Aufgabe (d. h. die eigenständige Aufgabe oder die Stammaufgabe in einem Task-Graphen) muss angehalten sein. Beachten Sie, dass alle Aufgaben im Container automatisch angehalten werden, wenn alle Aufgaben in einer bestimmten Datenbank oder einem bestimmten Schema auf eine andere Rolle übertragen werden. Aufgaben, die mit der Option COPY CURRENT GRANTS an dieselbe Rolle übertragen werden, werden ebenfalls automatisch angehalten.

  • Wenn zukünftige Zuweisungen auf demselben Objekttyp 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.

  • Um die Eigentümerschaft an einer materialisierten Ansicht zu übertragen, verwenden Sie GRANT OWNERSHIP ON VIEW.... Es gibt keine separate GRANT OWNERSHIP ON MATERIALIZED VIEW-Anweisung.

  • Sie können die Berechtigung OWNERSHIP weder auf eine Freigabe noch auf eine Verbindung übertragen. Nur die Rolle ACCOUNTADMIN kann Eigentümer der Verbindung sein.

  • Um die OWNERSHIP-Berechtigung für dynamische Tabellen erteilen zu können, muss die empfangende Rolle über die USAGE-Berechtigung für die Datenbank und das Schema, die/das die dynamische Tabelle enthält, sowie für das Warehouse verfügen, das zur Aktualisierung der Tabelle verwendet wird. Andernfalls schlagen nachfolgende geplante Aktualisierungen fehl.

  • Beim Erteilen der OWNERSHIP-Berechtigung auf zukünftige dynamische Tabellen ist Folgendes zu beachten:

    • Wenn die dynamische Tabelle so eingestellt ist, dass sie beim Erstellen initialisiert wird (d. h. INITIALIZE = ON_CREATE), stellen Sie sicher, dass die neue Rolle über ausreichende Berechtigungen für referenzierte Objekte verfügt. Andernfalls schlägt die erste Aktualisierung fehl und führt zu der Fehlermeldung, dass das Objekt nicht gefunden werden kann.

    • Wenn die dynamische Tabelle so eingestellt ist, dass sie nach Zeitplan initialisiert wird (d. h. INITIALIZE = ON_SCHEDULE), stellen Sie sicher, dass die neue Rolle über ausreichende Berechtigungen für referenzierte Objekte verfügt. Andernfalls schlagen die nachfolgenden geplanten Aktualisierungen fehl.

  • Datenbankrollen:

    Die Eigentümerschaft kann nur an Objekte übertragen werden, die sich in derselben Datenbank wie die Datenbankrolle befinden.

  • Die Übertragung der Eigentümerschaft an eine externe Tabelle oder deren übergeordnete Datenbank blockiert die automatischen Aktualisierungen der Tabellenmetadaten, indem die Eigenschaft AUTO_REFRESH auf FALSE gesetzt wird. Um die Eigenschaft nach Übertragung der Eigentümerschaft zurückzusetzen, verwenden Sie den Befehl ALTER EXTERNAL TABLE.

Beispiele

Rollen

Entziehen Sie alle ausgehenden Berechtigungen an der mydb Datenbank, die derzeit der manager-Rolle gehört, bevor das Eigentum auf die analyst-Rolle übertragen wird:

REVOKE ALL PRIVILEGES ON DATABASE mydb FROM ROLE manager;

GRANT OWNERSHIP ON DATABASE mydb TO ROLE analyst;

GRANT ALL PRIVILEGES ON DATABASE mydb TO ROLE analyst;
Copy

Beachten Sie, dass dieses Beispiel den standardmäßigen (und empfohlenen) mehrstufigen Prozess der Eigentumsübertragung veranschaulicht.

Entziehen Sie in einem einzigen Schritt alle Berechtigungen an den im Schema mydb.public befindlichen Tabellen, und übertragen Sie die Eigentümerschaft an den Tabellen (zusammen mit einer Kopie ihrer aktuellen Berechtigungen) auf die Rolle analyst:

GRANT OWNERSHIP ON ALL TABLES IN SCHEMA mydb.public TO ROLE analyst COPY CURRENT GRANTS;
Copy

Übertragen Sie die Eigentümerschaft an der Tabelle mydb.public.mytable zusammen mit einer Kopie aller aktuellen ausgehenden Berechtigungen an der Tabelle an die Rolle analyst:

GRANT OWNERSHIP ON TABLE mydb.public.mytable TO ROLE analyst COPY CURRENT GRANTS;
Copy

Datenbankrollen

Entziehen Sie in einem einzigen Schritt alle Berechtigungen an den im Schema mydb.public befindlichen Tabellen, und übertragen Sie die Eigentümerschaft an den Tabellen (zusammen mit einer Kopie ihrer aktuellen Berechtigungen) auf die Datenbankrolle mydb.dr1:

GRANT OWNERSHIP ON ALL TABLES IN SCHEMA mydb.public
  TO DATABASE ROLE mydb.dr1
  COPY CURRENT GRANTS;
Copy

Übertragen Sie die Eigentümerschaft an der Tabelle mydb.public.mytable zusammen mit einer Kopie aller aktuellen ausgehenden Berechtigungen an der Tabelle an die Datenbankrolle mydb.dr1:

GRANT OWNERSHIP ON TABLE mydb.public.mytable
  TO ROLE mydb.dr1
  COPY CURRENT GRANTS;
Copy

Freigegebene Datenbank

Um die OWNERSHIP-Berechtigung auf eine freigegebene Datenbank zu übertragen, verwenden Sie die folgenden Befehle:

REVOKE USAGE ON DATABASE mydb FROM SHARE myshare;
GRANT OWNERSHIP ON DATABASE mydb TO ROLE r2;
GRANT USAGE ON DATABASE mydb TO ROLE r2;
Copy

Weisen Sie die Datenbank, falls erforderlich, mit dem Befehl GRANT <Berechtigung> … TO SHARE erneut der Freigabe zu.