본문 바로가기
웹 도구 제작 노트

수파베이스 로 레벨 보안 설정

by 크랜베리 Ai. 2024. 10. 25.

간단 내용

수파베이스 로 레벨 보안 설정

상세 내용

테이블 예

CREATE TABLE "PrivatePrompt" (
  "id" serial PRIMARY KEY,
  "name" VARCHAR(255),
  "prompt" TEXT DEFAULT '',
  "help" TEXT DEFAULT '',
  "inputText" TEXT DEFAULT '',
  "result" TEXT DEFAULT '',
  "languageCode" VARCHAR(255) DEFAULT 'ko', -- 언어 (ko, en), public 에서만 사용
  "userId" UUID NOT NULL REFERENCES auth.users (id) ON DELETE CASCADE, -- auth.users 의 id 와 동일
  "date" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);

 

정책 예

insert: 로그인 사용자

select: 로그인 사용자

update: 로그인 아이디 와 userId 필드가 같은 사용자

delete: 로그인 아이디 와 userId 필드가 같은 사용자

--PrivatePrompt

create policy "Enable insert for authenticated users only"
on "public"."PrivatePrompt"
for insert to authenticated
with check (
  true
);

--create policy "Enable select for all"
--on "public"."PrivatePrompt"
--for select 
--using (
--  true
--);
create policy "Enable select for authenticated users only"
on "public"."PrivatePrompt"
for select to authenticated
using (
  true
);

create policy "Enable update for users based on userId"
on "public"."PrivatePrompt"
for update 
using (
  (select auth.uid()) = "userId"
);

create policy "Enable delete for users based on userId"
on "public"."PrivatePrompt"
for delete 
using (
  (select auth.uid()) = "userId"
);

ALTER TABLE "PrivatePrompt"
ENABLE ROW LEVEL SECURITY;

create policy "Enable delete for users based on userId"
on "public"."StaPrivatePrompt"
for delete 
using (
  (select auth.uid()) = "userId"
);

ALTER TABLE "StaPrivatePrompt"
ENABLE ROW LEVEL SECURITY;

 

Supabase의 Row-Level Security (RLS)는 익명 키 (anon key)와 서비스 키 (service key) 모두에 적용됩니다. 다만, 서비스 키는 더 높은 권한을 가진 키로, RLS를 우회할 수 있습니다.
- 익명 키 (anon key)는 클라이언트에서 직접 사용하기 위해 설계되었고, 보안 목적으로 RLS 정책이 엄격하게 적용됩니다.
- 서비스 키 (service key)는 서버 측에서 사용하기 위해 제공된 것이며, 높은 권한을 가지고 있어 일반적으로 RLS를 무시하고 모든 데이터에 접근할 수 있습니다.

 

따라서, 클라이언트에서 데이터를 안전하게 제어하려면 익명 키를 사용하고, 서버에서 데이터 접근이 필요할 때 서비스 키를 사용하는 것이 권장됩니다.

강의 동영상

Supabase와 함께 RLS(행 수준 보안)를 사용하여 권한 부여 구현(단계별 가이드) - YouTube

참고 자료

Row Level Security | Supabase Docs
https://supabase.com/docs/guides/database/postgres/row-level-security?utm_source=youtube&utm_medium=social&utm_term=jon&utm_content=Ow_Uzedfohk

 

Auth | Supabase Docs
https://supabase.com/docs/guides/auth?utm_source=youtube&utm_medium=social&utm_term=jon&utm_content=Ow_Uzedfohk

 

If you want to expose the anon key publicly you need to enable RLS, otherwise anyone can just read/edit your tables using the anon key and your URL
https://www.reddit.com/r/Supabase/comments/1arc09d/using_supabase_auth_between_a_express_backend_and/

 

How to Create a Subscription Form with Vanilla JavaScript and Supabase for free | by Antho VDO | Medium
rls (insert)
https://medium.com/@anthony.vdo/how-to-create-a-subscription-form-with-vanilla-javascript-and-supabase-for-free-3f5f992c87ff

 

AI를 사용하여 Supabase를 사용하는 Postgres에 대한 RLS 정책 활성화 및 생성 - YouTube
https://www.youtube.com/watch?v=hu2SQjvCXIw

 

Supabase Tutorial #10 - Intro to RLS & Policies - YouTube
https://youtu.be/WAa3a-HxLVs?list=PL4cUxeGkcC9hUb6sHthUEwG7r9VDPBMKO&t=417

 

Supabase with Vanilla JS - YouTube
https://www.youtube.com/watch?v=mpBaBJEcg04&t=41s

관리

https://github.com/automatethem-prod-web-service/generativeaianywhere-web-app

Sns

https://automatethem.tistory.com/306

 

https://blog.naver.com/automatethem/223654716191

 

https://automate-them.blogspot.com/2024/11/blog-post_10.html

반응형