clickhouse-client via WebSocket. Ele está disponível em qualquer porta HTTP do ClickHouse no caminho /webterminal.
O terminal web é um recurso experimental e vem desativado por padrão; consulte Como habilitar o recurso abaixo.
Habilitando o recurso
/webterminal é controlado pela configuração de servidor allow_experimental_webterminal. Quando essa configuração está como false (o padrão), as solicitações para /webterminal retornam o status HTTP 403 Forbidden.
Para habilitá-lo, adicione o seguinte à configuração do servidor:
/webterminal em qualquer porta HTTP do ClickHouse (por exemplo, http://localhost:8123/webterminal) para abrir o terminal.
Autenticação
Session e de controle de acesso do protocolo HTTP, mas as credenciais são transmitidas pelo próprio canal da conexão WebSocket já estabelecida, em vez de pela solicitação de upgrade HTTP. Após a conclusão do handshake do WebSocket, o navegador envia a primeira mensagem em JSON:
Authorization incluídos na solicitação de upgrade, onde elas poderiam acabar no histórico do navegador, nos logs de acesso do servidor e nos logs do proxy reverso. Os parâmetros de URL, o HTTP Basic e os cabeçalhos X-ClickHouse-User/X-ClickHouse-Key na solicitação de upgrade intencionalmente não são considerados pelo /webterminal.
Credenciais inválidas fazem o servidor fechar o WebSocket com o código 1008; a interface do navegador solicita as credenciais novamente.
Como funciona a sessão
clickhouse-client conectado a um pseudoterminal e encaminha sua entrada e saída via WebSocket. A sessão oferece a experiência completa do clickhouse-client, incluindo:
- Realce de sintaxe.
- Autocompletar.
- Consultas de várias linhas.
- Histórico de comandos (armazenado no servidor durante a sessão).
Integração com /play
/play incorpora o terminal web como um painel acoplável. Ative-o pelo ícone de terminal na barra lateral ou pressione a tecla ~ quando o editor de consulta estiver vazio. A página /play detecta a disponibilidade de /webterminal ao carregar e oculta os controles do terminal quando o endpoint não está disponível (por exemplo, quando a configuração experimental não está ativada).
Considerações de segurança
- Sempre disponibilize
/webterminalpor HTTPS em ambientes não confiáveis para proteger as credenciais e o tráfego da sessão. - Restrinja o acesso no nível da rede (firewall, proxy reverso ou a configuração
listen_host) da mesma forma que você restringe o acesso ao protocolo HTTP. - O endpoint valida o cabeçalho
Originem relação aoHostpara mitigar o sequestro de WebSocket entre origens; configure os proxies reversos adequadamente se você encerrar o TLS externamente. - Por trás de um proxy reverso que encerra TLS, a conexão upstream com o ClickHouse usa
httpsimples, embora o navegador usehttps; por isso, a verificação estrita de mesma origem rejeitaria conexões legítimas. Para essas implantações, definawebterminal_allowed_originscomo uma lista, separada por vírgulas, de origens completas autorizadas a abrir sessões WebSocket; quando essa configuração não está vazia, ela substitui a verificação padrão de mesma origem. Exemplo:<webterminal_allowed_origins>https://example.com,https://app.example.com:8443</webterminal_allowed_origins>.
Disponibilidade da plataforma
clickhouse-client é implementada com base em primitivas POSIX portáveis (posix_openpt/grantpt/unlockpt), com uma implementação específica para Linux que usa o ptsname_r, que é seguro para threads. Os links para /webterminal na página inicial do ClickHouse e em /play ficam ocultos automaticamente quando o endpoint não está disponível (por exemplo, quando allow_experimental_webterminal não está habilitado).