ScalarDB/ SQL CLIで認証認可を行う
自己紹介
みなさんこんにちは、株式会社Scalarの mini-workerです。
これを書いている今日はなんと東京に雪が降り、まだまだ寒い日が続きそうだなあと凍えながら執筆しました。(遠い目)
私は東京生まれ東京育ちなのですが、年々夏はより暑く・冬はより寒くなっている気がしてます。健康が一番なので体調にはより一層気をつけていきたいです。
では本題に入りましょう。
概要
この記事では、ScalarDB Clusterの認証・認可機能について解説します。
SQL CLIを使って、ユーザーの作成から権限の付与・確認までの一連の流れを実際に試してみました。「ScalarDBで認証機能を有効にしたいけど、どうやって設定するの?」という方の参考になれば幸いです。
対象読者
- ScalarDBの認証・認可機能を導入しようとしているエンジニア
- SQL CLIでのユーザー管理方法を知りたい方
- ScalarDBの権限管理の具体的なコード例を探している方
背景・目的
ScalarDBには認証・認可機能が備わっていますが、実際にどのように動作するのか試してみたいと思い、今回検証を行いました。
ユーザーの作成、権限の付与、ロールの作成と付与など、一通りの操作を確認していきます。
構成
今回は以下の構成で検証を行います。
事前準備
必要なファイルの作成
以下の3つのファイルを作成します。
1. docker-compose.yml
services:
postgresql:
container_name: "postgresql"
image: "postgres:15"
ports:
- 5432:5432
environment:
- POSTGRES_PASSWORD=postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready || exit 1"]
interval: 1s
timeout: 10s
retries: 60
start_period: 30s
scalardb-cluster-standalone:
container_name: "scalardb-cluster-node"
image: "ghcr.io/scalar-labs/scalardb-cluster-node-byol-premium:3.17.1"
ports:
- 60053:60053
- 9080:9080
volumes:
- ./scalardb-cluster-node.properties:/scalardb-cluster/node/scalardb-cluster-node.properties
depends_on:
postgresql:
condition: service_healthy
2. scalardb-cluster-node.properties
ScalarDB Clusterの設定ファイルです。認証を有効にするにはscalar.db.cluster.auth.enabled=trueを設定します。
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:postgresql://postgresql:5432/postgres
scalar.db.username=postgres
scalar.db.password=postgres
scalar.db.cluster.node.standalone_mode.enabled=true
scalar.db.cross_partition_scan.enabled=true
scalar.db.sql.enabled=true
# Enable authentication and authorization
scalar.db.cluster.auth.enabled=true
# License key configurations
scalar.db.cluster.node.licensing.license_key=<license_key>
scalar.db.cluster.node.licensing.license_check_cert_pem=<pem>
3. sql.properties
SQL CLIからScalarDB Clusterに接続するための設定ファイルです。
scalar.db.sql.connection_mode=cluster
scalar.db.sql.cluster_mode.contact_points=indirect:localhost
scalar.db.sql.cluster_mode.contact_port=60053
scalar.db.cluster.auth.enabled=true
SQL CLIのダウンロード
SQL CLIのjarファイルをローカルにダウンロードします。
curl -OL https://github.com/scalar-labs/scalardb/releases/download/v3.17.1/scalardb-cluster-sql-cli-3.17.1-all.jar
または、GitHubのリリースページから直接ダウンロードすることも可能です。
準備完了の確認
以下の4つのファイルが揃っていればOKです。
.
├── docker-compose.yaml
├── scalardb-cluster-node.properties
├── scalardb-cluster-sql-cli-3.17.1-all.jar
└── sql.properties
実装方法 / 解説
1. Dockerコンテナの起動
docker compose up -d
2. SQL CLIでadminとしてログイン
java -jar scalardb-cluster-sql-cli-3.17.1-all.jar --config sql.properties
ユーザー名とパスワードを聞かれるので、admin/adminでログインします。
Enter username for jdbc:scalardb:sql.properties: admin
Enter password for jdbc:scalardb:sql.properties: admin
3. Namespaceとテーブルの作成(admin)
CREATE NAMESPACE test;
CREATE TABLE IF NOT EXISTS test.privilege_test (id INT, value INT, PRIMARY KEY (id));
4. データの投入(admin)
INSERT INTO test.privilege_test VALUES(1,1),(2,2);
5. データの確認(admin)
SELECT * FROM test.privilege_test;
※adminでTerminal開いている時は背景をピンクにしています

6. ユーザーの作成(admin)
CREATE USER user1 WITH PASSWORD 'user1';
7. 新規ユーザーでログイン
別のターミナルを開き、作成したユーザーでログインします。
java -jar scalardb-cluster-sql-cli-3.17.1-all.jar --config sql.properties
Enter username for jdbc:scalardb:sql.properties: user1
Enter password for jdbc:scalardb:sql.properties: user1
8. 権限がないことを確認(user1)
SELECT * FROM test.privilege_test;
この時点では権限がないため、エラーになります。
※user1でTerminal開いている時は背景を水色にしています。

しっかりと認証エラー(Authorization error)エラーが出ました。
9. SELECT権限の付与(admin)
adminユーザー側で権限を付与します。
GRANT SELECT ON "test"."privilege_test" TO user1;
SHOW GRANTS FOR user1;

ちゃんとuser1に、test.privilege_test に SELECT 権限が付与されたことを確認しました。
10. SELECTが可能になったことを確認(user1)
SELECT * FROM test.privilege_test;

権限が付与されたので、SELECTが成功します。
11. ロールを使った権限管理(admin)
ロールを作成し、複数の権限をまとめて付与することもできます。
-- ロールの作成
CREATE ROLE user1_role;
SHOW ROLES;
-- ロールに権限を付与
GRANT SELECT, INSERT, UPDATE ON test.privilege_test TO ROLE user1_role;
-- ロールの権限を確認
SHOW ROLE GRANTS FOR user1_role;
-- ユーザーにロールを付与
GRANT ROLE user1_role TO user1;
SHOW GRANTS FOR user1;

user1が test.privilege_test に INSERT , UPDATE 権限が付与されたことを確認しました。
12. ロールで付与された権限の確認(user1)
INSERT INTO test.privilege_test VALUES(3,3);
UPDATE test.privilege_test SET value = 10 WHERE id = 2;
SELECT * FROM test.privilege_test;

INSERT権限, UPDATE権限も付与されたので、データの挿入・更新も可能になります。
感想
まとめ
今回は、ScalarDB Clusterの認証・認可機能を実際に試してみました。
- 成果: SQL CLIを使って、ユーザーの作成、権限の付与、ロールを使った権限管理まで一通り確認できました。
- 所感: 標準的なSQL構文で操作できるため、学習コストが低く、すぐに導入できそうだと感じました。
ScalarDBで認証機能を導入しようとしている方の参考になれば幸いです。
参考リンク
執筆者紹介 / 会社情報
執筆者
mini-worker
株式会社Scalar ビジネスソリューション本部 / Solution Engineer
会社情報
Scalar, Incは、「データマネジメントの未来を創る」を掲げ、データベースミドルウェアの研究開発・販売を行う日本発のグローバルスタートアップ企業です!
複数の異なるデータベース(RDB、NoSQLなど)を仮想的に統合し、トランザクション処理や分析クエリを実現するデータベースミドルウェアであるScalarDB、分散台帳技術(DLT)を用いたソフトウェアで、データの改ざん検知を行うScalarDLを主な製品としています。
是非下記の弊社サイトもチェックをお願いします!
Discussion