Passer au contenu principal
Les comptes de service de base de données peuvent être aussi simples qu’un utilisateur disposant d’un mot de passe distinct ou d’un certificat pour l’authentification. Les utilisateurs plus avancés peuvent vouloir configurer des comptes dont le périmètre des autorisations peut être modifié dynamiquement avec SET ROLE, afin de passer rapidement d’un profil à l’autre sans se déconnecter ni recharger la page.

Vue d’ensemble

SET ROLE peut être utilisé pour définir dynamiquement le périmètre des permissions d’un compte de service pendant une session. Cela fonctionne en limitant les permissions effectives d’un utilisateur à celles accordées par le ou les rôles activés. Cette approche présente plusieurs avantages :
  • Les comptes de service peuvent se voir attribuer plusieurs rôles, mais n’activer que celui nécessaire pour une requête donnée.
  • Si le compte de service est compromis, les attaquants ne peuvent utiliser que les permissions du rôle actif.
  • Un même compte peut exécuter diverses tâches en changeant de rôle, plutôt qu’en nécessitant des identifiants distincts pour chaque tâche.
  • Les permissions peuvent être mises à jour pour toute une catégorie de comptes de service en modifiant un seul rôle, au lieu de mettre à jour chaque utilisateur individuellement.
  • Les journaux peuvent indiquer précisément quel rôle était actif pendant une requête, ce qui fournit un contexte plus clair pour les audits de sécurité.
En pratique, vous :
  1. Concevez des rôles qui définissent les limites autorisées (read_only, maintenance, etc.)
  2. Les accordez au compte de service
  3. Au moment de la connexion, choisissez le ou les rôles actifs via SET ROLE (ou le paramètre de rôle), ce qui limite ainsi ce que cette session peut faire

Configurer un rôle de service

1

Accorder des rôles au compte de service

Commencez par créer des rôles avec les privilèges/paramètres souhaités, puis accordez-les au compte de service.
2

Utiliser SET ROLE pour définir les limites de la session

Au début d’une session, le compte de service choisit quels rôles sont actifs :
ou :
SET ROLE active les rôles pour l’utilisateur actuel ; les privilèges effectifs correspondent à l’union de tous les rôles actifs, plus ceux accordés directement à l’utilisateur.Vous pouvez également désactiver tous les rôles :
ou activer plusieurs rôles :
Les rôles actuellement actifs peuvent être consultés via system.current_roles.
3

Définir les rôles par défaut pour le compte de service

Pour garantir que le compte de service démarre toujours dans un mode restreint, configurez les rôles par défaut :
ou
4

Utiliser SET ROLE via HTTP / par programmation

Si le compte de service se connecte via HTTP, vous ne pouvez pas envoyer SET ROLE; SELECT … sous forme de requête multi-instruction. À la place, transmettez le rôle comme paramètre de requête :
?role=… équivaut à exécuter SET ROLE read_only_role avant l’instruction. Plusieurs paramètres de rôle se comportent comme SET ROLE role 1, role 2.Certains drivers (par exemple ClickHouse Connect for Python) exposent également un paramètre de rôle envoyé avec chaque requête, que le serveur utilise comme rôle de session.
Dernière modification le 25 juin 2026