본문 바로가기
프론트엔드/Supabase + Jotai

Supabase - RLS(Row-Level Security)

by 학습하는 청년 2024. 6. 4.

최종 수정 : 2024-06-04

RLS(Row-Level Security)

행 수준의 보안이라고 번역된다.

권한 체크에 대한 로직을 의미한다.

 

만약 없다면?

서버에서 권한 체크를 해야 하며, 이를 서버 코드로 구현해야 한다. 그에 따라 버그 가능성이 존재하게 된다. 또한, BOLA 나 BFLA 보안 이슈가 발생할 수 있다.

 

BOLA : Broken Object Level Authorization
BFLA : Broken Function Level Authorization

 

이런 이슈를 DB Level에서 권한 체크하여 방지하는 것이 RLS이다. 데이터베이스에 스키마를 정의할 때, 권한에 대한 정책 도 같이 정의하기 때문에 가능하다. 다시 말해, 데이터베이스를 설계할 때 권한까지 함께 설계하는 것이다. 이런 권한 체크에는 크게 두 가지 기능이 있다.

첫 번째 기능

1) 준비 단계 : 권한이 있는 데이터만 준비한다. 이를 구현하기 위해 USING expression을 사용한다. 

2) 작업 : 해당 권한에 맞는 데이터에 한해 SELECT, INSERT, UPDATE, DELETE를 진행한다.

 

두 번째 기능

3) 재확인 : 업데이트를 했는데, 권한이 없을 수도 있다. 이런 경우, 오류를 발생시킨다. 이를 구현하기 위해 WITH CHECK expreesion을 사용한다.

 

ex)

  읽기 생성 수정, 삭제
anon, public
(공개, 누구나, 익명)
O X X
auth (인증자) O O X
owner (소유자) O O O

 

댓글