"HATA: rolün üyesi olmalı" PostgreSQL'de şema oluştururken


92

Bir süper kullanıcı hesabıyla giriş yaptım ve yaptığım işlem şu:

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

Rol doğru bir şekilde oluşturuldu, ancak Şema oluşturmaya çalışırken şu hatayı alıyorum:

ERROR:  must be member of role "test"

Şimdiden teşekkürler!



Hala aynı sorunu yaşıyorum, lütfen bana yardım edebilir mi?
Ultranuke

Yanıtlar:


134

CREATE DATABASEAmazon RDS'yi kullanırken bu sorunla karşılaştım . Bence esasen kullanmakla aynı CREATE SCHEMA.

Amazon RDS'yi kullanırken, yetkisini veren kullanıcı CREATE DATABASE, veritabanının sahibi olacak rolün bir üyesi olmalıdır. Benim durumumda, kullandığım süper kullanıcı hesabı çağrıldı rootve obir veritabanına sahip olacak bir rol oluşturacağım 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
Aynı şey, ancak yeni kullanıcının CREATEDB iznine sahip olmasına gerek olmadığını buldum. Normal bir kullanıcı oluşturdum, bu kullanıcı rolünü yönetici kullanıcıma verdim, ardından veritabanını yönetici kullanıcıyı kullanarak, sahibi normal kullanıcı olarak ayarlayarak oluşturdum.
Nick Spacek

Burada RDS üzerindeki bu etkinin nedenini açıklayan kısa bir yazı var .. blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Molomby

3
PostgreSQL için Google Cloud SQL'de de aynı hatayı aldım ve bu yanıt, GRANT o TO postgres;veritabanını oluşturmadan önce çalıştırmam dışında çözümdü .
Simon Watson

40

Aynı sorunla karşılaştım, giriş yaptığınız mevcut (ana) kullanıcının şemayı oluşturmaya çalıştığınız kullanıcı grubunun bir üyesi olmadığından şikayetçi oldum. Rol erişimini ana kullanıcınıza vermelisiniz ve bu, SCHEMA'yı hatasız oluşturmanıza izin verecektir:

GRANT <role> TO <master_user>;

24

RDS kullanıyor musunuz? Çünkü sizin için oluşturdukları "süper kullanıcı" olarak oturum açtığımda aynı sorunu yaşıyorum. Bunu düzeltebilmemin yolu, süper kullanıcımı ve şemanın sahibi olan kullanıcıyı içeren yeni bir grup rolü oluşturmaktı. Yani sizin için bu, süper kullanıcınızı ve test kullanıcınızı yeni bir rol grubuna eklemek anlamına gelir:

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

Şimdi schmea'nızı yaratabilmelisiniz


1
Bu biraz kafa karıştırıcı, ancak bunu sonunda neler olup bittiğini çözmek için kullandım.
David Jones

17

RDS ile de bu sorunu yaşadım.

Çözmek için:

Süper kullanıcı olarak giriş yapın

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

Kullanıcıyı Oluşturun

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

Çıkış Yap

\q

Giriş yap newuser

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

DB / Şemanızı oluşturun

CREATE SCHEMA/DATABASE ....

9

Hizmet rolüne yönetici kullanıcı üyeliği vermemiz gerekmez mi?

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 ve GRANT service_role TO admin_user;
sonraki sürümlerde

5

Bu sorunla RDS'de de karşılaştım. rootKullanıcı olarak oturum açtım , adlı bir rol oluşturdum myappuserve ardından superdupersahibi olan adında bir şema oluşturmayı denedim myappuser.

Çalışan bir çözüm buldum. myappuserRolü oluşturun ve bu rolün en azından veritabanı oluşturma iznine sahip olduğundan emin olun (ayrıcalık çağrılır CREATEDB). myappuserRolü oluşturduktan sonra veritabanına olarak giriş yaptım myappuserve superduperkullanıcısı olan şemayı oluşturdum myappuser. Bu sorunsuz çalıştı.


1

Amazon RDS kullanarak bununla karşılaştım.

Cevapların çoğu zaten doğrudur, ancak rolünüzü de değiştirebilirsiniz.

İşte benim uygulamamdı

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

Bu yüzden şifreyi değiştirirken, CREATEDB rol iznini de role ekliyorum.


0

Ben de aynı sorunla karşı karşıyaydım. Bunu çözmek için, yeni oluşturulan rolle giriş yaptım ve veritabanını oluşturdum. Her nasılsa, hibe RDS Postgres'te çalışmıyor.


0

postgresKullanıcı ile oturum açarak sorunu düzelttim (ve sonra benim durumumda sahipliğini değiştiren değişikliklerimi uyguladım)

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.