RDBMS/SQL

supabase 권한 오류

James Wetzel 2025. 4. 8. 21:04

-- 스키마 권한 부여
GRANT USAGE ON SCHEMA public TO postgres, anon, authenticated, service_role;

-- 모든 테이블에 대한 권한 부여
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO postgres, anon, authenticated, service_role;

-- 모든 시퀀스에 대한 권한 부여
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO postgres, anon, authenticated, service_role;

-- 모든 함수에 대한 실행 권한 부여
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO postgres, anon, authenticated, service_role;

-- 앞으로 생성될 객체에 대한 기본 권한 설정
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT ALL PRIVILEGES ON TABLES TO postgres, anon, authenticated, service_role;

ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT ALL PRIVILEGES ON SEQUENCES TO postgres, anon, authenticated, service_role;

ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT EXECUTE ON FUNCTIONS TO postgres, anon, authenticated, service_role;

 

 

 

GRANT USAGE ON SCHEMA public TO postgres, anon, authenticated, service_role; 명령어는 PostgreSQL 데이터베이스 시스템에서 사용되는 권한 관리 명령어입니다. 특히 Supabase 환경에서 자주 볼 수 있는 명령어이며, public 스키마에 대한 특정 사용자 또는 역할에게 USAGE 권한을 부여하는 역할을 합니다.

명령어를 각 부분별로 나누어 설명하면 다음과 같습니다.

  • GRANT: SQL 표준 명령어 중 하나로, 특정 데이터베이스 객체(스키마, 테이블, 뷰, 함수 등)에 대한 권한을 특정 사용자 또는 역할에게 부여하는 데 사용됩니다.
  • USAGE ON SCHEMA public: 이 부분은 어떤 객체에 어떤 권한을 부여할지를 지정합니다.
    • USAGE ON SCHEMA: 스키마에 대한 USAGE 권한을 부여하는 것을 의미합니다.
    • public: 권한을 부여할 대상 스키마의 이름입니다. PostgreSQL에서 public 스키마는 기본적으로 생성되는 스키마이며, 특별히 지정하지 않은 객체들은 이 스키마에 속하게 됩니다.
  • TO postgres, anon, authenticated, service_role: 이 부분은 권한을 부여받을 대상 사용자 또는 역할 목록을 지정합니다. 쉼표로 구분하여 여러 대상에게 동시에 권한을 부여할 수 있습니다.
    • postgres: PostgreSQL의 기본 슈퍼유저 역할입니다. 일반적으로 모든 권한을 가집니다.
    • anon: Supabase에서 익명 (unauthenticated) 사용자를 위한 역할을 나타냅니다. 이 역할에 USAGE 권한을 부여하면 인증되지 않은 사용자도 public 스키마에 접근하여 해당 스키마 내의 객체들을 (자신에게 다른 권한이 있다면) 사용할 수 있게 됩니다.
    • authenticated: Supabase에서 인증된 사용자를 위한 역할을 나타냅니다. 이 역할에 USAGE 권한을 부여하면 로그인한 사용자들은 public 스키마에 접근하여 해당 스키마 내의 객체들을 (자신에게 다른 권한이 있다면) 사용할 수 있게 됩니다.
    • service_role: Supabase에서 서비스 수준의 권한을 가진 역할을 나타냅니다. 이 역할은 일반적으로 모든 데이터베이스 작업에 대한 권한을 가지며, 백엔드 서비스 등에서 사용됩니다.

USAGE 권한의 의미:

스키마에 대한 USAGE 권한은 해당 스키마 내의 객체(테이블, 뷰, 함수 등)를 참조할 수 있는 권한을 의미합니다. 단순히 USAGE 권한만으로는 스키마 내의 테이블에서 데이터를 읽거나 쓰거나, 함수를 실행할 수는 없습니다. 이러한 작업을 위해서는 테이블에 대한 SELECT, INSERT, UPDATE, DELETE 권한, 함수에 대한 EXECUTE 권한 등이 별도로 부여되어야 합니다.

Supabase에서의 중요성:

Supabase는 PostgreSQL을 기반으로 구축되었으며, 보안을 위해 역할 기반 접근 제어(RBAC)를 적극적으로 사용합니다. public 스키마는 많은 Supabase 프로젝트에서 기본적으로 사용되는 스키마이므로, 익명 사용자(anon)와 인증된 사용자(authenticated)가 이 스키마에 접근하여 필요한 데이터베이스 객체들을 사용할 수 있도록 USAGE 권한을 부여하는 것은 일반적인 설정입니다.

 

요약하자면, 위 명령어는 public 스키마 내의 객체들을 postgres 슈퍼유저, 익명 사용자, 인증된 사용자, 서비스 역할이 참조할 수 있도록 허용하는 명령어입니다. 이는 Supabase 환경에서 애플리케이션이 데이터베이스에 접근하고 상호작용하기 위한 기본적인 권한 설정의 일부입니다.

728x90
반응형