clickhouse-client 세션을 제공하는 실험적인 브라우저 기반 인터페이스입니다. 모든 ClickHouse HTTP 포트의 /webterminal 경로에서 제공됩니다.
웹 터미널은 실험적 기능이며 기본적으로 비활성화되어 있습니다. 자세한 내용은 아래의 기능 활성화를 참조하십시오.
기능 활성화
/webterminal endpoint는 allow_experimental_webterminal server setting으로 제어됩니다. 이 설정이 false(기본값)이면 /webterminal에 대한 요청은 HTTP 상태 403 Forbidden을 반환합니다.
활성화하려면 서버 구성에 다음 내용을 추가하세요:
/webterminal로 이동하십시오(예: http://localhost:8123/webterminal).
인증
Session 및 접근 제어 확인 절차를 사용해 사용자를 인증하지만, 자격 증명은 HTTP 업그레이드 요청을 통해 전달되는 것이 아니라 이미 설정된 WebSocket 연결 내에서 인밴드 방식으로 교환됩니다. WebSocket 핸드셰이크가 완료되면 브라우저는 첫 번째 메시지를 JSON으로 전송합니다:
Authorization 헤더에 자격 증명을 넣지 않아도 되므로, 자격 증명이 브라우저 이력, 서버 액세스 로그, 리버스 프록시 로그에 남을 수 있는 위험을 피할 수 있습니다. /webterminal은 업그레이드 요청의 URL 매개변수, HTTP Basic, X-ClickHouse-User/X-ClickHouse-Key 헤더를 의도적으로 확인하지 않습니다.
잘못된 자격 증명이 제공되면 server가 코드 1008로 WebSocket 연결을 종료하고, 브라우저 UI는 자격 증명을 다시 입력하라는 메시지를 표시합니다.
세션 화면
clickhouse-client를 실행하고, 해당 입출력을 WebSocket을 통해 중계합니다. 이 세션은 다음을 포함해 clickhouse-client의 전체 기능을 지원합니다.
- 구문 강조.
- 자동 완성.
- 여러 줄 쿼리.
- 명령 이력(세션이 유지되는 동안 서버 측에 저장됨).
/play과의 통합
/play Web SQL UI에는 웹 터미널이 도킹 가능한 패널로 내장되어 있습니다. 사이드바의 터미널 아이콘으로 표시하거나 숨길 수 있으며, 쿼리 편집기가 비어 있을 때는 ~ 키를 누르십시오. /play 페이지는 로드 시점에 /webterminal의 사용 가능 여부를 감지하며, endpoint를 사용할 수 없으면(예를 들어 experimental 설정이 활성화되어 있지 않은 경우) 터미널 컨트롤을 숨깁니다.
보안 고려 사항
- 자격 증명과 세션 트래픽을 보호하려면 신뢰할 수 없는 환경에서
/webterminal은 항상 HTTPS로 제공하십시오. - HTTP 프로토콜에 대한 접근을 제한하는 것과 동일한 방식으로 네트워크 수준에서 접근을 제한하십시오(방화벽, 리버스 프록시 또는
listen_host구성). - 이 엔드포인트는 교차 출처 WebSocket 하이재킹을 완화하기 위해
Origin헤더를Host와 대조하여 검증합니다. 외부에서 TLS를 종료하는 경우 이에 맞게 리버스 프록시를 구성하십시오. - TLS를 종료하는 리버스 프록시 뒤에서는 브라우저가
https를 사용하더라도 ClickHouse로의 업스트림 연결은 일반http이므로, 엄격한 동일 출처 검사가 정상적인 연결을 거부하게 됩니다. 이러한 배포에서는 WebSocket 세션을 열 수 있도록 허용할 전체 origin 목록을 쉼표로 구분해webterminal_allowed_origins에 설정하십시오. 이 설정이 비어 있지 않으면 기본 동일 출처 검사를 대체합니다. 예시:<webterminal_allowed_origins>https://example.com,https://app.example.com:8443</webterminal_allowed_origins>.
플랫폼 지원
clickhouse-client 실행기에 사용되는 의사 터미널 계층은 이식 가능한 POSIX 기본 요소(posix_openpt/grantpt/unlockpt)를 기반으로 구현되며, Linux 전용 경로에서는 스레드 안전한 ptsname_r를 사용합니다. endpoint를 사용할 수 없으면(예: allow_experimental_webterminal이 enabled 상태가 아닌 경우) ClickHouse 시작 페이지와 /play의 /webterminal 링크가 자동으로 숨겨집니다.