“ERROR: must be member of role” Saat membuat skema di PostgreSQL


92

Saya masuk dengan akun pengguna super dan ini adalah proses yang saya lakukan:

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

Peran dibuat dengan benar tetapi saya mendapatkan kesalahan ini saat mencoba membuat Skema:

ERROR:  must be member of role "test"

Terima kasih sebelumnya!



Saya masih mengalami masalah yang sama, ada yang bisa membantu saya?
Ultranuke

Jawaban:


134

Saya mengalami masalah ini saat menggunakan CREATE DATABASEdi Amazon RDS. Saya pikir itu pada dasarnya sama dengan menggunakan CREATE SCHEMA.

Saat menggunakan Amazon RDS, pengguna yang mengeluarkan CREATE DATABASEharus menjadi anggota peran yang akan menjadi pemilik database. Dalam kasus saya, akun superuser yang saya gunakan dipanggil root, dan saya akan membuat peran oyang akan memiliki database 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
Hal yang sama, tetapi saya menemukan pengguna baru tidak perlu memiliki izin CREATEDB. Saya membuat pengguna biasa, memberikan peran pengguna tersebut kepada pengguna admin saya, kemudian membuat database menggunakan pengguna admin dengan pemilik ditetapkan ke pengguna biasa.
Nick Spacek

Ada tulisan singkat yang menjelaskan penyebab efek ini pada RDS di sini .. blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Molomby

3
Saya mengalami kesalahan yang sama di Google Cloud SQL untuk PostgreSQL dan jawaban ini adalah solusinya kecuali saya menjalankan GRANT o TO postgres;sebelum membuat database.
Simon Watson

40

Saya menemukan masalah yang sama ini, yaitu keluhan tentang pengguna (master) saat ini yang Anda masuki bukan anggota grup pengguna yang Anda coba buat skemanya. Anda harus memberikan akses peran kepada pengguna master Anda dan itu akan memungkinkan Anda membuat SCHEMA tanpa kesalahan:

GRANT <role> TO <master_user>;

24

Apakah Anda menggunakan RDS? Karena saya mendapatkan masalah yang sama ketika saya masuk sebagai "pengguna super" yang mereka buat untuk Anda. Cara saya bisa memperbaikinya adalah dengan membuat peran grup baru yang menyertakan pengguna super saya dan pengguna yang memiliki skema. Jadi bagi Anda, ini berarti menambahkan pengguna super dan pengguna uji ke grup peran baru:

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

Sekarang Anda sudah bisa membuat schmea Anda


1
Ini agak membingungkan, tetapi saya menggunakan ini untuk akhirnya mengetahui apa yang sedang terjadi. Lihat tanggapan saya: stackoverflow.com/a/34898033/242457
David Jones

17

Memiliki masalah ini dengan RDS juga.

Untuk mengatasinya:

Masuk sebagai pengguna super

psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=RDS_SUPERUSER_NAME --password --dbname=postgres

Buat Pengguna

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

Keluar

\q

Masuk sebagai newuser

psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=newuser --password --dbname=postgres

Buat DB / Skema Anda

CREATE SCHEMA/DATABASE ....

9

Bukankah kita hanya perlu memberikan keanggotaan pengguna admin ke peran layanan?

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
Dalam Postgres 9.0 dan di atasnya, pemberian termasuk "TO":GRANT service_role TO admin_user;
Grengas

5

Saya juga mengalami masalah ini di RDS. Saya masuk sebagai rootpengguna, membuat peran bernama myappuserdan kemudian mencoba membuat skema yang disebut superduperpemilik siapamyappuser .

Saya menemukan solusi yang berhasil. Buat myappuserperan, dan pastikan bahwa peran ini setidaknya memiliki izin untuk membuat database (hak istimewa disebut CREATEDB). Setelah membuat myappuserperan, saya masuk ke database sebagai myappuserdan membuat superduperskema yang penggunanya adalah myappuser. Ini bekerja tanpa masalah.


1

Saya baru saja menemukan ini menggunakan Amazon RDS.

Banyak jawaban sudah benar, tetapi Anda juga bisa mengubah perannya.

Inilah implementasi saya

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

Jadi saat mengubah kata sandi, saya juga menambahkan izin peran CREATEDB ke peran tersebut.


0

Saya menghadapi masalah yang sama. Untuk mengatasi ini, saya masuk dengan peran yang baru dibuat dan membuat database. Entah bagaimana, hibah tidak berfungsi di RDS Postgres.


0

Saya memperbaikinya dengan masuk dengan postgrespengguna (dan kemudian menerapkan perubahan saya, yang mengubah kepemilikan dalam kasus saya):

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.