Catégories :

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

REVOKE <privileges> … FROM ROLE

Supprime un ou plusieurs privilèges sur un objet sécurisable d’un rôle. Les privilèges qui peuvent être révoqués sont spécifiques à l’objet et sont regroupés dans les catégories suivantes :

  • Privilèges globaux.

  • Privilèges pour les objets de compte (moniteurs de ressources, entrepôts virtuels et bases de données).

  • Privilèges pour les schémas.

  • Privilèges pour les objets de schéma (tables, vues, zones de préparation, formats de fichiers, UDFs et séquences).

Pour plus de détails sur les rôles et les objets sécurisables, voir Contrôle d’accès dans Snowflake.

Voir aussi :

GRANT <privileges> … TO ROLE , GRANT OWNERSHIP

REVOKE <privilège> … FROM SHARE

Syntaxe

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 ]

Où :

globalPrivileges ::=
  { { CREATE { ROLE | USER | WAREHOUSE | DATABASE | INTEGRATION } } | APPLY MASKING POLICY | EXECUTE TASK | MANAGE GRANTS | MONITOR { EXECUTION | USAGE }  } [ , ... ]
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 | FILE FORMAT | STAGE | PIPE | STREAM | TASK | FUNCTION | PROCEDURE | SEQUENCE } } [ , ... ]
schemaObjectPrivileges ::=
-- For TABLE
  { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } [ , ... ]
-- For VIEW
    SELECT
-- For MATERIALIZED VIEW
    SELECT
-- For internal STAGE
    READ [ , WRITE ]
-- For external STAGE
    USAGE
-- For FILE FORMAT, FUNCTION (UDF or external function), or SEQUENCE
    USAGE
-- For STREAM
    SELECT
-- For TASK
   { MONITOR | OPERATE } [ , ... ]
-- For MASKING POLICY
    APPLY

Pour plus de détails sur les privilèges pris en charge pour chaque type d’objet, voir Privilèges de contrôle d’accès.

Paramètres requis

nom_objet

Indique l’identificateur de l’objet sur lequel les privilèges sont révoqués.

type_objet

Indique le type d’objet (pour les objets de schéma) :

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

pluriel_type_objet

Pluriel de type_objet (par exemple TABLES, VIEWS).

nom_rôle

Spécifie l’identificateur du rôle du destinataire (c’est-à-dire le rôle dont les privilèges sont révoqués).

Paramètres facultatifs

GRANT OPTION FOR

Si spécifié, supprime la possibilité pour le rôle destinataire d’accorder des privilèges à un autre rôle.

Par défaut : aucune valeur

ON FUTURE

Si spécifié, supprime uniquement les privilèges accordés sur les nouveaux objets de schéma (futurs) d’un type spécifié (par exemple, tables ou vues) plutôt que sur les objets existants. Notez que tous les privilèges accordés sur les objets existants sont conservés.

RESTRICT | CASCADE

Si spécifié, détermine si l’opération de révocation réussit ou échoue pour les privilèges, en fonction du fait que les privilèges ont été réattribués à un autre rôle.

  • RESTRICT : si le privilège révoqué a été réattribué à un autre rôle, la commande REVOKE échoue.

  • CASCADE : si le privilège révoqué a été réattribué, la commande REVOKE révoque récursivement ces autorisations dépendantes. Si le même privilège sur un objet a été accordé au rôle cible par un autre concédant (accord parallèle), cette autorisation ne sera pas affectée et le rôle cible conservera le privilège.

Par défaut : RESTRICT

