このページはCalíope 1.7を紹介しています。私がいま作っているバージョンです。1.6は、Mac、iPad、iPhone、Apple Watch、Apple TV、Apple Vision Pro向けにApp Storeで公開中です。それぞれの機能がどのバージョンで入ったかは変更履歴に書いてあります。

すべてのトピックに「Calíopeで開く」ボタンを追加します。アプリがインストールされている場合にのみ機能します。

CassandraとScyllaDB

CQL クエリ

CQL の実行方法、選ぶべき整合性レベル、ページとトレースの届き方、停止の働き、そして CQL にないものです。

場所: ワークスペース › ツール › CQLクエリー

対象: Cassandra ScyllaDB

CQL クエリは、入力した内容を開いているセッションでサーバーに送ります。実行(⌘↩)はテキスト全体を文ごとに実行し、選択範囲があればその部分だけを実行します。BEGIN BATCH … APPLY BATCH はまとめて送られ、リテラル、$$…$$ ブロック、コメントの中の ; では区切られません。最初に失敗した文で残りは止まり、エラーがどの文かを示します(「ステートメント 2:…」)。USE はセッションのキースペースを変え、バーに表示されます。

整合性レベル
データはそれぞれ複数のレプリカにあり、整合性レベルはサーバーが応答する前にいくつのレプリカが答える必要があるかを決めます。整合性レベル で選び、その後に実行するものに適用されます。
- 既定の LOCAL_ONE はローカルのデータセンターのレプリカ 1 つを待ちます。最も速く、読み取りが直前の書き込みをまだ見ないことがあります。
- ONE、TWO、THREE は場所を問わずその数のレプリカを待ちます。
- QUORUM はレプリカの過半数、LOCAL_QUORUM はローカルのデータセンターの過半数、EACH_QUORUM は各データセンターの過半数を待ちます。QUORUM の書き込みと読み取りは必ずどこかのレプリカで重なります。
- ALL はすべてを待ち、1 つでも落ちていれば失敗します。
- ANY は書き込み専用で、SERIAL と LOCAL_SERIAL は軽量トランザクション(IF NOT EXISTS、IF …)用です。
生きているレプリカが足りなければ、サーバーは必要な数と実際の数を示すエラーを返します。「解決方法を表示」で、そのエラーを説明するDBAハンドブックの章に移動できます。これやタイムアウトなら整合性の章、Unauthorizedならロールと権限の章、構文エラーを含むそれ以外で説明のあるものはよくあるエラーの章です。

ページ
SELECT はページ単位で届き、1 ページの行数 で 1 ページあたりの行数を決めます。変えなければ 200 です。次のページ は、サーバーがまだあるかもしれないと示す間、次のページを取得します。最後のページが空で届くこともあり、そのときは「これ以上の行はありません。」と表示されます。

トレース
トレース をオンにすると、サーバーは各文の経路を記録し、フッターにそのトレースへのリンクが出ます。

表示されるもの
グリッドは各値を cqlsh と同じように書き、各列の見出しには型が付きます。JSON ビューは SELECT を SELECT JSON として再実行し、サーバーが返したものを表示します。それ以外の文には JSON はありません。サーバーの警告は帯に表示されます(「サーバーからの警告」)。たとえば Cassandra はパーティションキーのない count(*) を警告しますが、ScyllaDB は警告しません。フッターには行数、時間、実行した文の数が出ます。

書き込むもの
INSERT、UPDATE、DELETE、TRUNCATE、CREATE、ALTER、DROP、GRANT、REVOKE、そして BATCH は、先にセッションの環境ラベルのガードを通り、確認を求められることがあります。書き込みは「適用しました。CQL は書き込んだ行数を返しません。」と表示されます。プロトコルは影響した行数を返しません。

停止
実行中に 停止(⌘.)を押すと応答を待つのをやめ、接続は開いたままです。ただしプロトコルにはサーバー側で取り消す方法がなく、始まった処理はサーバーが最後まで行います。停止した UPDATE が適用されている場合があります。

