clickhouse-client セッションを提供する、実験的なブラウザ内インターフェイスです。任意の ClickHouse HTTP ポートの /webterminal パスで提供されます。
ウェブターミナルは実験的な機能であり、デフォルトでは無効になっています。詳細については、以下の機能の有効化を参照してください。
機能を有効にする
/webterminal エンドポイントは、allow_experimental_webterminal サーバー設定で制御されます。この設定が false (デフォルト) の場合、/webterminal へのリクエストには HTTP ステータス 403 Forbidden が返されます。
これを有効にするには、サーバー構成に次の内容を追加します。
/webterminal (たとえば http://localhost:8123/webterminal) にアクセスして、ターミナルを開きます。
認証
Session およびアクセス制御のチェックでユーザーを認証しますが、credentials は HTTP のアップグレードリクエスト経由ではなく、確立済みの WebSocket connection 上でインバンドにやり取りされます。WebSocket ハンドシェイクが完了すると、ブラウザーは最初のメッセージを JSON として送信します。
Authorization ヘッダーに含めずに済みます。こうした場所に含めると、認証情報がブラウザの履歴、サーバーのアクセスログ、リバースプロキシのログに残るおそれがあります。アップグレードリクエストの URL パラメータ、HTTP Basic、および X-ClickHouse-User/X-ClickHouse-Key ヘッダーは、/webterminal では意図的に 参照されません。
無効な認証情報が指定されると、サーバーはコード 1008 で WebSocket を閉じ、ブラウザの UI は認証情報の再入力を求めます。
セッションの動作
clickhouse-client を実行し、その入出力を WebSocket 経由で中継します。このセッションでは、以下を含む clickhouse-client の完全な操作環境を利用できます。
- シンタックスハイライト。
- 自動補完。
- 複数行クエリ。
- コマンド履歴 (セッションの継続中はサーバー側に保存されます) 。
/play とのインテグレーション
/play Web SQL UI には、ウェブターミナルがドッキング可能なパネルとして組み込まれています。表示は、サイドバーの端末アイコンで切り替えるか、クエリエディタが空の状態で ~ キーを押して切り替えます。/play ページは読み込み時に /webterminal が利用可能かどうかを判定し、エンドポイントが利用できない場合 (たとえば、実験的な設定が有効になっていない場合) には端末コントロールを非表示にします。
セキュリティに関する考慮事項
- 信頼できない環境では、認証情報とセッショントラフィックを保護するため、常に
/webterminalを HTTPS 経由で提供してください。 - HTTP プロトコルへのアクセスを制限するのと同様に、ネットワークレベル (ファイアウォール、リバースプロキシ、または
listen_host設定) でアクセスを制限してください。 - このエンドポイントは、クロスオリジン WebSocket ハイジャックを防ぐために、
OriginヘッダーをHostと照合して検証します。外部で TLS を終端する場合は、それに応じてリバースプロキシを設定してください。 - TLS を終端するリバースプロキシの背後では、ブラウザが
httpsを使用していても、ClickHouse への上流接続は平文のhttpになるため、厳密な same-origin チェックによって正当な接続が拒否されます。このようなデプロイメントでは、WebSocket セッションを開くことを許可する完全なオリジンのカンマ区切りリストとしてwebterminal_allowed_originsを設定してください。この設定が空でない場合、デフォルトの same-origin チェックの代わりに使用されます。例:<webterminal_allowed_origins>https://example.com,https://app.example.com:8443</webterminal_allowed_origins>。
プラットフォーム対応状況
clickhouse-client ランナーで使用される擬似端末レイヤーは、移植性のある POSIX プリミティブ (posix_openpt/grantpt/unlockpt) をベースに実装されており、Linux 固有のパスではスレッドセーフな ptsname_r を使用します。ClickHouse のスタートページおよび /play の /webterminal へのリンクは、エンドポイントを利用できない場合 (たとえば、allow_experimental_webterminal が有効になっていない場合) に自動的に非表示になります。