Skip to main content
As contas de serviço de banco de dados podem ser tão simples quanto um usuário com uma senha ou certificado separado para autenticação. Usuários mais avançados podem querer configurar contas nas quais o escopo das permissões possa ser alterado dinamicamente com SET ROLE, para permitir a alternância rápida entre perfis sem sair da sessão nem recarregar o conteúdo.

Visão geral

SET ROLE pode ser usado para definir dinamicamente o escopo das permissões de uma conta de serviço durante uma sessão. Isso funciona limitando as permissões efetivas de um usuário apenas àquelas concedidas pelo(s) role(s) ativado(s). Essa abordagem tem várias vantagens:
  • Contas de serviço podem receber vários roles, mas ativar apenas o necessário para uma consulta específica.
  • Invasores só podem usar as permissões do role ativo se a conta de serviço for comprometida.
  • Uma única conta pode executar tarefas diversas alternando entre roles, em vez de exigir credenciais separadas para cada tarefa.
  • As permissões podem ser atualizadas para toda uma classe de contas de serviço modificando um role, em vez de atualizar usuários individuais.
  • Os logs podem rastrear qual role específico estava ativo durante uma consulta, fornecendo um contexto mais claro para auditorias de segurança.
Na prática, você:
  1. Projeta roles que definem os limites permitidos (read_only, maintenance etc.)
  2. Concede esses roles à conta de serviço
  3. No momento da conexão, escolhe o(s) role(s) ativo(s) por meio de SET ROLE (ou do parâmetro de role), restringindo assim o que essa sessão pode fazer

Configure uma role de serviço

1

Conceda roles à conta de serviço

Primeiro, crie roles com os privilégios/configurações desejados e, em seguida, conceda-as à conta de serviço.
2

Use SET ROLE para definir limites da sessão

No início de uma sessão, a conta de serviço escolhe quais roles ficam ativas:
ou:
SET ROLE ativa roles para o usuário atual; os privilégios efetivos são a união de todas as roles ativas, além daqueles concedidos diretamente ao usuário.Você também pode desativar todas as roles:
ou ativar várias roles:
As roles ativas no momento podem ser consultadas em system.current_roles.
3

Defina roles padrão para a conta de serviço

Para garantir que a conta de serviço sempre inicie em modo restrito, configure as roles padrão:
ou
4

Uso de SET ROLE via HTTP / programaticamente

Se a conta de serviço se conectar via HTTP, você não poderá enviar SET ROLE; SELECT … como múltiplas instruções. Em vez disso, passe a role como um parâmetro de consulta:
?role=… equivale a executar SET ROLE read_only_role antes da instrução. Vários parâmetros role se comportam como SET ROLE role 1, role 2.Alguns drivers (por exemplo, ClickHouse Connect para Python) também expõem uma configuração de role que é enviada com cada requisição e que o servidor usa como role da sessão.
Última modificação em 23 de julho de 2026