[Supabase] 데이터베이스 테이블에 RLS 설정하기

folder 프로그래밍 calendar_month web_traffic 3

(아래는 2025년 7월 기준으로 작성된 자료입니다.)

문제

PHP 에서 cURL을 이용해 슈퍼베이스의 데이터베이스 테이블에서 데이터를 가져 올 때, 안전하게 가져오기 위해 Public Key(공개 키) 를 사용해야 한다면 반드시 데이터를 가져올 테이블에 RLS(Row Level Security) 정책을 설정해야 합니다.

RLS 의 역할을 간단하게 설명하자면, 해당 테이블에 접근하는 유저가 어떤 행동을 할 수 있을지 권한을 부여하는 것이죠. 예를 들면,

  • 모든 유저는 Select 쿼리를 실행 할 수 있음
  • 권한이 부여된 유저는 Insert 쿼리를 실행해 테이블에 데이터를 넣을 수 있음
  • 특정 유저는 Delete 쿼리를 실행 할 수 있음

이런 개별 정책을 설정하는 것입니다.

어디에서든 공개해도 되는 Public Key 를 사용해 접근 하는 유저에게는 접근 권한을 매우 한정적으로 주어 Select 쿼리를 통해 데이터 조회만 가능하도록 해야겠죠?

해결

이제 본격적으로 슈퍼베이스 DB 테이블에 RLS 를 설정하는 방법을 알아 봅시다.

일단 본인의 슈퍼베이스 프로젝트에서 RLS 정책을 설정할 테이블로 이동합니다.

슈퍼베이스 DB 테이블에 RLS 설정하기

테이블 화면의 오른쪽 상단을 보면 Add RLS policy 라는 버튼이 보이는데 이 버튼을 누르고, 전환된 화면에서 Create policy 버튼을 누르면,

슈퍼베이스 DB 테이블에 RLS 설정하기

이런 화면이 나오는데, 이 화면이 바로 RLS 정책을 설정하는 화면입니다.

좌측 Create … 부분을 잘 보면, 어떤 테이블(Table)의 어떤 명령을 실행할 권한(Policy Command)을 누구에게(Target Roles) 부여 할 것인지를 옵션 형태로 설정할 수 있음을 알 수 있습니다.

너무 어렵다는 생각이 드신다면 화면의 오른쪽 Templates 에서 미리 만들어진 정책을 누르고 본인 입맛에 맞게 수정해도 됩니다.

처음에 말했던 모든 Public Key 를 사용해 접근 하는 사람들에게 테이블의 데이터를 조회 할 수 있는 권한을 부여하기 위해 템플릿에서 가장 위에 있는 Enable read access for all users 를 눌러보았습니다.

사전에 설정된 정책을 보니,

  • on “public”.”{테이블명}” : 해당 테이블에 대해
  • for SELECT : SELECT 문에 대한 권한을
  • to public : 모두에게
  • using (true) : 부여한다

는 것을 알 수 있습니다.

이렇게 설정을 마친 뒤 하단에 있는 Save policy 버튼을 눌러 RLS 정책을 저장하고, 실제로 Public Key 를 이용해 데이터가 잘 조회되는지 확인하면 됩니다.

끝.

댓글 남기기