CQL にないもの
EXPLAIN も複数文のトランザクションもありません。ログ付きの BATCH は全体が適用されるか、まったく適用されないかのどちらかですが、その間に読む人からは隔離されません。計画に最も近いのはトレースです。パーティションキーで絞り込まないクエリは、ALLOW FILTERING を付けない限りサーバーに拒否されます。付けるとすべてのパーティションを読むことになり、大きなテーブルでは高くつきます。たいていの答えは、別のキーを持つ別のテーブルです。

キーワード: Cassandra、ScyllaDB、CQL、クエリ、整合性、QUORUM、LOCAL_ONE、ページ、トレース、ALLOW FILTERING、BATCH、キースペース、停止

キースペースエクスプローラー

スキーマのツリー、DDL の出どころ、行のサンプル、そして主キーで編集できるものとできないもの。

場所: ワークスペース › ツール › キースペース

対象: Cassandra ScyllaDB

エクスプローラーは system_schema を読み、各キースペースをそのテーブル、マテリアライズドビュー、型、インデックス、関数、集約とともに表示します。キースペースは展開したり選んだりしたときに読み込まれ、一度にすべては読みません。空のカテゴリは描かれません。名前で絞り込む でツリーを名前で絞り込めます。サーバー自身のキースペース(system*、ScyllaDB では audit も)は最後に、折りたたまれて「サーバーのキースペース」の下に並びます。

パーティションキー
Cassandra の主キーには二つの部分があります。パーティションキー は各行がどのノードに置かれるかを決めます。同じパーティションキーの行は一緒に置かれ、効率のよいクエリはそれを完全に指定します。クラスタリング 列はパーティション内の行を、テーブルが宣言した順(ASC または DESC)に並べます。残りは通常の列で、スタティック 列は行ごとではなくパーティションごとに一つの値を持ちます。構造 は各列をその役割、位置、順序とともに表示し、主キー全体とテーブルのプロパティも示します。

DDL
DDL はサーバーが書きます。DESCRIBE で要求し、Cassandra と ScyllaDB はキースペース、テーブル、ビュー、型、インデックス、関数、集約に対してこれを受け付けます。パネルにはそこから得たことが表示されます。テーブルの DDL の後には、そのインデックスとビューが続きます。サーバーが DESCRIBE を受け付けない場合は system_schema から DDL を再構築し、パネルにもそう表示されます。関数と集約は再構築しません。DDL をコピー で全体をコピーできます。

行
サンプルは 1 ページ 100 行を、WHERE も ALLOW FILTERING もなしに、サーバーがパーティションをたどる順に読みます。これは挿入順ではありません。次のページ で次のページを取得し、行を再読み込み で最初からやり直します。パーティションのトークンを表示 は token() 列を追加します。これは各パーティションがどのノードに入るかを決める数値です。書き込み時刻と TTL の対象 は通常の列の writetime と ttl を追加します。値が書かれた時刻(マイクロ秒)と、期限切れまでの残り秒数です。キーの列、カウンター、凍結していないコレクションには使えません。

行の編集
グリッドの上の 行を挿入… と、各行の「…」メニューの 行を編集… と 行を削除… は、常に キー全体(パーティションとクラスタリング)を指定し、軽量トランザクションで書き込みます。挿入は INSERT … IF NOT EXISTS なので、既にあるキーは置き換えられません。保存は UPDATE … IF EXISTS、削除は DELETE … IF EXISTS で、行がもうサーバーにない場合はそう表示されます。保存では変わったものだけを書き、値なし(null) はセルを消します。入力した値は、送信する前にサーバーが宣言した型に変換されます。日付と時刻は UTC(2026-01-31 10:00:00)、blob は 16 進(0x…)、期間は 1h30m のように、小数は点でもカンマでも書けます。書き込んだあと、行は読み直されてその場で変わり、ページは再読み込みしません。削除の警告にはキー全体が表示されます。

