web-dev-qa-db-ja.com

「エラー:ロールのメンバーである必要があります」PostgreSQLでスキーマを作成するとき

私はスーパーユーザーアカウントでログインしていますが、これが私がしているプロセスです:

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

ロールは正しく作成されていますが、スキーマを作成しようとするとこのエラーが発生します。

ERROR:  must be member of role "test"

前もって感謝します!

62
Ultranuke

Amazon RDSでCREATE DATABASEを使用すると、この問題に遭遇しました。基本的に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
88
David Jones

私はこの同じ問題に遭遇しました、あなたがログインしている現在の(マスター)ユーザーがあなたがスキーマを作成しようとしているユーザーグループのメンバーではないことを訴えています。マスターユーザーにロールアクセスを許可する必要があります。これにより、エラーなしでSCHEMAを作成できます。

GRANT <role> TO <master_user>;
26
James Ching

RDSを使用していますか?なぜなら、彼らがあなたのために作成した「スーパーユーザー」としてログインすると、同じ問題が発生するからです。これを修正できたのは、スーパーユーザーとスキーマを所有していたユーザーを含む新しいグループロールを作成することでした。そのため、これはスーパーユーザーとテストユーザーを新しい役割グループに追加することを意味します。

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

これで、シュメアを作成できるはずです。

21
bionicseraph

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 ....
16
Rafael Oliveira

管理者ユーザーのメンバーシップをサービスロールに付与するだけではいけませんか?

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
8
jorfus

この問題はRDSでも発生しました。 rootユーザーとしてログインし、myappuserという名前のロールを作成してから、所有者がsuperduperであるmyappuserというスキーマを作成しようとしました。

動作するソリューションを見つけました。 myappuserロールを作成し、このロールに少なくともデータベースを作成する権限があることを確認します(権限はCREATEDBと呼ばれます)。 myappuserロールを作成した後、myappuserとしてデータベースにログインし、ユーザーがsuperduperであるmyappuserスキーマを作成しました。これは問題なく機能しました。

5

Amazon RDSを使用してこれに遭遇しました。

多くの答えはすでに正しいですが、役割を変更することもできます。

ここに私の実装がありました

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

そのため、パスワードを変更しながら、CREATEDBロールのアクセス許可もロールに追加しています。

0
sprut

私は同じ問題に直面していました。これを解決するために、新しく作成したロールでログインし、データベースを作成しました。どういうわけか、RDS Postgresではグラントが機能しません。

0
Sid