S-JIS[2025-09-25/2025-09-29]

Tsurugi 1.6.0 ユーザー認証

Tsurugi 1.6.0のユーザー認証のメモ。


概要

Tsurugi 1.6.0で、ユーザー認証が試験的機能として導入された。

試験的機能なので、デフォルトではユーザー認証は無効になっている。
すなわち、デフォルトでは(従来と同じく)認証なしでログインできる。

ユーザー認証を有効にすると、従来の無認証ではログインできなくなる。
ログイン時に認証情報を指定する方法として、以下のものがある。


ユーザー認証を有効にする方法

Tsurugi 1.6.0でユーザー認証を有効にするには、Tsurugiの構成定義ファイル(tsurugi.ini)を編集する。

  1. 動いているtsurugidbプロセスを停止する。
    tgctl shutdown
  2. tsurugi.iniを編集してユーザー認証を有効にする。
    vi $TSURUGI_HOME/var/etc/tsurugi.ini
    〜
    [authentication]
        enabled=true
  3. 認証サービスを起動する。(Jettyを使っているので、Java17以降が必要らしい)
    $TSURUGI_HOME/bin/authentication-server start
    (コンソールにJettyのログが出るけど(邪魔だけど)、無視してよい)
  4. tsurugidbを起動する。
    tgctl start

ユーザー認証が有効になったことを確認するために、Tsurugi SQLコンソール(tgsql)でログインしてみる。

$ tgsql -c ipc:tsurugi --user tsurugi
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - establishing connection: ipc:tsurugi
password: ********
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - start repl
tgsql>

デフォルトでは「tusurgi」というユーザーのみ使用できる。(このユーザーのデフォルトのパスワードは「password」)

tsurugiユーザーの定義


なお、認証サービスを停止するには以下のコマンドを実行する。

$TSURUGI_HOME/bin/authentication-server stop

ユーザーの追加・変更・削除

ユーザーを追加・変更・削除するには、ユーザー定義が書かれているファイルを編集する。
(Tsurugi 1.6.0では、ユーザーを追加・変更・削除するコマンドやSQL文は用意されていない)

ユーザー定義は「$TSURUGI_HOME/var/auth/etc/harinoki-users.props」に書かれている。
デフォルトでは以下のようにtsurugiユーザーのみ定義されている。

$ cat $TSURUGI_HOME/var/auth/etc/harinoki-users.props
tsurugi: password,harinoki-user

※ちなみに、Harinokiというのは、認証サービスのモジュール名(Tsurugiプロジェクト内の固有名詞)


harinoki-users.propsは、1行に1ユーザーの定義を記述する。
形式は「ユーザー: パスワード,realm(レルム)」。
realmはとりあえず「harinoki-user」で固定。

tsurugi: password,harinoki-user
user1: password1,harinoki-user

harinoki-users.propsを書き換えたら、認証サービスを再起動する。

$TSURUGI_HOME/bin/authentication-server restart

ユーザー・パスワードを指定する例

Tsurugiにアクセスするツールやライブラリーでユーザー・パスワードを指定する例。

場所 備考
Tsurugi SQLコンソールの起動 $ tgsql --user tsurugi パスワードは別途入力が求められる。
IceaxeのTsurugiConnector TsurugiConnector.of(endpoint, new UsernamePasswordCredential("tsurugi", "password"))  
TsubakuroSession SessionBuilder.connect(endpoint).withCredential(new UsernamePasswordCredential("tsurugi", "password"))  
Tsurugi MCPサーバー {
  "mcpServers": {
    "tsurugidb": {
      "command": "java",
      "args": [
        "-jar", "/path/to/tsurugi-mcp-server-all.jar",
        "-c", "tcp://localhost:12345",
        "--user", "tsurugi", "--password", "password"
      ]
    }
  }
}
Tsurugiの他のCLIツールでは「--password」オプションは無くコンソールからパスワードを入力するが、
Tsurugi MCPサーバーでは(コンソールから入力できないので)「--password」オプションがある。

なお、パスワードを平文で書くのは良くないので、認証ファイルを使う方が良さそう。


認証トークンを指定する例

認証トークンは認証サービス(Harinoki)から取得する。

認証サービスはREST APIになっており、curlコマンドで認証トークンを取得できる。

認証サービスのREST APIのデフォルトのURLは「http://localhost:8080/harinoki」。
これは、構成定義ファイル(tsurugi.ini)のauthenticationセクションの「url」で定義されている。


認証サービス(authentication-server)を起動したのと同じマシン上から、以下のコマンドで認証トークンを取得できる。

$ curl -u tsurugi:password http://localhost:8080/harinoki/issue
{"type":"ok","token":"eyJ0e〜PnLpQ","message":null,"key_type":null,"key_data":null}

応答はJSON形式で、tokenのところのくそ長い文字列が認証トークン。


