2014-10-31 7 views
37

Ich bin mit einem Superuser-Account angemeldet und dies ist der Prozess, den ich so mache:„ERROR: muss Mitglied der Rolle sein“ Beim Erstellen von Schema in PostgreSQL

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

Die Rolle korrekt erstellt, aber ich bekomme diesen Fehler beim Versuch, das Schema zu erstellen:

ERROR: must be member of role "test" 

Vielen Dank im Voraus!

+0

gehen gerade durch http://www.postgresql.org/docs/9.3/static/role-membership. html –

+0

Ich habe immer noch das gleiche Problem, kann mir bitte jemand helfen? – Ultranuke

Antwort

20

Verwenden Sie RDS? Weil ich das gleiche Problem bekomme, wenn ich mich als "Superuser" einlogge, den sie für dich erstellen. Die Art und Weise, wie ich das beheben konnte, bestand darin, eine neue Gruppenrolle zu erstellen, die meinen Superbenutzer und den Benutzer, dem das Schema gehörte, einschloss. Also für Sie, dies würde bedeuten, dass Ihre Superuser und Test-Benutzer zu einer neuen Rollengruppe hinzufügen:

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

Jetzt sollten Sie in der Lage sein, Ihre schmea erstellen

+1

Das ist ein bisschen verwirrt, aber ich habe es benutzt, um herauszufinden, was los ist. Siehe meine Antwort: http://stackoverflow.com/a/34898033/242457 –

5

ich dieses Problem gestoßen sind auch auf RDS. Ich habe mich als root Benutzer angemeldet, eine Rolle mit dem Namen myappuser erstellt und dann versucht, ein Schema namens superduper zu erstellen, dessen Besitzer myappuser ist.

Ich fand eine Lösung, die funktioniert. Erstellen Sie die myappuser-Rolle, und stellen Sie sicher, dass diese Rolle mindestens über die Berechtigung zum Erstellen von Datenbanken verfügt (die Berechtigung heißt). Nach dem Erstellen der myappuser Rolle habe ich mich in der Datenbank als myappuser angemeldet und das superduper Schema erstellt, dessen Benutzer myappuser ist. Dies funktionierte ohne Probleme.

13

Hatte dieses Problem mit RDS auch.

es zu lösen:

Anmeldung als Superuser

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

den Benutzer erstellen

CREATE USER newuser WITH CREATEDB PASSWORD 'password'; 

Logout

\q 

Anmeldung als newuser

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

Erstellen Sie Ihr DB/Schema

CREATE SCHEMA/DATABASE .... 
43

ich in dieser Ausgabe lief, als CREATE DATABASE auf Amazon RDS. Ich denke, es ist im Wesentlichen das gleiche wie mit CREATE SCHEMA.

Bei der Verwendung von Amazon RDS muss der Benutzer, der CREATE DATABASE ausgibt, ein Mitglied der Rolle sein, die der Eigentümer der Datenbank sein wird. In meinem Fall bin mit Superuser-Account I root genannt, und ich werde eine Rolle o zu schaffen, die eine Datenbank besitzen wird 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 
+3

Das gleiche, aber ich fand, dass der neue Benutzer nicht die Berechtigung CREATEDB haben musste. Ich habe einen normalen Benutzer erstellt, diesem Admin-Benutzer diese Benutzerrolle zugewiesen und dann die Datenbank mit dem Benutzer admin erstellt, wobei der Eigentümer auf den normalen Benutzer festgelegt wurde. –

+0

Danke ..... Für mich gearbeitet .... – anupammaiti

+0

Es gibt eine kurze Beschreibung beschreibt die Ursache für diesen Effekt auf RDS hier .. https://blog.2ndquadrant.com/the-rds_superuser-role-isnt-that -super – Molomby

4

Haben wir nicht die nur gewähren müssen Admin-Benutzerzugehörigkeit zur Service-Rolle?

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 
+2

In Postgres 9.0 und höher, das "TO" beinhaltet: "GRANT service_role TO admin_user;' – Grengas

12

stieß ich auf das gleiche Problem, es wird über den aktuellen (Master) Benutzer beschweren Sie angemeldet sind, ist kein Mitglied der Benutzergruppe Sie sind versuchen, das Schema zu erstellen. Sie sollten die Rolle Zugriff auf Ihre Master-Benutzer gewähren und es lassen Sie die SCHEMA ohne Fehler erstellen:

GRANT <role> TO <master_user>; 
Verwandte Themen