PostgreSQL에서 스키마를 생성 할 때 "오류 : 역할의 구성원이어야 함"


87

저는 수퍼 유저 계정으로 로그인했으며 이것이 제가 수행하는 프로세스입니다.

1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test

역할이 올바르게 생성되었지만 스키마를 생성하려고 할 때이 오류가 발생합니다.

ERROR:  must be member of role "test"

미리 감사드립니다!



나는 여전히 같은 문제를 겪고 있습니다. 누구든지 나를 도울 수 있습니까?
— Ultranuke 2014

답변:


127

CREATE DATABASEAmazon RDS에서 사용할 때이 문제가 발생했습니다 . 나는 그것이 기본적으로 CREATE SCHEMA.

Amazon RDS를 사용할 때를 발급하는 사용자 CREATE DATABASE는 데이터베이스 소유자가 될 역할의 구성원이어야합니다. 제 경우에는 제가 사용하고있는 수퍼 유저 계정이 root이고 o데이터베이스를 소유 할 역할을 만들 것입니다 d.

postgres=> CREATE ROLE o;
CREATE ROLE

postgres=> CREATE DATABASE d OWNER = o;
ERROR:  must be member of role "o"

postgres=> GRANT o TO root;
GRANT ROLE

postgres=> CREATE DATABASE d OWNER = o;
CREATE DATABASE

3
같은 일이지만 새 사용자에게 CREATEDB 권한이 필요하지 않다는 것을 알았습니다. 일반 사용자를 만들고 관리자에게 해당 사용자 역할을 부여한 다음 소유자가 일반 사용자로 설정된 관리자를 사용하여 데이터베이스를 만들었습니다.
— Nick Spacek

.. 여기 RDS에이 효과의 원인을 설명까지 짧은 쓰기있다 blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
— Molomby

2
PostgreSQL 용 Google Cloud SQL에서 이와 동일한 오류가 발생했으며이 답변은 GRANT o TO postgres;데이터베이스를 만들기 전에 실행 한 것을 제외하고는 해결책이었습니다 .
— 사이먼 왓슨

38

나는이 같은 문제를 만났는데, 로그인 한 현재 (마스터) 사용자가 스키마를 생성하려는 사용자 그룹의 구성원이 아니라고 불평하고 있습니다. 마스터 사용자에게 역할 액세스 권한을 부여해야합니다. 그러면 오류없이 SCHEMA를 만들 수 있습니다.

GRANT <role> TO <master_user>;

24

RDS를 사용하고 있습니까? 그들이 당신을 위해 만든 "수퍼 유저"로 로그인 할 때 동일한 문제가 발생하기 때문입니다. 이 문제를 해결할 수 있었던 방법은 수퍼 유저와 스키마를 소유 한 사용자를 포함하는 새 그룹 역할을 만드는 것이 었습니다. 따라서 이것은 슈퍼 사용자와 테스트 사용자를 새 역할 그룹에 추가하는 것을 의미합니다.

CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT megausers TO testroles;
GRANT test TO testroles;

이제 schmea를 만들 수 있습니다.


1
이것은 약간 혼란 스럽지만 결국 무슨 일이 일어나고 있는지를 해결하기 위해 이것을 사용했습니다. 내 응답보기 : stackoverflow.com/a/34898033/242457
— David Jones

17

RDS 에서도이 문제가 발생했습니다.

그것을 해결하려면 :

수퍼 유저로 로그인

psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=RDS_SUPERUSER_NAME --password --dbname=postgres

사용자 생성

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

로그 아웃

\q

다음으로 로그인 newuser

psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=newuser --password --dbname=postgres

DB / 스키마 생성

CREATE SCHEMA/DATABASE ....

8

서비스 역할에 관리자 멤버십을 부여하면되지 않나요?

create role service_role with password 'some_password';
create database service_db with owner service_role;
ERROR:  must be member of role "service_role"
grant admin_user service_role;
GRANT ROLE
create database service_db with owner service_role;
CREATE DATABASE

4
Postgres 9.0 이상에서 승인에는 "TO"가 포함됩니다.GRANT service_role TO admin_user;
— Grengas

5

RDS에서도이 문제가 발생했습니다. root사용자 로 로그인하고 이름이 지정된 역할을 만든 myappuser다음 superduper소유자가 인 스키마를 만들려고했습니다 myappuser.

작동하는 해결책을 찾았습니다. 만들기 myappuser역할을하고 있는지 적어도이 역할은 데이터베이스를 생성 할 수있는 권한 (권한이 호출을 가지고 있는지 확인 CREATEDB). myappuser역할을 만든 후로 데이터베이스에 로그인하고 사용자가 인 스키마를 myappuser만들었습니다 . 이것은 아무런 문제없이 작동했습니다.superdupermyappuser


0

나는 같은 문제에 직면했다. 이를 해결하기 위해 새로 생성 된 역할로 로그인하여 데이터베이스를 생성했습니다. 어쨌든 RDS Postgres에서는 부여가 작동하지 않습니다.


0

Amazon RDS를 사용하여 방금 만났습니다.

많은 답변이 이미 정확하지만 역할 만 변경할 수도 있습니다.

내 구현은 다음과 같습니다.

psql -h ${PGHOST} -p ${PGPORT:-5432} -U ${PGUSER:-postgres} -c "ALTER USER renderer WITH CREATEDB PASSWORD '$RENDERPASSWORD'"

따라서 암호를 변경하는 동안 역할에 CREATEDB 역할 권한도 추가합니다.


0

postgres사용자 로 로그인하여 문제를 해결했습니다 (그런 다음 제 경우에는 소유권이 변경된 변경 사항을 적용합니다).

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.