Skip to content

Row Level Security

PostgreSQL 9.5以降で利用できるセキュリティ機能で、例えばマルチテナントサービスにおいて、クエリを実行するテナントが誤って他のテナント情報にアクセスできなくするために利用する。

現在のコネクションがアクセスできる行の範囲はポリシーによって定義する。

ALTER TABLE invoice ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_policy ON invoice
USING (tenant_id = current_setting('app.tenant_id'));

上記のテナントIDは、コネクション単位で以下のように設定する。

SELECT set_config('app.tenant_id', 0, false);

これ以降、コネクションから発行するクエリはテナントIDが同じ範囲に制限される。