ScyllaDB

ScyllaDB 2025.1では、tabletを使うキースペースは軽量トランザクションを使えず、保存はサーバーのメッセージ(「LWT is not yet supported with tablets」)で失敗します。AND tablets = {'enabled': false}で作ったキースペースは、ほかのバージョンと同じように編集できます。

ここでは編集しないもの
コレクション、UDT、タプル、custom 型、スタティック列は CQL クエリで変更します。シートにもそう表示されます。また、加算と減算しかできないカウンターテーブル、サーバーのキースペース、一行で書けない型をキーに含むテーブルも編集できません。TRUNCATE やフィルターによる削除はありません。それには CQL クエリを使います。環境ラベルが「読み出し専用」なら書き込むものは何も描かれず、「書き込みを確認」なら書き込みのたびにガードが確認します。

キーワード: cassandra、scylladb、キースペース、スキーマ、ddl、describe、パーティションキー、クラスタリング、token、writetime、ttl、行の編集、挿入、削除

クラスタ

表示するノードとその出どころ、リングの割合とは何か、ノードの停止をどう知るか、そしてこのタブで扱わないもの。

場所: ワークスペース › ツール › クラスタ

対象: Cassandra ScyllaDB

クラスタには、セッションが接続しているノード、つまりコーディネータが知っているノードを表示します。コーディネータ自身のsystem.localの行と、そのピアの行です。ピアは、Cassandraではsystem.peers_v2(ない場合はsystem.peers)から、ScyllaDBではsystem.peersから読みます。ピアには何も問い合わせません。表示されるのは、コーディネータがピアについて知っていることです。上部には、クラスタ名、パーティショナ、稼働中のノード数(稼働していないノードは一つずつ名前を表示)、そしてすべてのノードが同じスキーマバージョンを公開しているかどうかが並びます。一致していなければ、スキーマの変更がまだすべてのノードに届いていません。

リング
CassandraとScyllaDBは、データをトークンのリングに分散します。各行はパーティションキーから得られるトークンに置かれ、各ノードは自分のトークンで終わる範囲を受け持ちます(いくつ持っているかは「トークン」列でわかります)。「リングの割合」は各ノードのトークンが受け持つリングの割合で、レプリカは数えません。レプリケーション係数1のキースペースに対してnodetool statusが示す値と同じです。キースペースを指定しないnodetoolは、コピーも数えた実効的な割合を示します。3ノードで係数3なら、各ノード100%です。計算するのは既定のパーティショナであるMurmur3Partitionerの場合だけで、それ以外では列が空になり、注記でそう伝えます。

状態
ScyllaDBでは、状態はsystem.cluster_statusが示します。Cassandraではsystem_views.gossip_infoから読みますが、ここには落とし穴があります。正しく停止したノードは別れを告げて「停止」になりますが、別れを告げずに落ちたノードはNORMALのままです。そのため数秒の間隔を空けて2回読み、ハートビート(heartbeat)が進んでいなければ「停止:ハートビートなし」と表示します。参加中、離脱中、移動中のノードは、サーバの語とともに移行中と表示します。そして、コーディネータが状態の行を持たないピアは「不明」です。見えなかったノードについて、停止しているとは言いません。どの状態にも記号と名前があり、色だけでは区別しません。

更新
読み取りは自動では繰り返しません。ハートビートを測るために、毎回その数秒を待つからです。もう一度読むには「更新」を使います。読み取りに失敗し、前回の結果がある場合は、前回の結果を表示したまま、それが現在のものではないことを伝えます。

ScyllaDBのバージョン
ScyllaDBのピアは、自分のバージョンではなく、Cassandraとの互換用のバージョンを公開します。そのため列には、コーディネータのバージョンをsystem.versionsから読んで表示し、注記でそう伝えます。

