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.