私はスーパーユーザーアカウントでログインしていますが、これが私がしているプロセスです:
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
ロールは正しく作成されていますが、スキーマを作成しようとするとこのエラーが発生します。
ERROR: must be member of role "test"
前もって感謝します!
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
私はこの同じ問題に遭遇しました、あなたがログインしている現在の(マスター)ユーザーがあなたがスキーマを作成しようとしているユーザーグループのメンバーではないことを訴えています。マスターユーザーにロールアクセスを許可する必要があります。これにより、エラーなしでSCHEMAを作成できます。
GRANT <role> TO <master_user>;
RDSを使用していますか?なぜなら、彼らがあなたのために作成した「スーパーユーザー」としてログインすると、同じ問題が発生するからです。これを修正できたのは、スーパーユーザーとスキーマを所有していたユーザーを含む新しいグループロールを作成することでした。そのため、これはスーパーユーザーとテストユーザーを新しい役割グループに追加することを意味します。
CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT megausers TO testroles;
GRANT test TO testroles;
これで、シュメアを作成できるはずです。
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
としてデータベースにログインし、ユーザーがsuperduper
であるmyappuser
スキーマを作成しました。これは問題なく機能しました。
Amazon RDSを使用してこれに遭遇しました。
多くの答えはすでに正しいですが、役割を変更することもできます。
ここに私の実装がありました
psql -h ${PGHOST} -p ${PGPORT:-5432} -U ${PGUSER:-postgres} -c "ALTER USER renderer WITH CREATEDB PASSWORD '$RENDERPASSWORD'"
そのため、パスワードを変更しながら、CREATEDBロールのアクセス許可もロールに追加しています。
私は同じ問題に直面していました。これを解決するために、新しく作成したロールでログインし、データベースを作成しました。どういうわけか、RDS Postgresではグラントが機能しません。