dev.syw

RLS 개념과 정책 작성으로 행 단위 데이터 접근을 안전하게 제어하는 법을 배운다.

Row Level Security

Row Level Security(RLS)는 Supabase 보안의 핵심입니다. anon key가 공개되어 있어도, RLS 정책이 행 단위로 접근을 통제하기 때문에 데이터가 보호됩니다. 이 강의에서는 RLS의 개념과 CREATE POLICY 작성법, 그리고 auth.uid()를 활용한 정책을 다룹니다.

학습 목표

  • RLS가 무엇이고 왜 필요한지 이해한다.
  • 테이블에 RLS를 켜고 정책을 작성한다.
  • auth.uid()로 본인 데이터만 접근하도록 제한한다.
  • 읽기·쓰기 정책을 분리해 설계한다.

RLS란

RLS는 Postgres의 기능으로, 테이블의 각 행에 대해 "누가 어떤 작업을 할 수 있는가"를 정책으로 정의합니다. RLS가 켜지면 정책에 허용되지 않은 모든 접근이 차단됩니다.

⚠️ 주의 — RLS를 켜지 않은 테이블은 anon key로 누구나 읽고 쓸 수 있습니다. 실서비스 테이블에는 반드시 RLS를 활성화하세요. 이것이 Supabase 보안에서 가장 중요한 원칙입니다.

RLS 활성화

테이블에 RLS를 켭니다. 콘솔의 테이블 설정에서도 토글할 수 있습니다.

alter table posts enable row level security;

켜는 즉시 모든 접근이 막히므로, 필요한 정책을 함께 추가해야 데이터를 다시 사용할 수 있습니다.

정책 작성

CREATE POLICY로 작업별 규칙을 정의합니다. 누구나 게시글을 읽도록 허용하는 정책입니다.

create policy "공개 글은 누구나 읽기"
on posts for select
using ( published = true );
  • for select — 적용할 작업(select/insert/update/delete)
  • using — 행이 조건을 만족할 때만 노출

auth.uid()로 본인 데이터 제한

로그인한 사용자의 ID는 정책 안에서 auth.uid()로 참조합니다. 본인이 작성한 글만 보도록 제한해 봅시다.

create policy "본인 글만 조회"
on posts for select
using ( auth.uid() = author_id );

author_id가 현재 로그인 사용자와 일치하는 행만 결과에 포함됩니다.

읽기와 쓰기 정책 분리

작업마다 별도 정책을 둘 수 있습니다. 삽입·수정에는 with check로 저장될 값을 검증합니다.

-- 본인 이름으로만 글 작성 가능
create policy "본인 글만 작성"
on posts for insert
with check ( auth.uid() = author_id );

-- 본인 글만 수정 가능
create policy "본인 글만 수정"
on posts for update
using ( auth.uid() = author_id );
의미적용 작업
using어떤 행에 접근할지select, update, delete
with check어떤 값을 저장할지insert, update

💡 TIPupdate에는 usingwith check를 함께 쓰는 것이 안전합니다. using은 수정할 행을, with check는 수정 후 값이 조건을 지키는지 검사합니다.

요약

  • RLS는 행 단위로 데이터 접근을 통제하는 Postgres 보안 기능입니다.
  • RLS가 꺼진 테이블은 anon key로 노출되므로 실서비스에서는 필수로 켭니다.
  • auth.uid()로 로그인 사용자를 식별해 본인 데이터만 접근하게 합니다.
  • 읽기는 using, 쓰기는 with check로 작업별 정책을 분리해 설계합니다.

연습문제

  1. RLS가 꺼진 테이블의 보안상 문제는 무엇인가?
  2. 테이블에 RLS를 켜는 SQL은?
  3. 정책에서 현재 로그인한 사용자의 ID를 가리키는 함수는?
  4. insert 정책에서 저장될 값을 검증할 때 사용하는 절은?

힌트usingwith check의 차이, 그리고 auth.uid()를 떠올리세요.

💡 연습문제 풀이

불러오는 중…

함께 보면 좋은 자료

댓글 0

Supabase” 강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.