Tsurugiにアクセスするツールやライブラリーで認証トークンを指定する例。

場所
Tsurugi SQLコンソールの起動 $ tgsql --auth-token "eyJ0e〜PnLpQ"
IceaxeのTsurugiConnector TsurugiConnector.of(endpoint, new RememberMeCredential("eyJ0e〜PnLpQ"))
TsubakuroSession SessionBuilder.connect(endpoint).withCredential(new RememberMeCredential("eyJ0e〜PnLpQ"))
Tsurugi MCPサーバー {
  "mcpServers": {
    "tsurugidb": {
      "command": "java",
      "args": [
        "-jar", "/path/to/tsurugi-mcp-server-all.jar",
        "-c", "tcp://localhost:12345",
        "--auth-token", "eyJ0e〜PnLpQ"
      ]
    }
  }
}

なお、認証トークンの有効期間は24時間だそうだ。
つまり、curlコマンドで取得したトークンを翌日使おうとすると、有効期限切れで使用できない。

認証トークンの有効期限は実質的にRT(refresh token)の有効期限と同じらしい。[2025-09-29]
これはharinoki.propertiesのexpiration_refreshで設定されている。

$TSURUGI_HOME/var/auth/etc/harinoki.properties:

# tsurugi.jwt.claim_iss=harinoki
# tsurugi.jwt.claim_aud=tsurugidb
# tsurugi.jwt.private_key_file=harinoki.pem
# tsurugi.token.expiration=300s
# tsurugi.token.expiration_refresh=24h

環境変数TSURUGI_AUTH_TOKEN


認証ファイルを指定する例

認証ファイルはtgctlコマンドで生成できる。

tgctl credentials 〔出力先ファイル〕

出力先を省略すると、デフォルトの場所($HOME/.tsurugidb/credentials.key)にファイルが生成される。
(→デフォルト認証ファイルの読み込み

$ tgctl credentials /tmp/tsurugi.key
user: tsurugi
password:

コマンドを実行するとユーザーとパスワードの入力が求められる。
正しく認証されれば、認証ファイルが作成される。


Tsurugiにアクセスするツールやライブラリーで認証ファイルを指定する例。

場所
Tsurugi SQLコンソールの起動 $ tgsql --credentials /tmp/tsurugi.key
IceaxeのTsurugiConnector TsurugiConnector.of(endpoint, FileCredential.load(Path.of("/tmp/tsurugi.key")))
TsubakuroSession SessionBuilder.connect(endpoint).withCredential(FileCredential.load(Path.of("/tmp/tsurugi.key")))
Tsurugi MCPサーバー {
  "mcpServers": {
    "tsurugidb": {
      "command": "java",
      "args": [
        "-jar", "/path/to/tsurugi-mcp-server-all.jar",
        "-c", "tcp://localhost:12345",
        "--credentials", "/tmp/tsurugi.key"
      ]
    }
  }
}

なお、認証ファイルの有効期限はデフォルトで90日だそうだ。

tgctl credentialsのオプション「--expiration 日数」で有効期限を指定できる。


デフォルトの認証手順

Tsurugi SQLコンソール(tgsql)等のツールでは、認証情報が指定されなかったときに、以下の手順で認証を試みる。

  1. 環境変数TSURUGI_AUTH_TOKENが存在していたら、その内容を認証トークンとして使う。(エラーになったら次のステップへ)
  2. デフォルトの認証ファイル$HOME/.tsurugidb/credentials.key)が存在していたら、それを使う。(エラーになったら次のステップへ)
  3. 無認証で接続する。(エラーになったら次のステップへ)
  4. ユーザー・パスワードの入力を求める。

ユーザー権限

Tsurugiのユーザーには、システム管理者一般ユーザーの2種類がある。[2025-09-27]

システム管理者は全ての操作を行うことが出来る。
revoke文でシステム管理者からテーブルの権限を奪っても、システム管理者はテーブルを操作できる。


デフォルトでは、全てのユーザー(harinoki-users.propsで定義されたユーザー)がシステム管理者である。

システム管理者はTsurugiの構成定義ファイル(tsurugi.ini)のauthenticationセクションのadministratorsで指定する。

$TSURUGI_HOME/var/etc/tsurugi.ini:

〜
[authentication]
    #administrators=*
    administrators=tsurugi
    enabled=true
〜

administratorsのデフォルト値は「*」なので、全ユーザーがシステム管理者になる。


一般ユーザーは、デフォルトでは何の権限も無い(テーブルを操作する権限が無い)。
テーブルを作成することも出来ないので、システム管理者がテーブルを作成して、そのテーブルへの アクセス権限をユーザーに付与する必要がある。


認証情報へ戻る / Tsurugiへ戻る / 技術メモへ戻る
メールの送信先:ひしだま