Visão geral
- 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.
- Projeta roles que definem os limites permitidos (read_only, maintenance etc.)
- Concede esses roles à conta de serviço
- 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:ou ativar várias roles:As roles ativas no momento podem ser consultadas em
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: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.