Aperçu du contrôle d’accès¶
Cette rubrique fournit des informations sur les principales rubriques de contrôle d’accès dans Snowflake.
Dans ce chapitre :
Structure du contrôle d’accès¶
L’approche de Snowflake en matière de contrôle d’accès combine des aspects des modèles suivants :
Contrôle d’accès discrétionnaire (DAC) : chaque objet a un propriétaire qui peut à son tour accorder l’accès à cet objet.
Contrôle d’accès basé sur les rôles (RBAC) : les privilèges d’accès sont assignés aux rôles, qui sont à leur tour assignés aux utilisateurs.
Contrôle d’accès basé sur l’utilisateur (UBAC) : les privilèges d’accès sont attribués directement aux utilisateurs. Le contrôle d’accès prend en compte les privilèges attribués directement aux utilisateurs uniquement lorsque USE SECONDARY ROLE est défini sur ALL.
Pour plus d’informations sur les rôles secondaires, voir USE SECONDARY ROLES et Autorisation par le biais d’un rôle primaire et de rôles secondaires.
Les concepts clés pour comprendre le contrôle d’accès dans Snowflake comprennent :
Objet sécurisable : une entité à laquelle l’accès peut être accordé. À moins qu’une attribution ne le permette, l’accès est refusé.
Rôle : une entité à laquelle des privilèges peuvent être accordés.
Privilège : un niveau défini d’accès à un objet. Plusieurs privilèges distincts peuvent être utilisés pour contrôler la granularité de l’accès accordé.
Utilisateur : identité d’un utilisateur reconnue par Snowflake, qu’elle soit associée à une personne ou à un service. Un utilisateur est également une entité à laquelle des privilèges peuvent être accordés.
Dans Snowflake, les privilèges attribués aux rôles ou aux utilisateurs permettent l’accès aux objets sécurisables. Les rôles peuvent être attribués à des utilisateurs ou à d’autres rôles. L’octroi d’un rôle à un autre rôle crée une hiérarchie des rôles, décrite plus en détail dans Hiérarchie des rôles et héritage des privilèges. En général, vous utilisez RBAC pour gérer l’accès aux objets sécurisables dans Snowflake.
Le diagramme suivant illustre la manière dont DAC, RBAC et UBAC prennent en charge l’attribution de privilèges appropriés sur différents objets sécurisables. Dans cet exemple, le rôle 1 dispose du privilège OWNERSHIP sur les objets 1 et 2. En d’autres termes, le rôle 1 est propriétaire des deux objets. Ceci illustre DAC.
Les privilèges sur l’objet 1 peuvent être accordés au rôle 2, qui peut ensuite être accordé à l’utilisateur 1 et à l’utilisateur 2. En d’autres termes, l’utilisateur 1 et l’utilisateur 2 ont accès à l’objet 1, limité par ces privilèges, parce que les deux utilisateurs se sont vu attribuer le rôle 2. Cette partie de la figure illustre RBAC.
Les privilèges sur l’objet 2 peuvent être accordés directement à l’utilisateur 3 et à l’utilisateur 4. Cette partie de la figure illustre la manière dont vous pouvez utiliser UBAC pour étendre le cadre du contrôle d’accès de Snowflake, en fournissant une part importante de contrôle et de flexibilité.
Objets sécurisables¶
Chaque objet sécurisable réside dans un conteneur logique dans une hiérarchie de conteneurs. Le conteneur le plus haut est l’organisation client. Les objets sécurisables tels que les tables, les vues, les fonctions et les zones de préparation sont contenus dans un objet schéma, qui est à son tour contenu dans une base de données. Toutes les bases de données de votre compte Snowflake sont contenues dans l’objet de compte. Cette hiérarchie d’objets et de conteneurs est illustrée ci-dessous :
Posséder un objet signifie qu’un rôle possède le OWNERSHIP privilège sur cet objet. Chaque objet sécurisable est détenu par un rôle unique qui correspond par défaut au rôle utilisé pour créer l’objet. Lorsque ce rôle est attribué aux utilisateurs, ils ont effectivement un contrôle partagé sur l’objet. La commande GRANT OWNERSHIP vous permet de transférer la propriété d’un objet d’un rôle à un autre, y compris à des rôles de base de données. Cette commande spécifie également les objets sécurisables dans chaque conteneur.
Dans un schéma standard, le rôle de propriétaire possède tous les privilèges sur l’objet par défaut, y compris la possibilité d’accorder ou de révoquer des privilèges sur l’objet à d’autres rôles. De plus, la propriété peut être transférée d’un rôle à un autre. Cependant, dans un schéma d’accès géré, les propriétaires d’objets perdent la capacité de prendre des décisions d’octroi. Seul le propriétaire du schéma (le rôle doté du privilège OWNERSHIP sur le schéma) ou un rôle doté du privilège MANAGE GRANTS peut octroyer des privilèges sur les objets du schéma.
La possibilité d’effectuer SQL des actions sur des objets est définie par les privilèges accordés au rôle actif dans une session utilisateur. Par exemple, si le rôle actif dans votre session s’est vu accorder les privilèges CREATE, USAGE, SELECT et WRITE dans un schéma de base de données Snowflake spécifique, vous pouvez créer un entrepôt, lister les tables qu’il contient et ajouter des données à une table de ce schéma.
Rôles¶
Les rôles sont les entités auxquelles des privilèges sur des objets sécurisables peuvent être accordés et révoqués. Des rôles sont attribués aux utilisateurs pour leur permettre d’effectuer les actions requises pour les fonctions de l’entreprise dans leur organisation. Un utilisateur peut se voir attribuer plusieurs rôles. Cela permet aux utilisateurs de changer de rôle (c.-à-d. de choisir le rôle actif dans la session Snowflake en cours) pour effectuer différentes actions en utilisant des ensembles de privilèges distincts.
Il y a un petit nombre de rôles définis par le système dans un compte Snowflake. Les rôles définis par le système ne peuvent pas être détruits. En outre, les privilèges accordés à ces rôles par Snowflake ne peuvent pas être révoqués.
Les utilisateurs qui se sont vu attribuer un rôle avec les privilèges nécessaires peuvent créer des rôles personnalisés pour répondre à des besoins commerciaux et des besoins de sécurité spécifiques.
Les rôles peuvent également être attribués à d’autres rôles, créant ainsi une hiérarchie des rôles. Les privilèges associés à un rôle sont hérités par tous les rôles situés au-dessus de ce rôle dans la hiérarchie. Pour plus d’informations sur les hiérarchies de rôles et l’héritage des privilèges, voir Hiérarchie des rôles et héritage des privilèges.
Note
Un propriétaire de rôle (le rôle qui a le privilège OWNERSHIP sur le rôle) n’hérite pas des privilèges du rôle dont il est propriétaire. L’héritage des privilèges n’est possible qu’au sein d’une hiérarchie de rôles.
Bien que des privilèges supplémentaires puissent être accordés aux rôles définis par le système, ce n’est pas recommandé. Les rôles définis par le système sont créés avec des privilèges liés à la gestion des comptes. Nous déconseillons de mélanger les privilèges de gestion de compte et les privilèges spécifiques à l’entité dans le même rôle. Si des privilèges supplémentaires sont nécessaires, Snowflake recommande d’accorder ces privilèges à un rôle personnalisé et d’affecter ce rôle personnalisé au rôle défini par le système.
Astuce
Vous pouvez utiliser les groupes d’utilisateurs de l’organisation pour mettre en place des rôles cohérents entre les comptes d’une même organisation. Pour plus d’informations, voir Utilisateurs d’organisation.
Types de rôles¶
Les types de rôles suivants varient dans leur portée, ce qui permet aux administrateurs d’autoriser et de restreindre l’accès aux objets de votre compte.
Note
Sauf indication contraire dans la documentation du produit, le terme rôle fait référence à l’un ou l’autre type.
- Rôles des comptes:
Pour autoriser des actions SQL sur tout objet de votre compte, accordez des privilèges sur l’objet à un rôle de compte.
- Rôles de base de données:
Pour limiter les actions SQL à une seule base de données, ainsi qu’à tout objet de cette base de données, accordez des privilèges sur l’objet à un rôle de base de données dans la même base de données.
Notez que les rôles de base de données ne peuvent pas être activés directement dans une session. Accordez des rôles de base de données aux rôles de compte, qui peuvent être activés dans une session.
Pour plus d’informations sur les rôles de la base de données, reportez-vous à :
Gestion de l’accès aux objets de la base de données à l’aide des rôles de la base de données
Rôles de base de données dans la base de données partagée SNOWFLAKE.
- Rôles des instances:
Pour autoriser l’accès à une instance d’une classe, accordez un rôle d’instance à un rôle de compte.
Une classe peut avoir un ou plusieurs rôles de classe avec des privilèges différents accordés à chaque rôle. Lorsqu’une instance d’une classe est créée, le(s) rôle(s) d’instance peut (peuvent) être attribué(s) à des rôles de compte afin d’accorder l’accès aux méthodes d’instance.
Notez que les rôles d’instances ne peuvent pas être activés directement dans une session. Accordez des rôles d’instances aux rôles de compte, qui peuvent être activés dans une session.
Pour plus d’informations, consultez Rôles des instances.
- Rôles des applications:
Pour permettre aux consommateurs d’accéder aux objets d’une Snowflake Native App, le fournisseur crée le rôle d’application et lui accorde des privilèges dans le script de configuration.
Cependant, pour prendre en charge des fonctionnalités spécifiques à une fonction particulière, comme l’accès aux objets dont Snowflake est le propriétaire, Snowflake peut fournir un ou plusieurs rôles d’application système. Vous pouvez, à votre discrétion, attribuer des rôles d’application du système à des comptes.
Les rôles d’application du système sont abordés dans le contexte d’une fonction spécifique parce que cette fonction spécifique est le seul endroit où vous pouvez utiliser le(s) rôle(s) d’application système. Par exemple :
Budgets : Rôles d’application pour gérer le budget du compte.
Qualité des données et fonctions de métrique des données (DMFs) : Vue des résultats d’une fonction de mesure des données.
- Rôles des services:
Pour permettre à un rôle d’accéder aux points de terminaison de service, attribuez-lui le rôle de service. Vous pouvez attribuer un rôle de service à un rôle de compte, à un rôle d’application ou à un rôle de base de données. Pour plus d’informations, voir Gestion des privilèges liés aux services.
Rôles actifs¶
Les rôles actifs servent de source d’autorisation pour toute action entreprise par un utilisateur dans une session. Le rôle primaire et les rôles secondaires peuvent tous deux être activés dans une session utilisateur.
Un rôle devient un rôle actif de l’une des manières suivantes :
Lorsqu’une session est établie pour la première fois, le rôle par défaut et les rôles secondaires par défaut de l’utilisateur sont activés en tant que rôles primaire et secondaire de la session, respectivement.
Notez que les propriétés de connexion du client utilisées pour établir la session peuvent remplacer explicitement le rôle principal ou les rôles secondaires à utiliser.
L’exécution d’une instruction USE ROLE ou USE SECONDARY ROLES active un rôle primaire ou des rôles secondaires différents, respectivement. Ces rôles peuvent changer au cours d’une session si l’une ou l’autre commande est exécutée à nouveau.
Rôles définis par le système¶
- GLOBALORGADMIN:
(alias Administrateur de l’organisation)
Rôle qui exécute des tâches au niveau de l’organisation, telles que la gestion du cycle de vie des comptes et la vue des informations d’utilisation au niveau de l’organisation. Le rôle n’existe que dans le compte de l’organisation.
- ORGADMIN:
Rôle qui utilise un compte ordinaire pour gérer les opérations au niveau de l’organisation. Le rôle ORGADMIN sera supprimé dans une prochaine version. Les administrateurs d’organisation sont donc encouragés à utiliser le rôle GLOBALORGADMIN à la place.
- ACCOUNTADMIN:
(alias Administrateur de compte)
Rôle qui encapsule les rôles définis par le système SYSADMIN et SECURITYADMIN. Il s’agit du rôle de premier niveau dans le système et ne devrait être accordé qu’à un nombre limité/contrôlé d’utilisateurs dans votre compte.
- SECURITYADMIN:
(alias Administrateur de sécurité)
Rôle qui peut gérer globalement n’importe quelle attribution d’objet, ainsi que créer, surveiller et gérer des utilisateurs et des rôles. Plus précisément, ce rôle :
Obtient le privilège de sécurité MANAGE GRANTS pour pouvoir modifier n’importe quelle autorisation, y compris la révoquer.
Note
Le privilège MANAGE GRANTS offre la possibilité d’accorder et de révoquer des privilèges. Il ne donne pas à SECURITYADMIN la possibilité d’effectuer d’autres actions telles que la création d’objets. Pour créer un objet, le rôle SECURITYADMIN doit également se voir accorder les privilèges nécessaires à la création de l’objet. Par exemple, pour créer un rôle de base de données, l’utilisateur SECURITYADMIN doit également se voir accorder le privilège CREATE DATABASE ROLE, comme décrit dans CREATE DATABASE ROLE Exigences en matière de contrôle d’accès.
Hérite des privilèges du rôle USERADMIN via la hiérarchie des rôles du système (c’est-à-dire que le rôle USERADMIN est accordé à SECURITYADMIN).
- USERADMIN:
(alias Administrateur d’utilisateurs et de rôles)
Rôle dédié uniquement à la gestion des utilisateurs et des rôles. Plus précisément, ce rôle :
Obtient les privilèges de sécurité CREATE USER et CREATE ROLE.
Peut créer des utilisateurs et des rôles dans le compte.
Ce rôle peut également gérer les utilisateurs et les rôles qui lui appartiennent. Seul le rôle disposant du privilège OWNERSHIP sur un objet (c’est-à-dire l’utilisateur ou le rôle), ou un rôle supérieur, peut modifier les propriétés de l’objet.
- SYSADMIN:
(alias Administrateur système)
Rôle qui a les privilèges pour créer des entrepôts et des bases de données (et d’autres objets) dans un compte.
Si, en tant que recommandé, vous créez une hiérarchie de rôles qui affecte tous les rôles personnalisés au rôle SYSADMIN , ce rôle a également la possibilité d’accorder des privilèges sur les entrepôts, les bases de données et d’autres objets à d’autres rôles.
- PUBLIC:
Pseudo-rôle qui est automatiquement attribué à chaque utilisateur et à chaque rôle de votre compte. Le rôle PUBLIC peut posséder des objets sécurisables, comme n’importe quel autre rôle. Cependant, les objets appartenant au rôle sont, par définition, disponibles pour tous les autres utilisateurs et rôles dans votre compte.
Ce rôle est généralement utilisé dans les cas où un contrôle d’accès explicite n’est pas nécessaire et où tous les utilisateurs sont considérés comme égaux en ce qui concerne leurs droits d’accès.
Rôles personnalisés¶
Les rôles de compte personnalisés peuvent être créés par le rôle USERADMIN (ou un rôle supérieur) ainsi que par tout rôle auquel le privilège CREATE ROLE a été accordé.
Les rôles de base de données personnalisés peuvent être créés par le propriétaire de la base de données (c’est-à-dire le rôle qui dispose du privilège OWNERSHIP sur la base de données).
Par défaut, un rôle nouvellement créé n’est affecté à aucun utilisateur ni accordé à aucun autre rôle.
Lorsque vous créez des rôles qui serviront de propriétaires d’objets sécurisables dans le système, Snowflake recommande de créer une hiérarchie des rôles personnalisés, en attribuant le rôle personnalisé le plus élevé au rôle système SYSADMIN. Cette structure de rôles permet aux administrateurs système de gérer tous les objets du compte, tels que les entrepôts et les objets de base de données, tout en limitant la gestion des utilisateurs et des rôles au rôle USERADMIN.
Inversement, si un rôle personnalisé n’est pas affecté à SYSADMIN via une hiérarchie de rôles, les administrateurs système ne peuvent pas gérer les objets appartenant au rôle. Seuls les rôles auxquels le privilège MANAGE GRANTS a été accordé (uniquement le rôle SECURITYADMIN par défaut) peuvent visualiser les objets et modifier leurs droits d’accès.
Pour des instructions sur la création de rôles personnalisés, voir Création de rôles personnalisés.
Privilèges¶
Les privilèges de contrôle d’accès déterminent qui peut accéder et effectuer des opérations sur des objets spécifiques dans Snowflake. Pour chaque objet sécurisable, il existe un ensemble de privilèges qui peuvent lui être accordés. Pour les objets existants, des privilèges doivent être accordés sur des objets individuels (comme le privilège SELECT sur la table mytable
). Pour simplifier la gestion des autorisations, les autorisations futures permettent de définir un ensemble initial de privilèges sur les objets créés dans un schéma (par exemple, accorder le privilège SELECT sur toutes les nouvelles tables créées dans le schéma myschema
à un rôle spécifié).
Les privilèges sont gérés à l’aide des commandes suivantes :
Dans les schémas classiques (non gérés), l’utilisation de ces commandes est limitée au rôle propriétaire d’un objet (qui dispose du privilège OWNERSHIP sur l’objet), à tous les rôles ou utilisateurs qui disposent du privilège global MANAGE GRANTS pour l’objet (uniquement le rôle SECURITYADMIN par défaut).
Dans les schémas d’accès gérés, les propriétaires d’objet ne peuvent plus prendre de décision. Seuls le propriétaire du schéma ou un rôle disposant du privilège MANAGE GRANTS peuvent octroyer des privilèges sur les objets du schéma, notamment des autorisations futures, centralisant ainsi la gestion des privilèges.
Notez qu’un rôle qui détient le privilège global MANAGE GRANTS peut accorder des privilèges supplémentaires au rôle actuel (concédant).
Pour plus de détails, voir Privilèges de contrôle d’accès.
Hiérarchie des rôles et héritage des privilèges¶
Le diagramme suivant illustre la hiérarchie des rôles définis par le système, ainsi que la structure recommandée pour les rôles supplémentaires de compte définis par l’utilisateur et les rôles de base de données. Le rôle de base de données de plus haut niveau dans la hiérarchie de l’exemple est accordé à un rôle de compte personnalisé (défini par l’utilisateur). À son tour, ce rôle est accordé à un autre rôle personnalisé dans une structure recommandée qui permet au rôle SYSADMIN défini par le système d’hériter des privilèges des rôles de compte personnalisés et des rôles de base de données :

