Row Level Security
#PostgreSQL
概要
レコード単位でのアクセス制御
テーブルのRLSを有効にすると、アクセスするには行セキュリティポリシーによって許可される必要がある
RLSはTABLE単位で有効化する必要がある(デフォルトでは無効化されている)
DBスーパーユーザーはあらゆる制限を迂回してしまうため、RLSが有効に働かない
ポリシーの評価タイミング
ポリシーでどの行が可視である、あるいは更新可能であるかを指定するために、ブーリアン値を返す式が必要です。 ユーザの問い合わせにあるどの条件や関数よりも前に、この式が各行について評価されます。
RLS有効化手順
ALTER TABLE テーブル名 ENABLE ROW LEVEL SECURITY;
/icons/point.iconテーブルにポリシーが存在しない場合は、デフォルト拒否のポリシーが使われて、どの行も見ることも更新することもできなくなる
ALTER TABLE テーブル名 FORCE ROW LEVEL SECURITY;
ForceでRLSを有効化するとテーブル所有者もRLSの検査対象にできる
RLSポリシー作成
CREATE POLICY
/icons/hr.icon
参照
5.7. 行セキュリティポリシー
postgresql9.6
5.8. 行セキュリティポリシー
postgresql16
PostgreSQLのRow Level Securityを使ってマルチテナントデータを安全に扱う - HRBrain Blog
PostgreSQL Row Level Security (RLS) を使って顧客データ保護の安全性を高めている件 - Techouse Developers Blog