0

「サーバーレス」アプリケーション用に、supabase.io で RLS (Row Level Security) を使用しています。RLS ポリシーには、さまざまなセキュリティ定義関数を使用する必要があります。これらは引き続き、supabase の rpc ライブラリを介して呼び出すことができます。これらの関数の呼び出しを管理者 (私) または RLS ポリシーの一部として使用する場合に制限する方法はありますか?

例えば:

CREATE OR REPLACE FUNCTION get_bases_editable_or_viewable_for_user(user_id uuid, allow_edit bool)
returns setof bigint as $$
  select base_id
  from access_controls
  where access_controls.user_id = $1 AND ($2 AND access_controls.access_level = 'editor') OR access_controls.access_level = 'viewer';
$$ stable language sql security definer;

CREATE policy "Users can read bases they are editors or viewers of"
on public.bases
for select using ( bases.id in (get_bases_editable_or_viewable_for_user(auth.uid(), true)) );

get_bases_editable_or_viewable_for_user別のユーザーの UID を取得したユーザーは、このユーザーが編集者または閲覧者としてアクセスできる UID を見つけることができます。

supabase.rpc(
  "get_bases_editable_or_viewable_for_user",
  { user_id: "dddddde6-1111-4bdf-aaaa-33336ccc31ee", allow_edit: true }
)
.then(console.log) // => bad

アプリケーションのセキュリティとユーザーのプライバシーを最大限に高めるには、情報漏えいの機会を最小限に抑えることが常に重要です。

4

1 に答える 1