スーパーユーザーアカウントでログインしています。これが私が行っているプロセスです。
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
ロールは正しく作成されていますが、スキーマを作成しようとすると次のエラーが発生します。
ERROR: must be member of role "test"
前もって感謝します!
スーパーユーザーアカウントでログインしています。これが私が行っているプロセスです。
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
ロールは正しく作成されていますが、スキーマを作成しようとすると次のエラーが発生します。
ERROR: must be member of role "test"
前もって感謝します!
回答:
CREATE DATABASE
Amazon 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
GRANT o TO postgres;
。データベースを作成する前に実行した以外は、この回答が解決策でした。
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
GRANT service_role TO admin_user;
RDSでもこの問題が発生しました。root
ユーザーとしてログインし、という名前のロールをmyappuser
作成してからsuperduper
、所有者がであるというスキーマを作成してみましたmyappuser
。
私はうまくいく解決策を見つけました。myappuser
ロールを作成し、このロールに少なくともデータベースを作成する権限があることを確認します(権限はと呼ばれますCREATEDB
)。myappuser
ロールを作成した後、としてデータベースにログインし、ユーザーがでmyappuser
あるsuperduper
スキーマを作成しましたmyappuser
。これは問題なく機能しました。