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


92

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

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

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

ERROR:  must be member of role "test"

前もって感謝します!



私はまだ同じ問題を抱えています、誰かが私を助けてくれますか?
ウルトラヌーク2014年

回答:


134

CREATE DATABASEAmazon RDSで使用しているときに、この問題が発生しました。基本的にはを使用するのと同じだと思いますCREATE SCHEMA

Amazon RDSを使用する場合、発行するユーザーCREATE DATABASEは、データベースの所有者となるロールのメンバーである必要があります。私の場合、使用しているスーパーユーザーアカウントはと呼ばれrootoデータベースを所有するロールを作成します。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

4
同じことですが、新しいユーザーはCREATEDB権限を持っている必要がないことがわかりました。通常のユーザーを作成し、そのユーザーロールを管理者ユーザーに付与してから、所有者を通常のユーザーに設定した管理者ユーザーを使用してデータベースを作成しました。
Nick Spacek 2016

RDSに対するこの影響の原因を説明する短い記事がここにあります。blog.2ndquadrant.com/ the
rds_superuser

3
Google Cloud SQL for PostgreSQLでも同じエラーが発生しましたGRANT o TO postgres;。データベースを作成する前に実行した以外は、この回答が解決策でした。
サイモンワトソン

40

私はこれと同じ問題に遭遇しました、それはあなたがログインしている現在の(マスター)ユーザーがあなたがスキーマを作成しようとしているユーザーグループのメンバーではないことについて不平を言っています。マスターユーザーにロールアクセスを許可する必要があります。これにより、エラーなしで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
デビッドジョーンズ

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

9

管理者ユーザーにサービスロールのメンバーシップを付与するだけでよいのではないでしょうか。

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あるsuperduperスキーマを作成しましたmyappuser。これは問題なく機能しました。


1

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

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

これが私の実装でした

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

そのため、パスワードを変更するときに、CREATEDBロール権限もロールに追加します。


0

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


0

postgresユーザーでログインして修正しました(そして、私の場合は所有権を変更していた変更を適用します):

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.