ここにないもの
Cassandraのレプリケーションはリングそのもので、このタブで見られます。別のレプリカモニタはありません。クラスタは読み取るだけです。nodetoolの仕事(修復、クリーンアップ、ノードの除去や移動、スナップショット)や、JMX、ScyllaDBのREST APIの仕事は扱いません。

キーワード: Cassandra、ScyllaDB、クラスタ、リング、ノード、トークン、コーディネータ、ゴシップ、ハートビート、NODETOOL、データセンター、ラック、スキーマのバージョン

ノード

接続中のノードが自分について伝えること(バージョン、キャッシュ、コンパクション、ディスク、レイテンシ、設定)、製品ごとの出どころ、そして`nodetool`に任せるもの。

場所: ワークスペース › ツール › ノード

対象: Cassandra ScyllaDB

ノードには、セッションが接続しているノードが自分について伝えることを、その仮想テーブルから読んで表示します。Cassandraではsystem_views、ScyllaDBではsystemのテーブルです。すべてそのノードのものです。ピアには何も問い合わせません。クラスタでは、ノードごとにキャッシュ、コンパクション、ディスクがあります。別のノードを見るには、セッションをそのノードに接続します。

上部
「バージョン」はサーバのバージョンです。Cassandraではsystem.local、ScyllaDBではsystem.versionsから読みます。ScyllaDBのものは、Cassandraとの互換用ではなく、ScyllaDB自身のバージョンです。続いてキャッシュごとにカードが並び、ヒット率、エントリ数、容量のうちどれだけ使っているかを示します。Cassandraではキー、行、カウンタのキャッシュで、system_views.cachesから読みます。ScyllaDBでは「行キャッシュ」で、system.runtime_infoのcacheグループから読みます。容量0のキャッシュはサーバの設定で無効になっています(Cassandraの行キャッシュは最初からそうです)。カードにもそう表示します。「実行中のコンパクション」は今実行中のものを数えます。Cassandraではsystem_views.sstable_tasksから進捗とともに読みます。ScyllaDBではsystem.compactions_in_progressから読み、進捗はありませんが、入力になるSSTableの数がわかります。実行中のものがあれば、その下に表が出ます。

セクション
その下にセクションごとの表が並び、どのセクションを出すかは製品ごとに決まっています。サーバが公開していないものは描きません。
- 「スレッドプール」(Cassandraのみ、system_views.thread_pools):各プールの実行中、保留中、ブロック中のタスク。ノードが処理に追いついているかは、保留中とブロック中でわかります。
- 「テーブルごとのレイテンシ」(Cassandraのみ、coordinator_read_latencyとcoordinator_write_latency):読み取りと書き込みのp50とp99(ミリ秒)。このノードがコーディネータとして受けたリクエストについて見るレイテンシで、レプリカのものではありません。
- 「テーブルごとのサイズ」:Cassandraではsystem_views.disk_usageのディスク使用量で、MiB単位に切り上げます。ScyllaDBではsystem.size_estimatesの推定値をテーブルごとに合計したもので、まだディスクに書き出されていないテーブルは0になります。ScyllaDBがインデックスや軽量トランザクション用に作るテーブル(…$paxos)も、実際に容量を使うので含めます。
- 「大きなパーティション」:Cassandraではsystem_views.max_partition_sizeから、各テーブルの最大のパーティションを示します。ScyllaDBではsystem.large_partitionsから、コンパクション時にサーバのしきい値を超えたものだけを示すので、空なのが普通です。
- 「コンパクションの履歴」:system.compaction_historyの最新100件のコンパクションと、読み取った量、書き込んだ量、そして横に総数。
- 「稼働中の数値」:サーバが公開するカウンタを、その名前のまま示します。Cassandraではsystem_views.cql_metrics、ScyllaDBではsystem.runtime_infoで、ScyllaDBは稼働時間もサーバの書き方のまま伝えます。
- 「設定」:ノードが動いている設定で、Cassandraではsystem_views.settings、ScyllaDBではsystem.configから読みます。ScyllaDBは各値の出どころも示します。「設定を絞り込む」で名前によって一覧を絞り込めます。

