(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Keycloak】H2データベースに格納された情報をコマンドから確認する

スポンサーリンク

はじめに

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コンソールではなくターミナル上から確認する手法が見当たらなかったので参考までに記事にしました。同じようなことを実施したい方の参考になれば幸いです。