Catégories :

Utilisateur et sécurité DDL (contrôle d’accès)

GRANT OWNERSHIP

Transfère la propriété d’un objet (ou de tous les objets d’un type spécifié dans un schéma) d’un rôle à un autre. OWNERSHIP est un type de privilège spécial qui ne peut être accordé que d’un rôle à un autre ; il ne peut être révoqué. Pour plus de détails, voir Contrôle d’accès dans Snowflake.

Cette commande est une variation de GRANT <privileges> … TO ROLE.

Voir aussi :

REVOKE <privileges> … FROM ROLE

Syntaxe

GRANT OWNERSHIP
   ON { objectType <object_name> | ALL schemaObjectsType IN SCHEMA <schema_name> }
   TO ROLE <name>
   [ { REVOKE | COPY } CURRENT GRANTS ]

Où :

objectType ::=
  { ROLE | USER | WAREHOUSE | DATABASE | SCHEMA | TABLE | VIEW | STAGE | FILE FORMAT | STREAM | TASK | PIPE | INTEGRATION | FUNCTION | PROCEDURE | SEQUENCE }
schemaObjectsType ::=
  { TABLES | VIEWS | STAGES | FILE FORMATS | FUNCTIONS | PROCEDURES | SEQUENCES | STREAMS | TASKS }

Paramètres requis

objectType nom_objet ou . ALL schemaObjectsType IN SCHEMA nom_schéma

Indique s’il faut transférer la propriété d’un objet unique (du type spécifié) ou de tous les objets de schéma du type spécifié (dans le schéma spécifié) :

  • Pour les objets individuels, tous les types d’objets sont pris en charge :

    ROLE | USER | WAREHOUSE | DATABASE | SCHEMA | TABLE | VIEW | STAGE | FILE FORMAT | STREAM | TASK | PIPE | FUNCTION | PROCEDURE | SEQUENCE

  • Pour les objets de schéma, seuls les types d’objets suivants sont pris en charge :

    TABLES | VIEWS | STAGES | FILE FORMATS | FUNCTIONS | PROCEDURES | SEQUENCES | STREAMS | TASKS

nom

L’identificateur du rôle auquel la propriété de l’objet est transférée.

Paramètres facultatifs

[ REVOKE | COPY ] CURRENT GRANTS

Indique s’il faut supprimer ou transférer tous les privilèges sortants existants sur l’objet lorsque la propriété est transférée à un nouveau rôle :

REVOKE

Exécute la sémantique RESTRICT, qui exige la suppression de tous les privilèges sortants d’un objet avant de transférer la propriété à un nouveau rôle. Ceci peut être réalisé par le rôle propriétaire (ou un rôle supérieur) de l’objet. Ceci évite au nouveau rôle de propriétaire d’hériter sans le savoir de l’objet avec des privilèges déjà accordés.

Après le transfert de propriété, les privilèges pour l’objet doivent être explicitement accordés de nouveau sur le rôle.

COPY

Transfère la propriété d’un objet ainsi qu’une copie de tout privilège sortant existant sur l’objet. Après le transfert, le nouveau propriétaire est identifié dans le système comme le concédant des privilèges de sortie copiés (c’est-à-dire que dans la sortie SHOW GRANTS de l’objet, le nouveau propriétaire est répertorié dans la colonne GRANTED_BY pour tous les privilèges). Par conséquent, tous les privilèges qui ont été réattribués par la suite avant le changement de propriété ne dépendent plus du rôle initial du concédant.

Révoquer un privilège en utilisant REVOKE <privileges> … FROM ROLE avec l’option CASCADE ne révoque pas récursivement les privilèges associés existants. Les autorisations doivent être explicitement révoquées.

Par défaut : REVOKE CURRENT GRANTS

Note

Un rôle qui possède le privilège MANAGE GRANTS peut transférer la propriété d’un objet à n’importe quel rôle ; en revanche, un rôle qui n’a pas le privilège MANAGE GRANTS peut seulement transférer la propriété de lui-même à un rôle enfant dans la hiérarchie des rôles.

Notes sur l’utilisation

  • Le transfert de propriété n’affecte que les objets existants au moment où la commande est émise. Tous les objets créés après l’émission de la commande sont la propriété du rôle utilisé au moment de la création de l’objet.

  • À moins que vous ne choisissiez explicitement de copier tous les privilèges actuels dans le nouveau rôle de propriétaire (en utilisant l’option COPY CURRENT GRANTS), vous devez effectuer les tâches suivantes pour transférer la propriété :

    1. Exécutez REVOKE <privileges> … FROM ROLE sur le ou les objets.

    2. Exécutez GRANT OWNERSHIP sur le ou les objets.

    3. Utilisez GRANT <privileges> … TO ROLE pour redonner les privilèges relatifs aux objets, si approprié/désiré, au nouveau rôle propriétaire.

    C’est le processus par défaut (et recommandé) à suivre pour contrôler explicitement les privilèges d’accès lors du transfert de propriété.

Exemples

Révoquer tous les privilèges sortants sur la base de données mydb, qui appartient actuellement au rôle manager, avant de transférer la propriété au rôle analyst :

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;

Notez que cet exemple illustre le processus par défaut (et recommandé) de transfert de propriété en plusieurs étapes.

En une seule étape, révoquer tous les privilèges des tables existantes dans le schéma mydb.public et transférer la propriété des tables (ainsi qu’une copie de leurs privilèges actuels) au rôle analyst :

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

Accorder la propriété sur la table mydb.public.mytable au rôle analyst ainsi qu’une copie de tous les privilèges sortants courants sur la table :

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