はじめに
Keycloak(RedHat SSO)は開発モード(start-dev)で起動するとH2データベースに情報が格納されます。
本記事では同データベースに保管されているデータをLinux機のターミナル上で確認する流れについて記載しました。
環境情報
- Linux(fedora)
- keycloak-21.1.2
- h2-2.1.214
事前準備
h2の公式サイトから「h2-2022-06-13.zip」をダウンロードし、Keycloakが動作しているサーバ上で解凍します。
今回はLinuxなのでh2.shを利用しますが
$ ls h2/bin/ h2-2.1.214.jar h2.bat h2.sh h2w.bat
ブラウザからではなくターミナル上から利用したいためスクリプトの一部を以下のように修正します。
$ diff ./h2/bin/h2.sh ./h2/bin/h2s.sh 3c3 < java -cp "$dir/h2-2.1.214.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Console "$@" --- > java -cp "$dir/h2-2.1.214.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Shell "$@"
データベースに接続する
この状態でスクリプトを起動すると
$ ./h2s.sh Welcome to H2 Shell 2.1.214 ... Exit with Ctrl+C
接続情報を対話形式で入力する必要があるので以下のように入力をすることで
[Enter] URL jdbc:h2:file:/xx/keycloak-22.0.1/data/h2/keycloakdb;AUTO_SERVER=TRUE Driver org.h2.Driver User sa Password password
接続が可能です。
Connected Commands are case insensitive; SQL statements end with ';' help or ? Display this help list Toggle result list / stack trace mode maxwidth Set maximum column width (default is 100) autocommit Enable or disable autocommit history Show the last 20 statements quit or exit Close the connection and exit sql>
尚、URLにはデータベースファイルがあるパスを入力します。
$ ls /xx/keycloak-xx/data/h2/ keycloakdb.lock.db keycloakdb.mv.db keycloakdb.trace.db
SQLを発行する
データベースの構造は以下にて確認ができ
sql> SELECT table_name FROM INFORMATION_SCHEMA.TABLES; TABLE_NAME ENUM_VALUES CONSTANTS SEQUENCES RIGHTS ...
例えばユーザ情報に関するテーブルは以下のように確認ができました。
sql> SELECT * FROM USER_ENTITY; ID | EMAIL | EMAIL_CONSTRAINT | EMAIL_VERIFIED | ENABLED | FEDERATION_LINK | FIRST_NAME | LAST_NAME | REALM_ID | USERNAME | CREATED_TIMESTAMP | SERVICE_ACCOUNT_CLIENT_LINK | NOT_BEFORE xx | null | xx | FALSE | TRUE | null | null | null | xx | admin | xx | null | 0 xx | null | xx | FALSE | TRUE | null | | | xx | test | xx | null | 0 (2 rows, 3 ms) ...
終わりに
Keycloakの内部データベースを確認するにあたり、H2コンソールではなくターミナル上から確認する手法が見当たらなかったので参考までに記事にしました。同じようなことを実施したい方の参考になれば幸いです。