"FEHLER: muss Mitglied der Rolle sein" Beim Erstellen eines Schemas in PostgreSQL

91

Ich bin mit einem Superuser-Konto angemeldet und dies ist der Prozess, den ich mache:

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

Die Rolle wurde korrekt erstellt, aber beim Versuch, das Schema zu erstellen, wird folgende Fehlermeldung angezeigt:

ERROR:  must be member of role "test"

Danke im Voraus!

Ultranuke
quelle
Gehen Sie
Vivek S.
Ich habe immer noch das gleiche Problem. Kann mir bitte jemand helfen?
Ultranuke

Antworten:

132

Bei der Verwendung CREATE DATABASEmit Amazon RDS ist dieses Problem aufgetreten. Ich denke, es ist im Wesentlichen das gleiche wie mit CREATE SCHEMA.

Bei Verwendung von Amazon RDS muss der Benutzer, der das CREATE DATABASEausgibt, Mitglied der Rolle sein, die der Eigentümer der Datenbank sein wird. In meinem Fall wird das von mir verwendete Superuser-Konto aufgerufen rootund ich werde eine Rolle erstellen, odie 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
David Jones
quelle
4
Das Gleiche, aber ich stellte fest, dass der neue Benutzer nicht über die Berechtigung CREATEDB verfügen musste. Ich habe einen regulären Benutzer erstellt, meinem Administrator diese Benutzerrolle zugewiesen und dann die Datenbank mit dem Administrator erstellt, wobei der Eigentümer auf den regulären Benutzer festgelegt ist.
Nick Spacek
Es gibt eine kurze Beschreibung der Ursache dieses Effekts auf RDS hier .. blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Molomby
3
Ich hatte denselben Fehler in Google Cloud SQL für PostgreSQL und diese Antwort war die Lösung, außer dass ich sie GRANT o TO postgres;vor dem Erstellen der Datenbank ausgeführt habe.
Simon Watson
39

Ich bin auf dasselbe Problem gestoßen. Es beschwert sich darüber, dass der aktuelle (Haupt-) Benutzer, mit dem Sie angemeldet sind, kein Mitglied der Benutzergruppe ist, für die Sie das Schema erstellen möchten. Sie sollten Ihrem Hauptbenutzer den Rollenzugriff gewähren, damit Sie das SCHEMA ohne Fehler erstellen können:

GRANT <role> TO <master_user>;
James Ching
quelle
24

Verwenden Sie RDS? Weil ich das gleiche Problem bekomme, wenn ich mich als "Superuser" anmelde, den sie für Sie erstellen. Die Art und Weise, wie ich dies beheben konnte, bestand darin, eine neue Gruppenrolle zu erstellen, die meinen Superuser und den Benutzer, dem das Schema gehörte, umfasste. Für Sie bedeutet dies, dass Sie Ihren Superuser und Testbenutzer 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 zu erstellen

Bionicseraph
quelle
1
Das ist ein bisschen verwirrt, aber ich habe es benutzt, um irgendwann herauszufinden, was los war. Siehe meine Antwort: stackoverflow.com/a/34898033/242457
David Jones
17

Hatte dieses Problem auch mit RDS.

Um es zu lösen:

Melden Sie sich als Superuser an

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

Erstellen Sie den Benutzer

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

Ausloggen

\q

Anmelden als newuser

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

Erstellen Sie Ihre DB / Ihr Schema

CREATE SCHEMA/DATABASE ....
Rafael Oliveira
quelle
9

Müssen wir der Administratorrolle nicht nur die Administratormitgliedschaft zuweisen?

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
Jorfus
quelle
4
In Postgres 9.0 und höher beinhaltet die Gewährung "TO":GRANT service_role TO admin_user;
Grengas
5

Ich habe dieses Problem auch bei RDS festgestellt. Ich habe mich als rootBenutzer angemeldet , eine Rolle mit dem Namen erstellt myappuserund dann versucht, ein Schema mit dem Namen " superduperEigentümer" zu erstellen myappuser.

Ich habe eine Lösung gefunden, die funktioniert. Erstellen Sie die myappuserRolle, und stellen Sie sicher, dass diese Rolle mindestens über die Berechtigung zum Erstellen von Datenbanken verfügt (die Berechtigung wird aufgerufen CREATEDB). Nach dem Erstellen der myappuserRolle habe ich mich bei der Datenbank als angemeldet myappuserund das superduperSchema erstellt, dessen Benutzer ist myappuser. Dies funktionierte ohne Probleme.

Krystian Cybulski
quelle
1

Ich bin gerade mit Amazon RDS darauf gestoßen.

Viele der Antworten sind bereits richtig, aber Sie können auch einfach die Rolle ändern.

Hier war meine Implementierung

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

Während ich das Kennwort ändere, füge ich der Rolle auch die Berechtigung CREATEDB-Rolle hinzu.

sprut
quelle
0

Ich stand vor dem gleichen Problem. Um dies zu beheben, habe ich mich mit der neu erstellten Rolle angemeldet und die Datenbank erstellt. Irgendwie funktioniert Grant in RDS Postgres nicht.

Sid
quelle
0

Ich habe es behoben, indem ich mich mit dem postgresBenutzer angemeldet habe (und dann meine Änderungen übernommen habe, die in meinem Fall den Besitzer gewechselt haben):

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
DevonDahon
quelle