サイズ、パーティション、レイテンシでは、サーバのキースペースを除きます。履歴は除きません。読み取れないセクションがあれば、どれがなぜ読めなかったかを伝え、ほかのセクションはそのまま表示します。

更新
読み取りは自動では繰り返しません。もう一度読むには「更新」を使います。読み取りに失敗し、前回の結果がある場合は、前回の結果を表示したまま、それが現在のものではないことを伝えます。

ここにないもの
ノードは読み取るだけです。nodetoolの仕事(メムテーブルのフラッシュ、コンパクションの開始や停止、ログレベルの変更、インデックスの再構築)や、JMX、ScyllaDBのREST APIの仕事は扱いません。設定もここでは変更しません。サーバの設定で変更します。

キーワード: Cassandra、ScyllaDB、ノード、バージョン、キャッシュ、ヒット率、コンパクション、SSTABLE、スレッドプール、レイテンシ、ディスク、サイズ、大きなパーティション、設定、稼働時間、NODETOOL、JMX

クライアント

接続中のノードが開いている接続と、そのユーザ、ドライバ、プロトコル、TLS。どれがCalíopeの接続か、そしてここから切断しない理由。

場所: ワークスペース › ツール › クライアント

対象: Cassandra ScyllaDB

クライアントには、セッションが接続しているノードで開いている接続を、そのノード自身が公開するとおりに表示します。Cassandraではsystem_views.clients、ScyllaDBではsystem.clientsです。そのノードの接続だけです。ノードはそれぞれ自分の接続だけを公開するので、クライアントがクラスタの別のノードと開いている接続はここには出ません。それを見るには、セッションをそのノードに接続します。

列
- 「クライアント」:接続元のアドレスとポート。サーバがホスト名を知っていて、それがアドレスそのものでなければ、その下にホスト名を示します。
- 「ユーザ」:認証に使ったユーザ。
- 「ドライバ」:接続時にドライバが名乗った名前とバージョン。cqlshはCassandraでは「DataStax Python Driver」、ScyllaDBでは「ScyllaDB Python Driver」と名乗り、制御用とクエリ用の2つの接続を開きます。
- 「プロトコル」:接続がネゴシエートしたネイティブプロトコルのバージョン。
- 「TLS」:接続が暗号化されているかどうか。サーバが示す場合は、TLSのバージョンも示します。
- 「段階」:接続の段階で、サーバの書き方のまま示します(ScyllaDBは大文字でREADY)。
- 「リクエスト」と「キースペース」(Cassandraのみ):接続がこれまでに送ったリクエストの数と、使用中のキースペース。USEを実行していなければダッシュになります。
- 「シャード」(ScyllaDBのみ):その接続を処理するノードのシャード。

製品が公開していない列は描きません。サーバが返さない値はダッシュになります。

Calíope
Calíopeの接続には印が付き(色だけでなく、グリフと「Calíope」という名前)、先頭に並びます。ほかの接続はアドレスとポートの順です。Calíopeは「Caliope」という名前でサーバに名乗るので、それで見分けます。このウィンドウの接続だけでなく、同じノードにCalíopeを開いているほかのデバイスの接続も含め、アプリの接続すべてに印が付きます。アドレスだけでは、どれがこのウィンドウの接続かわからないからです(トンネルやNATの向こうでは、すべて同じアドレスから届きます)。

絞り込み
「アドレス、ユーザ、ドライバで絞り込む…」で、アドレス、ポート、ホスト名、ユーザ、ドライバとそのバージョン、キースペース、段階によって表を絞り込めます。概要には、全体のうち何件を表示しているかが出ます。

更新
一覧は自動では読み直しません。もう一度読むには「更新」を使います。読み取りに失敗し、前回の結果がある場合は、前回の結果を表示したまま、それが現在のものではないことを伝えます。

