supabase 권한 오류
-- 스키마 권한 부여
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 환경에서 애플리케이션이 데이터베이스에 접근하고 상호작용하기 위한 기본적인 권한 설정의 일부입니다.