TL;DR

テーブルごとに、ユーザ単位で行の操作(表示、更新、削除、挿入)を制限できる仕組み。

なぜ必要か

代表的なユースケースは、マルチテナントのアプリケーションである。

仕組み

Row-Level Security を有効にすると、各行へのアクセスは定義したポリシーに従って許可または拒否される。ポリシーは、コマンドの種類(SELECT、INSERT、UPDATE、DELETE)やロールごとに設定できる。複数のポリシーが当てはまる場合は、OR で結合される。

PostgreSQL と SQL Server がサポートしている。PostgreSQL を使う Supabase でも使える。

例

PHP の ORM から扱う例として、Laravel の Eloquent と Doctrine を比べた発表がある(PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine)。

関連

出典