エクスポートに含まれるアクセスルール

Postgresのエクスポートには、エンドユーザーごとに読み取れる行を再現する行レベルセキュリティポリシーが含まれます。適用は自分で行い、対象は読み取りのみです。

ポリシーが再現するもの

ポリシーは、エクスポートバンドルのpolicies.sqlに含まれ、エクスポートされたテーブルに行レベルセキュリティを設定します。ユーザーが行を見られるのは、その行を所有している場合、公開されている場合、明示的に付与されている場合、またはすでに見られるものに紐づいている場合です。最後のケースは、読み取りアクセスを持つ参照を通じて1段階だけ及びます。明示的な付与は専用のテーブルに保存され、ポリシーはそれを参照しますが、ユーザーが直接読み取ることはできません。

Fóirの内部では、ルールはデータベースで強制され、単一のrecordsテーブルに対してDemesneがコンパイルします。エクスポートにはモデルごとのテーブルがあるため、同じルールをその形に合わせて書き直しています。

適用方法

データのロード後に、psqlでファイルを実行します。エクスポートコマンドでバンドルを適用しても、このファイルは実行されません。以降の取り決めは、ユーザーのidを持つセッション設定request.jwt.claimsの1つだけです。claimsが設定されていなければ、呼び出し元は匿名で、公開されている行だけが見えます。テストはauthenticatedロールで行ってください。テーブルを復元したロールがテーブルを所有しており、テーブルの所有者は行レベルセキュリティをバイパスします。

引き継がれないもの

フィールドレベルの権限、APIスコープ、書き込みルールは引き継がれません。復元したデータベースで行を見られるユーザーは、その行のすべての列を見られるため、フィールドを隠すのはアプリケーション、列の権限、ビューの役割になります。ポリシーが匿名とサインイン済みの呼び出し元に与えるのは読み取りアクセスだけで、チームのコンソールアクセスはエクスポートされません。

テストしている内容

当社のテストスイートは、シードしたプロジェクトをエクスポートして2つ目のデータベースに復元し、ポリシーを適用して、同じユーザーに対して両側で同じ行idが得られることを要件としています。これが検証するのは変換であり、お客様が復元したデータベース上のポリシーを確認するテストはありません。組織を使うプロジェクトについては、復元後のルールが一致することを保証しません。

詳細を読む

エクスポートガイドのアクセスルールのセクションでは、ポリシーの適用方法、ユーザーのclaimsの設定方法、適切なロールでのテスト方法を示しています。