ここにないもの
クライアントは読み取るだけです。CQLにはほかのクライアントの接続を閉じる文がないので、Calíopeは誰も切断しません。タブの下部にもそう表示します。それはnodetool、JMX、ScyllaDBのREST APIの仕事です。

キーワード: Cassandra、ScyllaDB、クライアント、接続、セッション、ユーザ、ドライバ、プロトコル、TLS、キースペース、シャード、CQLSH、Calíope、NODETOOL

トレース

CassandraやScyllaDBのトレースの読み方、各製品がほかに公開しているもの(ScyllaDBのスロークエリー、Cassandraで今実行中のもの)、そしてScyllaDBのスロークエリーログを有効にする方法。

場所: ワークスペース › ツール › トレース

対象: Cassandra ScyllaDB

トレースには、トレースを求められたリクエストについてサーバが記録した内容と、各製品がほかに公開しているもの(ScyllaDBのスロークエリーと、Cassandraで今実行中のもの)を表示します。タブは製品によって変わり、製品にないタブは描きません。

「トレースしたセッション」(両方)
トレースとは、1つのリクエストを処理するあいだにコーディネータと各レプリカが記録した内容です。サーバはそれをsystem_traces.sessions(リクエストごとに1行)とsystem_traces.events(ステップごとに1行)に保存します。トレースされるのは求めたものだけです。実行する前にCQLクエリーで「トレース」をオンにすると、結果の下部にトレースの識別子が付いたボタンが出て、ここで直接開けます。トレースは24時間で期限切れになります。

一覧には最新のセッションを表示します。ScyllaDBでは、時間のインデックス(sessions_time_idx)を使って、サーバの時刻からさかのぼって探します。全体の件数は読みません。Cassandraにはこのインデックスがないので、上限までテーブルを読み、ここで並べ替えます。読み取りが上限に達した場合は、読んでいないもっと新しいセッションがあるかもしれないので、画面にそう表示します。ScyllaDBでは、スロークエリーがそれぞれ自分のセッションも書くので、一覧にはトレースを求めたもの以外も含まれます。

各行の時刻(「開始」)でそのトレースが開きます。トレースには、開始、所要時間、コマンド、コーディネータ、クライアント、ユーザ(記録するのはScyllaDBだけ)、サーバが記録していれば整合性レベル、文(「CQLクエリーで開く」でCQLクエリーに渡せます)、そしてイベントを順に表示します。各イベントには「経過」(そのノードがリクエストに費やしていたマイクロ秒)、その時間に比例したバー、アクティビティ、「ノード」、スレッドを示します。ノード同士は時計を共有しません。各イベントの時間はそのノードの時間なので、この列で2つのノードを比べると誤解のもとになります。

サーバはリクエストが続いているあいだにトレースを書きます。求めたばかりのトレースは、イベントがないまま、または所要時間が「未完了」のまま届くことがあります。開くと、所要時間がそろうまで0.5秒おきに何度か読み直します。それでもそろわなければそう伝えるので、数秒後に「更新」で読み直してください。「トレースしたセッションに戻る」で一覧に戻ります。

「スロー」(ScyllaDBのみ)
ScyllaDBは、しきい値を超えたクエリーをsystem_traces.node_slow_logに記録します。開始、所要時間、文、テーブル、ユーザ、そしてそれを処理したノードとシャードです。node_slow_log_time_idxを使って、過去24時間の分を探します。時刻でそのクエリーのトレースが開き(ScyllaDBはスロークエリーごとにトレースを1つ書きます)、行の末尾のボタンでCQLクエリーに渡せます。

このログは初期状態でオフです。しきい値もオン・オフも、CQLでは読み取れません。どちらもScyllaDBのREST API(ポート10000)のものです。そのため、このタブには読み取った中で最新のエントリーと最も短いエントリーを表示します。CQLでわかるのはそこまでです。500 µsのしきい値で有効にするには(しきい値の単位はマイクロ秒です)、また状態を読むには、次のようにします。