Notes sur l’utilisation

  • Plusieurs privilèges peuvent être spécifiés pour le même type d’objet dans une seule instruction GRANT (chaque privilège étant séparé par des virgules), ou le mot clé spécial ALL [ PRIVILEGES ] peut être utilisé pour accorder tous les privilèges applicables au type d’objet spécifié. Notez, cependant, que seuls les privilèges détenus et pouvant être accordés par le rôle exécutant la commande GRANT sont réellement accordés au rôle cible. Un message d’avertissement est renvoyé pour tout privilège qui n’a pas pu être accordé.

  • Les privilèges accordés à un rôle particulier sont automatiquement hérités par tous les autres rôles auxquels le rôle est accordé, ainsi que tous les autres rôles de niveau supérieur dans la hiérarchie des rôles. Pour plus de détails, voir Contrôle d’accès dans Snowflake.

  • Pour les bases de données, le privilège IMPORTED PRIVILEGES ne s’applique qu’aux bases de données partagées (c’est-à-dire les bases de données créées à partir d’un partage). Pour plus de détails, voir Consommateurs de données.

  • Pour les schémas et les objets dans les schémas, une option est fournie pour accorder des privilèges sur tous les objets du même type dans le conteneur (c’est-à-dire la base de données ou le schéma). C’est une option pratique ; en interne, la commande est étendue en une série de commandes GRANT individuelles sur chaque objet. Seuls les objets qui existent actuellement dans le conteneur sont concernés.

    Toutefois, il est à noter que, dans le modèle de Snowflake, l’octroi de privilèges en lot n’est pas une pratique recommandée. Snowflake vous recommande plutôt de créer un rôle partagé et de l’utiliser pour créer des objets qui sont automatiquement accessibles à tous les utilisateurs auxquels le rôle a été accordé.

  • Pour les zones de préparation :

    • USAGE ne s’applique qu’aux zones de préparation externes.

    • READ | WRITE ne s’appliquent qu’aux zones de préparation internes. De plus, pour accorder le privilège WRITE sur une zone de préparation interne, le privilège READ doit d’abord être accordé sur la zone de préparation.

    Pour plus de détails sur les zones de préparation externes et internes, voir CREATE STAGE.

  • Lorsque vous accordez des privilèges à un UDF individuel, vous devez spécifier les types de données pour les arguments, le cas échéant, pour l’UDF (sous la forme de udf_nom ( [ type_données_arg , ... ] )). Ceci est nécessaire parce que Snowflake utilise des types de données d’arguments pour résoudre les UDFs qui ont le même nom dans un schéma. Pour voir un exemple, voir Exemples (dans ce chapitre). Pour plus de détails, voir Aperçu des UDFs.

  • Lorsque vous accordez des privilèges à une procédure stockée particulière, vous devez spécifier les types de données pour les arguments, le cas échéant, pour la procédure sous la forme de nom_procédure ( [ type_données_arg , ... ] ). Ceci est nécessaire parce que Snowflake utilise des types de données d’argument pour résoudre les procédures stockées qui ont le même nom dans un schéma.

  • Les administrateurs de sécurité qui ont obtenu le privilège MANAGE GRANTS peuvent visualiser et modifier toute attribution d’accord dans le système.

Exemples

Révoquer les privilèges nécessaires à l’exploitation (c’est-à-dire suspendre ou reprendre) de l’entrepôt virtuel report_wh du rôle analyst :

REVOKE OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;

Comme dans l’exemple précédent, mais empêche aussi le rôle analyst d’accorder le privilège à d’autres rôles :

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

Révoquer le privilège SELECT sur toutes les tables existantes dans le schéma mydb.myschema au rôle analyst :

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

Révoquer tous les privilèges sur deux UDFs (avec le même nom dans le schéma actuel) du rôle analyst :

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

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

Notez que les UDFs ont des arguments différents, c’est ainsi que Snowflake identifie de façon unique les UDFs avec le même nom. Pour plus de détails sur les conventions d’appellation des UDF, voir Aperçu des UDFs.

Révoquer tous les privilèges sur deux procédures stockées (avec le même nom dans le schéma actuel) du rôle analyst :

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

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

Notez que les deux procédures stockées ont des arguments différents, c’est ainsi que Snowflake identifie de façon unique les procédures avec le même nom.

Révoquez les privilèges SELECT et INSERT accordés sur toutes les futures tables créées dans le schéma mydb.myschema à partir du rôle role1 :

REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema
FROM ROLE role1;