무료 RLS Guard로 위험을 찾고,
실전 처방전으로 고친 뒤 배포 전에 재발을 막으세요.
Supabase의 anon 키는 프론트엔드 코드에 그대로 노출됩니다(원래 그렇게 설계됨). 그래서 RLS가 유일한 방어선인데, 한 줄만 빠져도 이렇게 됩니다.
실제 유출 사고 대부분이 이 패턴입니다. 테이블 RLS 활성화는 시작일 뿐이고 — INSERT의 WITH CHECK, 타 조직 교차 접근, Storage 버킷 조건, View·SECURITY DEFINER 함수의 우회까지 전부 막혀 있어야 합니다.
RLS Guard는 이 구멍들을 13개 규칙으로 배포 전에 잡아냅니다. 유료 킷은 그 결과를 실제 수정과 회귀 방지로 연결합니다.
30분 점검 흐름과 위험도별 수정 우선순위
개인 소유, 멀티테넌트, Storage, RPC, View, 함수
owner·other user의 허용/차단을 함께 검증
새 마이그레이션의 High/Critical 회귀 차단
취약→수정→테스트 흐름과 PR에 남기는 검사 결과
이 상품을 실제로 만든 과정과 프롬프트 15종
설치도, 가입도, 로그인도 없습니다. Supabase 프로젝트의 SQL을 복사해 붙여넣기만 하면 됩니다.
Supabase 대시보드의 SQL Editor, 또는 supabase/migrations/*.sql 파일 내용을 그대로 복사합니다. 여러 파일이면 순서대로 이어 붙여도 됩니다.
수 밀리초 만에 RLS 미설정, 항상 참인 정책, WITH CHECK 누락, View·함수 우회, 노출된 키까지 13종을 진단합니다. SQL은 브라우저 밖으로 나가지 않습니다.
각 위험에 "무엇이 왜 위험한지 + 바로 붙여넣을 수정 SQL"이 함께 나옵니다. 유료 킷은 여기에 역할별 테스트와 CI 차단까지 얹어 재발을 막습니다.
아래는 흔한 실수 하나가 스캐너에서 어떻게 잡히고 어떻게 고쳐지는지 그대로 보여주는 예시입니다.
붙여넣은 SQL — 얼핏 정상처럼 보입니다.
RLS Guard 진단
🔴 public.orders 테이블에 RLS가 비활성화되어 있습니다. 공개 스키마의 테이블은 anon 키로 전체 행이 조회·수정될 수 있습니다.
함께 나오는 수정 SQL — 복사해서 붙여넣기만.
RLS-003(항상 참인 정책), RLS-004(INSERT의 WITH CHECK 누락), VIEW-001(View의 RLS 우회) 등 나머지 12종도 같은 방식으로 근거 + 수정 SQL을 함께 제시합니다.
AI가 "느낌"으로 판단하는 게 아닙니다. 붙여넣은 SQL을 실제로 파싱해 최종 상태를 재구성하고, 규칙을 기계적으로 대조합니다.
주석·문자열·달러 인용($$…$$)을 건드리지 않고 안전하게 분리합니다. 주석 처리된 DDL이나 문자열 속 세미콜론에 속지 않습니다.
여러 파일에 흩어진 CREATE/ALTER/DROP과 정책·권한·함수·View 변경을 순서대로 적용해 "지금 DB가 실제로 어떤 상태인지"를 계산합니다. 나중 마이그레이션이 앞의 정책을 덮으면 그것까지 반영합니다.
각 테이블·정책·역할·함수·View를 규칙에 통과시킵니다. 예: 노출 스키마 + created + RLS 미활성 → RLS-001(Critical), 정책 조건이 true → RLS-003, INSERT인데 WITH CHECK 없음 → RLS-004.
발견마다 "무엇이/왜 위험한지 + 어느 문장이 근거인지 + 어떻게 고치는지"를 함께 냅니다. 붙여넣은 SQL은 서버로 전송되지 않고 브라우저 안에서만 처리됩니다.
⚠️ 정규식·경량 파서 기반의 정적 분석입니다. 라이브 DB에 쿼리를 날려 검증하는 게 아니라 SQL 텍스트를 읽는 방식이라, 빠르고 안전한 대신 실행 시점 동적 로직까지는 보지 못합니다. "발견 0 = 안전 보장"은 아닙니다.
발견은 시작일 뿐입니다. 자주 나오는 위험 6가지의 수정 패턴을 그대로 정리했습니다. 무료 스캐너는 각 항목에 아래 방향을, 유료 킷은 시나리오별(개인 소유·멀티테넌트·Storage·RPC) 완성 SQL 12종과 검증 테스트를 제공합니다.
테이블을 만들고 RLS를 안 켜면 anon 키로 전부 뚫립니다. 켜고, 소유자 조건 정책을 답니다.
using (true)
정책은 있지만 조건이 true면 모두 통과입니다. 실제 소유자 조건으로 바꿉니다.
WITH CHECK 없음
USING만 있으면 삽입 시 남의 user_id로 행을 넣을 수 있습니다. WITH CHECK로 삽입 값을 검증합니다.
정책이 user_id를 안 보거나 to public이면 사실상 무방비입니다. 대상 역할을 authenticated로 좁히고 소유자 컬럼을 조건에 넣습니다.
기본 View는 소유자 권한으로 실행돼 기반 테이블의 RLS를 건너뜁니다. security_invoker로 호출자 권한으로 돌립니다.
경로가 안 고정되면 권한 상승에 악용될 수 있습니다. search_path를 명시적으로 고정합니다.
⚠️ 이 수정들은 대표 패턴입니다. 실제 스키마·업무 규칙(공개 데이터, 팀 공유, 관리자 접근 등)에 맞게 조정해야 하며, 적용 후 실제 역할로 테스트해 확인하세요. 유료 킷의 pgTAP 스타터가 owner·다른 사용자의 허용/차단을 자동 검증합니다.
Supabase로 MVP를 올리기 전, "혹시 뚫린 테이블 없나?"를 30초 만에 훑습니다. 론칭 후 데이터 유출로 사과문 쓰는 것보다 쌉니다.
남이 짠 마이그레이션을 받았을 때, 정책이 실제로 안전한지 눈으로 읽지 않고 규칙으로 검증합니다.
GitHub Actions에 넣어두면 새 마이그레이션이 High/Critical 위험을 들여올 때 CI가 머지를 막습니다. 사람이 매번 안 봐도 됩니다.
Claude·Cursor가 생성한 RLS 정책을 그대로 믿지 말고 붙여넣어 확인하세요. 생성형 코드의 조용한 보안 구멍을 잡습니다.
결제 전에 RLS Guard 웹 스캐너를 직접 써보세요. SQL은 브라우저 밖으로 전송되지 않으며 가입도 필요 없습니다. 소스와 21개 회귀 테스트도 GitHub에 공개되어 있습니다.
보안 인증서, 완성된 프로젝트별 감사, 수익 보장을 원하는 분께는 맞지 않습니다. 템플릿은 실제 스키마와 위협 모델에 맞게 검토해야 합니다.
아닙니다. RLS Guard는 탐지 + 수정 SQL 제안까지입니다. 데이터베이스를 자동으로 바꾸지 않습니다 — 이건 의도된 설계입니다. RLS는 서비스의 실제 권한 모델과 직결되므로(공개 데이터, 팀 공유, 관리자 접근 등 케이스마다 정답이 다름) 사람이 검토하고 적용해야 안전합니다. 도구는 붙여넣을 수 있는 수정 SQL을 주고, 적용·테스트는 여러분이 합니다. 유료 킷은 이 과정을 시나리오별 완성 SQL과 자동 테스트로 크게 줄여줍니다.
무료 도구는 위험을 찾고 수정 SQL을 제안하는 정적 스캐너입니다. 유료 킷은 그 수정을 시나리오별 완성 SQL 12종, 역할별 pgTAP 테스트, GitHub Actions CI, 운영 문서로 묶어 "고치고 → 검증하고 → 재발을 막는" 실행 체계로 만든 것입니다.
아닙니다. 정적 분석과 범용 템플릿은 완전한 감사를 대신하지 않습니다. 실제 역할 테스트, 앱 코드와 키 관리, 프로젝트별 사람 검토가 필요합니다.
가이드는 PDF, 나머지는 Markdown·SQL·YAML·텍스트 파일입니다. VS Code 등 일반 편집기에서 바로 열 수 있습니다.
결제 후 3일 이내 요청 시 사유 불문 전액 환불합니다. 래피드 구매 페이지 문의 채널로 연락해 주세요.