[postgresql] PostgreSQL에서 스키마를 생성 할 때 “오류 : 역할의 구성원이어야 함”

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

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

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

ERROR:  must be member of role "test"

미리 감사드립니다!



답변

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


답변

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

GRANT <role> TO <master_user>;


답변

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

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

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


답변

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 ....


답변

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

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


답변

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

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


답변

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