S-JIS[2025-09-25/2025-09-29]
Tsurugi 1.6.0のユーザー認証のメモ。
|
Tsurugi 1.6.0で、ユーザー認証が試験的機能として導入された。
試験的機能なので、デフォルトではユーザー認証は無効になっている。
すなわち、デフォルトでは(従来と同じく)認証なしでログインできる。
ユーザー認証を有効にすると、従来の無認証ではログインできなくなる。
ログイン時に認証情報を指定する方法として、以下のものがある。
Tsurugi 1.6.0でユーザー認証を有効にするには、Tsurugiの構成定義ファイル(tsurugi.ini)を編集する。
tgctl shutdown
vi $TSURUGI_HOME/var/etc/tsurugi.ini
〜 [authentication] enabled=true 〜
$TSURUGI_HOME/bin/authentication-server start(コンソールにJettyのログが出るけど(邪魔だけど)、無視してよい)
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_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")) |
|
TsubakuroのSession | SessionBuilder.connect(endpoint).withCredential(new
UsernamePasswordCredential("tsurugi", "password")) |
|
Tsurugi MCPサーバー | { |
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")) |
TsubakuroのSession | SessionBuilder.connect(endpoint).withCredential(new RememberMeCredential("eyJ0e〜PnLpQ")) |
Tsurugi MCPサーバー | { |
なお、認証トークンの有効期間は24時間だそうだ。
つまり、curlコマンドで取得したトークンを翌日使おうとすると、有効期限切れで使用できない。
認証トークンの有効期限は実質的にRT(refresh token)の有効期限と同じらしい。[2025-09-29]
これはharinoki.propertiesのexpiration_refreshで設定されている。
# 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
認証ファイルは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"))) |
TsubakuroのSession | SessionBuilder.connect(endpoint).withCredential(FileCredential.load(Path.of("/tmp/tsurugi.key"))) |
Tsurugi MCPサーバー | { |
なお、認証ファイルの有効期限はデフォルトで90日だそうだ。
tgctl credentialsのオプション「--expiration 日数
」で有効期限を指定できる。
Tsurugi SQLコンソール(tgsql)等のツールでは、認証情報が指定されなかったときに、以下の手順で認証を試みる。
$HOME/.tsurugidb/credentials.key
)が存在していたら、それを使う。(エラーになったら次のステップへ)credentials.json
」となっているが、Tsurugi
1.6.0(tgsql 0.11.0)で拡張子がkeyに変わった。Tsurugiのユーザーには、システム管理者と一般ユーザーの2種類がある。[2025-09-27]
システム管理者は全ての操作を行うことが出来る。
revoke文でシステム管理者からテーブルの権限を奪っても、システム管理者はテーブルを操作できる。
デフォルトでは、全てのユーザー(harinoki-users.propsで定義されたユーザー)がシステム管理者である。
システム管理者はTsurugiの構成定義ファイル(tsurugi.ini)のauthenticationセクションのadministratorsで指定する。
〜
[authentication]
#administrators=*
administrators=tsurugi
enabled=true
〜
administratorsのデフォルト値は「*」なので、全ユーザーがシステム管理者になる。
一般ユーザーは、デフォルトでは何の権限も無い(テーブルを操作する権限が無い)。
テーブルを作成することも出来ないので、システム管理者がテーブルを作成して、そのテーブルへの
アクセス権限をユーザーに付与する必要がある。