Gestion des utilisateurs, des rôles et des attributions Snowflake avec Python¶
Vous pouvez utiliser Python pour gérer les utilisateurs, les rôles et les autorisations de Snowflake. Pour plus d’informations sur la gestion des utilisateurs et de leurs privilèges dans Snowflake, consultez Gestion des utilisateurs.
Conditions préalables¶
Les exemples de cette rubrique supposent que vous ayez ajouté le code nécessaire pour vous connecter à Snowflake et créer un objet Root
à partir duquel utiliser les Snowflake Python APIs.
Par exemple, le code suivant utilise les paramètres de connexion définis dans un fichier de configuration pour créer une connexion à Snowflake.
from snowflake.core import Root
from snowflake.snowpark import Session
session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
En utilisant l’objet Session
obtenu, le code crée un objet Root
pour utiliser les types et les méthodes de l’API. Pour plus d’informations, voir Connexion à Snowflake avec Snowflake Python APIs.
Gestion des utilisateurs¶
Vous pouvez gérer les utilisateurs dans Snowflake. Un utilisateur est un objet au niveau du compte dans Snowflake. Les Snowflake Python APIs représentent des utilisateurs avec deux types distincts :
User
: expose les propriétés d’un utilisateur, telles que son nom.UserResource
: expose des méthodes que vous pouvez utiliser pour extraire un objetUser
correspondant et pour supprimer l’utilisateur.
Création d’un utilisateur¶
Vous pouvez créer un utilisateur en appelant la méthode UserCollection.create
et en lui transmettant un objet User
représentant l’utilisateur que vous souhaitez créer. Pour créer un utilisateur, commencez par créer un objet User
qui spécifie le nom de l’utilisateur.
Le code de l’exemple suivant crée un objet User
représentant un utilisateur nommé my_user
puis crée l’utilisateur en transmettant l’objet User
à la méthode UserCollection.create
:
from snowflake.core.user import User
my_user = User(name="my_user")
root.users.create(my_user)
Obtention d’informations sur les utilisateurs¶
Vous pouvez obtenir des informations sur un utilisateur en appelant la méthode UserResource.fetch
, qui renvoie un objet User
.
Le code de l’exemple suivant permet d’obtenir des informations sur un utilisateur nommé my_user
:
my_user = root.users["my_user"].fetch()
print(my_user.to_dict())
Affichage des utilisateurs¶
Vous pouvez répertorier les utilisateurs en utilisant la méthode iter
, qui renvoie un itérateur PagedIter
.
Le code de l’exemple suivant répertorie les utilisateurs dont le nom commence par my
:
users = root.users.iter(like="my%")
for user in users:
print(user.name)
Suppression d’un utilisateur¶
Vous pouvez supprimer un utilisateur en utilisant la méthode UserResource.drop
.
Le code dans l’exemple suivant supprime l’utilisateur my_user
:
my_user_res = root.users["my_user"]
my_user_res.drop()
Gestion des rôles¶
Vous pouvez gérer les rôles dans Snowflake. Un rôle est un objet au niveau du compte. Les Snowflake Python APIs représentent des rôles avec deux types distincts :
Role
: expose les propriétés d’un rôle telles que son nom.RoleResource
: expose des méthodes que vous pouvez utiliser pour extraire un objetRole
correspondant et pour supprimer le rôle.
Création d’un rôle¶
Pour créer un rôle, commencez par créer un objet Role
qui spécifie le nom du rôle.
Le code de l’exemple suivant crée un objet Role
représentant un rôle nommé my_role
:
from snowflake.core.role import Role
my_role = Role(name="my_role")
root.roles.create(my_role)
Le code crée ensuite le rôle en transmettant l’objet Role
à la méthode RoleCollection.create
.
Utilisation d’un rôle dans une session¶
Le code de l’exemple suivant applique le rôle my_role
dans la session en cours.
root.session.use_role("my_role")
Affichage des rôles¶
Vous pouvez répertorier les rôles dans un compte en utilisant la méthode iter
. La méthode renvoie un itérateur PagedIter
d’objets Role
.
Le code de l’exemple suivant répertorie tous les noms de rôles dans un compte :
role_list = root.roles.iter()
for role_obj in role_list:
print(role_obj.name)
Suppression d’un rôle¶
Vous pouvez supprimer un rôle en utilisant la méthode RoleResource.drop
.
Le code dans l’exemple suivant supprime le rôle my_role
:
my_role_res = root.roles["my_role"]
my_role_res.drop()
Gestion des rôles de bases de données¶
Vous pouvez gérer des rôles de bases de données dans Snowflake. Un rôle de base de données est un objet au niveau de la base de données. Les Snowflake Python APIs représentent des rôles de base de données avec deux types distincts :
DatabaseRole
: expose les propriétés d’un rôle de base de données telles que son nom et un commentaire.DatabaseRoleResource
: expose des méthodes que vous pouvez utiliser pour extraire un objetDatabaseRole
correspondant et pour supprimer le rôle de base de données.
Création d’un rôle de base de données¶
Pour créer un rôle de base de données, commencez par créer un objet DatabaseRole
qui spécifie le nom du rôle.
Le code de l’exemple suivant crée un objet DatabaseRole
représentant un rôle de base de données nommé my_db_role
:
from snowflake.core.database_role import DatabaseRole
my_db_role = DatabaseRole(
name="my_db_role",
comment="sample comment"
)
my_db_role_ref = root.databases['my_db'].database_roles.create(my_db_role)
Le code crée ensuite le rôle de base de données en transmettant l’objet DatabaseRole
à la méthode DatabaseRoleCollection.create
.
Clonage d’un rôle de base de données¶
Le code de l’exemple suivant crée un rôle de base de données nommé dr2
dans la base de données cible my_db_2
en tant que copie du rôle de base de données existant dr1
dans la base de données my_db
.
database_role_ref = root.databases['my_db'].database_roles['dr1'].clone(target_database_role='dr2', target_database='my_db_2')
Affichage des rôles de base de données¶
Vous pouvez répertorier les rôles de base de données dans un compte à l’aide de la méthode iter
. La méthode renvoie un itérateur PagedIter
d’objets DatabaseRole
.
Le code de l’exemple suivant répertorie le rôle de base de données nommé my_db_role
dans la base de données my_db
, limitant le nombre de résultats à 1
:
db_role_list = root.databases['my_db'].database_roles.iter(limit=1, from_name='my_db_role')
for db_role_obj in db_role_list:
print(db_role_obj.name)
Suppression d’un rôle de base de données¶
Vous pouvez supprimer un rôle de base de données à l’aide de la méthode DatabaseRoleResource.drop
.
Le code dans l’exemple suivant supprime le rôle de la base de données my_db_role
:
root.databases['my_db'].database_roles['my_db_role'].drop()
Gestion des privilèges d’accès¶
Vous pouvez utiliser l’API pour gérer les privilèges d’accès sur un objet Snowflake sécurisable à un rôle de compte, un rôle de base de données ou un utilisateur. Pour plus d’informations sur les rôles, les objets sécurisables et le framework de contrôle d’accès dans Snowflake, consultez Aperçu du contrôle d’accès.
Pour les rôles de compte¶
Les exemples de code suivants illustrent les opérations d’APIpermettant d’accorder des privilèges, de révoquer des privilèges et de répertorier les autorisations pour les rôles de compte.
Accorder des privilèges¶
from snowflake.core.role import Securable
root.roles['my_role'].grant_privileges(
privileges=["OPERATE"], securable_type="WAREHOUSE", securable=Securable(name='my_wh')
)
Accorder un rôle¶
from snowflake.core.role import Securable
root.roles['my_role'].grant_role(role_type="ROLE", role=Securable(name='my_role_1'))
Accorder des privilèges sur tout¶
from snowflake.core.role import ContainingScope
root.roles['my_role'].grant_privileges_on_all(
privileges=["SELECT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Accorder des privilèges futurs¶
from snowflake.core.role import ContainingScope
root.roles['my_role'].grant_future_privileges(
privileges=["SELECT", "INSERT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Révoquer les privilèges¶
from snowflake.core.role import Securable
root.roles['my_role'].revoke_privileges(
privileges=["OPERATE"], securable_type="WAREHOUSE", securable=Securable(name='my_wh')
)
Révoquer le rôle¶
from snowflake.core.role import Securable
root.roles['my_role'].revoke_role(role_type="ROLE", role=Securable(name='my_role_1'))
Révoquer des privilèges sur tout¶
from snowflake.core.role import ContainingScope
root.roles['my_role'].revoke_privileges_on_all(
privileges=["SELECT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Révoquer des privilèges futurs¶
from snowflake.core.role import ContainingScope
root.roles['my_role'].revoke_future_privileges(
privileges=["SELECT", "INSERT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Révoquer l’option d’accord de privilèges¶
from snowflake.core.role import Securable
root.roles['my_role'].revoke_grant_option_for_privileges(
privileges=["OPERATE"], securable_type="WAREHOUSE", securable=Securable(name='my_wh')
)
Révoquer l’option d’accord de privilèges sur tout¶
from snowflake.core.role import ContainingScope
root.roles['my_role'].revoke_grant_option_for_privileges_on_all(
privileges=["SELECT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Révoquer l’option d’accord de privilèges futurs¶
from snowflake.core.role import ContainingScope
root.roles['my_role'].revoke_grant_option_for_future_privileges(
privileges=["SELECT", "INSERT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Afficher les autorisations accordées au rôle¶
root.roles['my_role'].iter_grants_to()
Afficher les autorisations accordées sur le rôle¶
root.roles['my_role'].iter_grants_on()
Afficher les autorisations du rôle¶
root.roles['my_role'].iter_grants_of()
Afficher les autorisations futures accordées au rôle¶
root.roles['my_role'].iter_future_grants_to()
Pour les utilisateurs¶
Les exemples de code suivants illustrent les opérations d’API permettant d’accorder un rôle, de révoquer un rôle et de répertorier les rôles des utilisateurs.
Accorder un rôle à un utilisateur¶
from snowflake.core.user import Securable
root.users['my_user'].grant_role(role_type="ROLE", role=Securable(name='my_role'))
Révoquer le rôle d’un utilisateur¶
from snowflake.core.user import Securable
root.users['my_user'].revoke_role(role_type="ROLE", role=Securable(name='my_role'))
Attribuer des rôles accordés à un utilisateur¶
root.users['my_user'].iter_grants_to()
Pour les rôles de base de données¶
Les exemples de code suivants illustrent les opérations d’APIpermettant d’accorder des privilèges, de révoquer des privilèges et de répertorier les accords pour des rôles de base de données.
Accorder des privilèges¶
from snowflake.core.database_role import Securable
root.databases['my_db'].database_roles['my_db_role'].grant_privileges(
privileges=["MODIFY"], securable_type="DATABASE", securable=Securable(name='my_db')
)
Accorder un rôle¶
from snowflake.core.database_role import Securable
root.databases['my_db'].database_roles['my_db_role'].grant_role(role_type="DATABASE ROLE", role=Securable(name='my_db_role_1'))
Accorder des privilèges sur tout¶
from snowflake.core.database_role import ContainingScope
root.databases['my_db'].database_roles['my_db_role'].grant_privileges_on_all(
privileges=["SELECT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Accorder des privilèges futurs¶
from snowflake.core.database_role import ContainingScope
root.databases['my_db'].database_roles['my_db_role'].grant_future_privileges(
privileges=["SELECT", "INSERT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Révoquer les privilèges¶
from snowflake.core.database_role import Securable
root.databases['my_db'].database_roles['my_db_role'].revoke_privileges(
privileges=["MODIFY"], securable_type="DATABASE", securable=Securable(name='my_db')
)
Révoquer le rôle¶
from snowflake.core.database_role import Securable
root.databases['my_db'].database_roles['my_db_role'].revoke_role(role_type="DATABASE ROLE", role=Securable(name='my_db_role_1'))
Révoquer tous les privilèges¶
from snowflake.core.database_role import ContainingScope
root.databases['my_db'].database_roles['my_db_role'].revoke_privileges_on_all(
privileges=["SELECT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Révoquer des privilèges futurs¶
from snowflake.core.database_role import ContainingScope
root.databases['my_db'].database_roles['my_db_role'].revoke_future_privileges(
privileges=["SELECT", "INSERT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Révoquer l’option d’accord de privilèges¶
from snowflake.core.database_role import Securable
root.databases['my_db'].database_roles['my_db_role'].revoke_grant_option_for_privileges(
privileges=["MODIFY"], securable_type="DATABASE", securable=Securable(name='my_db')
)
Révoquer l’option d’accord de privilèges sur tout¶
from snowflake.core.database_role import ContainingScope
root.databases['my_db'].database_roles['my_db_role'].revoke_grant_option_for_privileges_on_all(
privileges=["SELECT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Révoquer l’option d’accord de privilèges futurs¶
from snowflake.core.database_role import ContainingScope
root.databases['my_db'].database_roles['my_db_role'].revoke_grant_option_for_future_privileges(
privileges=["SELECT", "INSERT"],
securable_type="TABLE",
containing_scope=ContainingScope(database='my_db', schema='my_schema'),
)
Afficher les autorisations accordées au rôle¶
root.databases['my_db'].database_roles['my_db_role'].iter_grants_to()
Afficher les autorisations futures accordées au rôle¶
root.databases['my_db'].database_roles['my_db_role'].iter_future_grants_to()
Gestion des autorisations à l’aide de la ressource Grant
— Obsolète¶
Vous pouvez exécuter les opérations GRANT <privilèges> permettant d’accorder des privilèges d’accès sur un objet Snowflake sécurisable à un rôle.
Accord de privilèges¶
Pour accorder des privilèges sur un objet Snowflake, vous créez d’abord un objet Grant
qui spécifie les attributs suivants :
grantee
: le rôle ou l’utilisateur auquel les privilèges sont accordés.securable
: l’objet Snowflake qui est sécurisé par les privilèges.privileges
: les privilèges accordés à un rôle.
Accord de privilèges CREATE dans un compte à un rôle¶
Le code dans l’exemple suivant crée un objet Grant
représentant une opération d’accord qui accorde les privilèges create_database
et create_warehouse
au rôle my_role
dans le compte Snowflake actuel. Le code exécute l’opération en utilisant la méthode root.grants.grant
.
from snowflake.core.grant import Grant
from snowflake.core.grant._grantee import Grantees
from snowflake.core.grant._privileges import Privileges
from snowflake.core.grant._securables import Securables
root.grants.grant(
Grant(
grantee=Grantees.role(name='my_role'),
securable=Securables.current_account,
privileges=[Privileges.create_database,
Privileges.create_warehouse],
)
)
Accord de privilèges sur une base de données à un rôle¶
Le code dans l’exemple suivant accorde des privilèges importés sur la base de données my_db
au rôle my_role
:
from snowflake.core.grant import Grant
from snowflake.core.grant._grantee import Grantees
from snowflake.core.grant._privileges import Privileges
from snowflake.core.grant._securables import Securables
root.grants.grant(
Grant(
grantee=Grantees.role('my_role'),
securable=Securables.database('my_db'),
privileges=[Privileges.imported_privileges],
)
)
Accorder un rôle à un autre rôle¶
L’attribution d’un rôle à un autre rôle crée une relation « parent-enfant » entre les rôles (également appelée hiérarchie des rôles).
Le code dans l’exemple suivant accorde le rôle d’utilisateur my_role
au rôle système ACCOUNTADMIN
:
from snowflake.core.grant import Grant
from snowflake.core.grant._grantee import Grantees
from snowflake.core.grant._securables import Securables
root.grants.grant(
Grant(
grantee=Grantees.role('ACCOUNTADMIN'),
securable=Securables.role('my_role'),
)
)