From 12c51ce549fc81ff6066d13894c46a004f852282 Mon Sep 17 00:00:00 2001 From: pkdee Date: Sat, 27 Jun 2026 13:30:13 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20public=20=ED=85=8C=EC=9D=B4=EB=B8=94=20R?= =?UTF-8?q?LS=20=ED=99=9C=EC=84=B1=ED=99=94=20=EB=A7=88=EC=9D=B4=EA=B7=B8?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=85=98(Supabase=20REST=20=EB=85=B8?= =?UTF-8?q?=EC=B6=9C=20=EC=B0=A8=EB=8B=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - V11__enable_rls.sql 추가 — 9개 public 테이블 RLS 활성화(멱등) - 정책 없음 = anon PostgREST 전면 차단, 서버는 owner role 로 우회 - 운영 DB 수동 활성화분과 충돌 없음(no-op), 새 환경 재현성 확보 Closes #49 --- .../db/migration/V11__enable_rls.sql | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/resources/db/migration/V11__enable_rls.sql diff --git a/src/main/resources/db/migration/V11__enable_rls.sql b/src/main/resources/db/migration/V11__enable_rls.sql new file mode 100644 index 0000000..5f59e75 --- /dev/null +++ b/src/main/resources/db/migration/V11__enable_rls.sql @@ -0,0 +1,21 @@ +-- public 테이블 RLS(Row Level Security) 활성화 — Supabase PostgREST(anon) 직접 노출 차단. +-- +-- 배경: Supabase 는 public 스키마 테이블을 anon key(앱에 박힌 공개값)로 접근되는 REST API 로 +-- 자동 노출한다. RLS 가 꺼져 있으면 서버를 우회해 전 사용자 데이터에 직접 접근할 수 있다. +-- 데이터 접근은 전부 Spring 서버(테이블 owner role = RLS 우회) 경유이고, client 는 public +-- 테이블을 Supabase REST 로 직접 읽지 않으므로 정책(policy)은 두지 않는다(= anon 전면 차단). +-- +-- 멱등: ENABLE ROW LEVEL SECURITY 는 이미 켜진 테이블엔 no-op 이라 운영 DB(수동 활성화됨)와 +-- 충돌하지 않는다. 테스트는 @DataJpaTest(H2)+ddl-auto 로 돌아 이 마이그레이션을 실행하지 않는다. +-- +-- 컨벤션: 앞으로 새 public 테이블을 만드는 마이그레이션은 RLS 활성화를 함께 포함한다(ADR-0027). + +ALTER TABLE public.tasks ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.events ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.notifications ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.user_settings ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.calendar_connections ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.external_events ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.time_debts ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.users ENABLE ROW LEVEL SECURITY; +ALTER TABLE public.flyway_schema_history ENABLE ROW LEVEL SECURITY;