curl -X POST "http://<ノード>:10000/storage_service/slow_query?enable=true&threshold=500"
curl http://<ノード>:10000/storage_service/slow_query

2つ目は{"enable": true, "ttl": 86400, "threshold": 500, "fast": false}のような結果を返します。ノードごとに有効にするもので、scylla.yamlには書かれず、ノードを再起動するとオフに戻ります。CalíopeがこれをしないのはCQLしか話さないからです。REST APIはCQLとは別の、ScyllaDBの管理用の入口で、ふつうはクラスタの外からは届きません。nodetool、JMX、REST APIの仕事はCalíopeの外に置いています。

「実行中」(Cassandraのみ)
セッションのノードで今実行中のものを、system_views.queriesから表示します。スレッド、マイクロ秒単位の「待機」と「実行」、そしてリクエストです。この一覧の読み取り自体もその1つで、ノードはそれぞれ自分のものだけを公開します。CassandraはスロークエリーをCQLで公開しません。slow_query_log_timeoutを超えたものをテキストのログに記録し、その値はノードが持っているとおりに下部に表示します。

「更新」
自動では読み直しません。タブを読み直すには「更新」を使います。バーには最後に読んだ時刻を表示します。読み取りに失敗し、前回の結果がある場合は、前回の結果を表示したまま、それが現在のものではないことを伝えます。

ここでは読み取るだけです。トレースもスロークエリーログもサーバが書き、自然に期限切れになります。

キーワード: Cassandra、ScyllaDB、トレース、セッション、イベント、スロークエリー、スロークエリーログ、しきい値、REST API、CURL

ロール

CassandraやScyllaDBのロールとは何か、一覧と詳細がどこから来るか、権限をどのリソースに付与するか、何が書き込まれ、パスワードがどう送られるか、そして認証がないとロールがない理由。

場所: ワークスペース › ツール › ロール

対象: Cassandra ScyllaDB

ロールには、サーバのロールと各ロールができることを表示し、ロールの作成、変更、権限の付与、削除ができます。

ロールとは
ロールは、ユーザでもありグループでもあります。「ログイン可」でパスワードがあれば、だれかがそのロールで接続します。そうでなければ、権限をまとめてほかのロールに付与するために使い、付与されたロールはその権限を継承します。「スーパーユーザ」のロールは、一覧にすべての権限が載っていなくても何でもでき、詳細にそう表示します。

認証がなければロールもない
ロールが存在するのは、接続時にサーバがユーザとパスワードを求める場合(PasswordAuthenticator)だけです。CassandraとScyllaDBのインストール直後の設定であるAllowAllAuthenticatorでは、だれでも資格情報なしで入れるので、管理するものがありません。タブはその理由を表示し、エラーを返すだけのサーバには何も問い合わせません。

一覧と詳細
一覧は、両方の製品で同じLIST ROLESから読みます。名前、「スーパーユーザ」、「ログイン可」、そしてCassandraだけ「データセンター」です。フィルタで名前を絞り込めます。ロールを選ぶと、詳細にLIST ALL PERMISSIONS OFから読んだ「直接の権限」、それとは別に「所属するロールから継承した権限」(それぞれ元のロール付き)、LIST ROLES OFから読んだ「所属するロール」を表示します。継承した権限はここでは取り消せません。元のロールで外すか、そのグループからロールを外します。

リソースと権限
権限はリソースに付与します。「すべてのキースペース」、「キースペース」、「テーブル」、「すべてのロール」、「ロール」、「すべての関数」のいずれかです。権限はALL PERMISSIONS、SELECT、MODIFY、CREATE、ALTER、DROP、AUTHORIZE、DESCRIBE、EXECUTEです。Cassandraには、マスクした列のためのSELECT_MASKEDとUNMASKもありますが、ScyllaDBにはありません。すべての権限がすべてのリソースに使えるわけではなく、意味のない組み合わせはサーバが自分のメッセージで拒否します。

