
Supabase RLS 점검 SQL
RLS 정책만 봐서는 안 보이는 자리를 찾는 점검 질의 11개입니다. 겪어본 것만 넣었습니다
내려받기 전에 웹에서 그대로 써보실 수 있습니다. 로그인은 다운로드 시에만 필요합니다.
스크린샷




구매하면 이렇게 받습니다
- 다운로드결제 즉시 파일을 받을 수 있습니다. 라이선스 보관함에서 언제든 다시 받을 수 있습니다.
상품 소개
Supabase 권한 설정에서 구멍 나기 쉬운 자리를 찾는 점검 질의 11개입니다. ■ RLS만 봐서는 모릅니다 권한이 두 층이라서 그렇습니다. GRANT가 앞에 있고 RLS가 뒤에 있습니다. 정책을 아무리 정확하게 써도 역할에 GRANT가 없으면 정책까지 가지도 못하고 42501로 막힙니다. "정책은 맞는데 아무것도 안 되는" 상태가 이겁니다. 반대 경우도 있습니다. GRANT만 있고 정책이 없으면 전부 막히는데, 이때는 오류도 안 나고 그냥 0행이 나옵니다. 데이터가 없는 건지 막힌 건지 알 수가 없죠. 대시보드는 두 층을 한 화면에 안 보여줍니다. ■ 명령별로 따로 봅니다 SELECT만 보면 "읽기는 되는데 쓰기만 막히는" 걸 못 잡습니다. 관리자 기능이 일반 로그인 클라이언트로 나가는 구조라면, for all 정책이 있어도 UPDATE 권한이 없어서 그냥 실패합니다. 화면에선 저장 눌렀는데 아무 일도 안 일어나고 오류도 안 뜹니다. 새몰에서 승인 기능이 이렇게 깨진 적 있습니다. 3번 질의가 SELECT·INSERT·UPDATE·DELETE를 각각 따로 대조합니다. 이 파일에서 제일 자주 뭔가 잡히는 항목입니다. ■ 열한 개 1. RLS가 꺼진 테이블 2. RLS는 켰는데 정책이 없는 테이블 3. 정책은 있는데 GRANT가 없는 명령 4. SECURITY DEFINER로 만든 트리거 함수 5. 컬럼 단위로만 GRANT가 걸린 테이블 6. anon이 접근할 수 있는 테이블 7. 정책 안의 auth.uid()가 안 감싸인 것 8. RESTRICTIVE 정책 목록 9. 인덱스 없는 외래 키 10. 겹치는 인덱스 11. service_role에 권한이 없는 테이블 ■ 겪은 것만 넣었습니다 열한 개뿐인 건 안 겪어본 걸 안 넣어서입니다. 정책은 맞는데 GRANT가 없어서 기능이 통째로 죽은 일을 세 번 반복했습니다. 권한을 판단하는 트리거를 SECURITY DEFINER로 만들어서 그 안의 검사가 항상 참이 되는 바람에 가드가 무력화된 적도 있고요. 컬럼 단위 GRANT가 걸린 테이블에 새 컬럼을 참조했다가 비로그인 목록이 통째로 비고 상세가 404가 된 건 두 번입니다. 그래서 질의마다 뭘 찾는지, 왜 문제인지, 어떻게 고치는지를 같이 적었습니다. SQL만 모아 놓은 목록은 결과가 나와도 그게 사고인지 정상인지 판단이 안 되더라고요. ■ 결과 나온다고 다 문제는 아닙니다 5·6·8번은 잘못을 찾는 게 아니라 현재 상태를 세어보는 항목입니다. 결과가 나오는 게 정상이고, 오히려 목록에 있어야 할 게 없을 때가 문제입니다. 3·4번은 줄마다 판단이 필요합니다. 개수를 세는 트리거는 SECURITY DEFINER가 맞고, 서버에서 service role로만 쓰는 테이블은 GRANT가 없는 게 맞습니다. 각 항목에 "읽는 법"을 따로 달아뒀습니다. ■ 받는 파일 둘입니다. · HTML 한 장 — 열한 항목을 설명과 같이 읽고 질의를 하나씩 복사합니다 · SQL 한 개 — 같은 질의가 주석과 함께 들어 있어 SQL Editor에 그대로 붙여넣으면 됩니다 둘은 같은 원본에서 만들어집니다. 화면에서 본 SQL하고 파일 안의 SQL이 다를 수가 없습니다. 전부 읽기 질의라 데이터를 안 바꿉니다. 이건 말로만 하는 게 아니라 검사로 걸어놨습니다. 열한 개 중 하나라도 데이터를 바꾸는 낱말이 들어 있으면 파일이 아예 안 만들어집니다. ■ 데이터베이스에 접속하지 않습니다 접속 정보 넣는 칸이 없습니다. 질의를 보여주고 복사해 드릴 뿐이고, 실행은 Supabase SQL Editor에서 직접 하십니다. 남의 도구에 DB 접속 정보를 넣어야 하는 상황을 안 만들려고 이렇게 했습니다. ■ 이런 분께 · Supabase로 만들고 있는데 RLS를 제대로 봤는지 확신이 안 서는 분 · "정책은 맞는데 안 된다"로 시간 버려보신 분 · 테이블 여러 개 만들어 놓고 전체를 훑어본 적은 없는 분 · 출시 전에 권한 설정을 한 번 정리하고 싶은 분 ■ 저작권 질의는 여러분 프로젝트에 자유롭게 쓰시고 고쳐 쓰셔도 됩니다. 사내 점검 절차나 문서에 넣으셔도 되고요. 저작권만 새몰(saemol.com)에 남겨둡니다. 파일 자체를 다시 배포하거나 파는 것만 피해주시면 됩니다. 주변에 알려주고 싶으시면 상품 주소를 전해주세요. ■ 알아두실 것 PostgreSQL 15 이상, Supabase 기본 스키마 기준입니다. 실제 Supabase 프로젝트에서 열한 개를 다 돌려보고 확인했습니다. 이걸 통과했다고 보안 검토가 끝난 건 아닙니다. 여기서 보는 건 권한 설정의 앞뒤가 맞는지까지고, 정책이 실제로 올바른 행만 보여주는지는 사람이 판단할 일입니다.
기술 스택
리뷰
아직 리뷰가 없습니다
요금제
판매자 정보
개인
사업자가 아닌 개인 판매자입니다
이 판매자는 사업자로 등록되어 있지 않아 법령상 공개 대상인 사업자 정보가 없습니다. 비사업자 판매자는 대금을 받지 않는 무료 상품만 등록할 수 있습니다.
거래 관련 분쟁이 발생한 경우, 구매자는 분쟁 해결에 필요한 범위에서 상대방의 성명·연락처 등을 열람할 수 있습니다(전자상거래법 제20조의2 제3항). 아래 문의 창구로 주문번호와 사유를 알려주시면 회사가 확인 후 필요한 범위에서 정보를 제공합니다.
support@saemol.com새몰은 통신판매중개자로서 거래 당사자가 아니며, 상품·거래에 관한 책임은 판매자에게 있습니다.
구매자 약관 제3조(거래 상대방의 확인) →