PostgreSQLの行レベルセキュリティにおける循環依存を... ノート

PostgreSQLの行レベルセキュリティにおける循環依存をSECURITY DEFINER関数で修正する

PostgreSQL の行レベルセキュリティは、マルチテナントアプリケーションにとって非常に便利な機能の 1 つです。その考え方は非常にシンプルです。テーブルにポリシーを定義し、特定のユーザーがどの行を表示または変更できるかを PostgreSQL に指示します。データベースエンジンは、どのアプリケーションコードがリクエストを発行したかに関わらず、すべてのクエリでそれを強制します。問題は、ポリシーが循環を形成した場合に発生します。これは、聞こえるよりも一般的であり、PostgreSQL で最も混乱を招く障害モードの 1 つを引き起こします。データが返されるはずのクエリが、エラーなしで何も返さないのです。