書き込むもの
「新規ロール…」は、名前、パスワード、「ログイン可」かどうか、「スーパーユーザ」かどうかを指定してロールを作成します。パスワードがないと、LOGINがあってもそのロールではログインできません。「変更…」は変えた部分だけを送ります(ALTER ROLE)。Cassandraでは、同じロールのパスワードを5秒以内に2回変えることはできません。「権限を付与…」はリソースへの権限を、「ロールに追加…」はほかのロールへの所属を付与し、各行の末尾のボタンで取り消します。「ロールを削除…」は、権限と所属ごとロールを削除します。削除や取り消しのように何かを外すときは、先にロール名を示した確認を求めます。

書き込む操作はすべて接続の保護を通ります。読み取り専用の環境ラベルでは書き込むものは何も描かず、確認を求めるラベルでは変更を送る前にそのつど確認します。

パスワード
CQLではパスワードを別に送れないので、文(CREATE ROLE … WITH PASSWORD = '…')の中に入ってサーバまで届きます。サーバは平文ではなくハッシュとして保存します。ネットワーク上で暗号化されるのは、接続がTLSを使う場合だけです。「コマンドログ」では、パスワードを伏せた形で文が残ります。

「更新」
自動では読み直しません。一覧は「更新」で読み直し、バーに最後に読んだ時刻を表示します。読み取りに失敗し、前に読んだものがある場合は、前のものを表示したまま、今のものではないことを示します。

キーワード: cassandra、scylladb、ロール、権限、ユーザ、grant、revoke、create role、alter role、drop role、list roles、スーパーユーザ、ログイン、パスワード、認証、passwordauthenticator、allowallauthenticator

CassandraとScyllaDBのレポート

CQLレポートとは何か::name形式のパラメータを持つ1つのSELECTで、プリペアされ、各列の型でバインドされ、上限まですべてのページを読みます。

場所: ワークスペース › ツール › レポート

対象: Cassandra ScyllaDB

CassandraまたはScyllaDBのセッションでは、新規レポートでCQLレポートを作成します。テキストは1つのSELECT文だけで、最初はSELECT * FROM demo.productos LIMIT 100になっています。ほかの文(INSERTやUSEなど)、2つの文、名前のない?は、サーバーに何も送る前に拒否されます。

パラメータ
パラメータはテキストに:nameと書き、パラメータを宣言で宣言します。Calíopeは各:nameを?に置き換えて文をプリペアします。サーバーが各マーカーのCQLの型を返し、値はその型で書き込まれ、テキストに埋め込まれることはありません。uuidはuuidとして、decimalは浮動小数点を通さずに正確に渡ります。列に合わない値は、パラメータ名を示して拒否されます。サーバーが数えたマーカーの数がパラメータの数と違えば、レポートは失敗し、両方の数を示します。

読み取るもの
実行を押すたびに、Calíopeは結果のすべてのページを200行ずつ、レポートの行数の上限まで読み、切り詰めた場合はそう示します。停止は、あるページと次のページのあいだで止めます。列の型はサーバーが結果について宣言する内容から決まります。整数、decimal、float、doubleは数値として、timestampはUTCの日時として、dateは日付として、blobはバイナリとして、booleanはそのまま表示されます。コレクション、ユーザー定義型、uuid、inetはcqlshが書く形で表示されます。

そのほか
レポートが読んだものはコマンドログに残りません。これはツールによる読み取りで、「CQLクエリー」の文ではないからです。書き出すと履歴はほかのレポートと同じように使えます。CQLレポートはCassandraまたはScyllaDBのセッションでのみ実行でき、複数の文からなるスクリプトは使えず、スケジュールも使えません。スケジュールできるのはリレーショナルデータベースのレポートだけです。

キーワード: cassandra、scylladb、cql、レポート、select、パラメータ、プリペア、ページ、上限、書き出し、履歴