Note
ORGADMIN est un rôle système distinct qui gère les opérations au niveau de l’organisation. Ce rôle n’est pas inclus dans la hiérarchie des rôles du système.
Pour un exemple plus spécifique de hiérarchie des rôles et d’héritage des privilèges, imaginez le scénario suivant :
Le rôle 3 a été attribué au rôle 2.
Le rôle 2 a été attribué au rôle 1.
Le rôle 1 a été attribué à l’utilisateur 1.

Dans ce scénario :
Le rôle 2 hérite du privilège C.
Le rôle 1 hérite des privilèges B et C.
L’utilisateur 1 a les trois privilèges.
Pour obtenir des instructions sur la création d’une hiérarchie des rôles, voir Création d’une hiérarchie de rôles.
Rôles et hiérarchies des rôles dans les bases de données¶
Les limitations suivantes s’appliquent actuellement aux rôles de bases de données :
Si un rôle de base de données est accordé à un partage, aucun autre rôle de base de données ne peut être accordé à ce rôle de base de données. Par exemple, si le rôle de base de données
d1.r1
est accordé à un partage, la tentative d’accorder le rôle de base de donnéesd1.r2
àd1.r1
est bloquée.En outre, si un rôle de base de données est accordé à un autre rôle de base de données, le rôle de base de données du bénéficiaire ne peut pas être accordé à un partage.
Les rôles de base de données qui sont accordés à un partage peuvent être accordés à d’autres rôles de base de données, ainsi qu’à des rôles de compte.
Les rôles de compte ne peuvent pas être accordés aux rôles de base de données dans une hiérarchie de rôles.