"ERRORE: deve essere membro del ruolo" Durante la creazione dello schema in PostgreSQL


92

Ho effettuato l'accesso con un account superutente e questo è il processo che sto facendo:

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

Il ruolo è stato creato correttamente ma ricevo questo errore quando provo a creare lo schema:

ERROR:  must be member of role "test"

Grazie in anticipo!



Ho ancora lo stesso problema, qualcuno può aiutarmi per favore?
Ultranuke

Risposte:


134

Ho riscontrato questo problema durante l'utilizzo CREATE DATABASEsu Amazon RDS. Penso che sia essenzialmente lo stesso che usare CREATE SCHEMA.

Quando si utilizza Amazon RDS, l'utente che rilascia il CREATE DATABASEdeve essere un membro del ruolo che sarà il proprietario del database. Nel mio caso, viene chiamato l'account superutente che sto utilizzando roote creerò un ruolo oche possiederà un 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
Stessa cosa, ma ho scoperto che il nuovo utente non necessitava dell'autorizzazione CREATEDB. Ho creato un utente normale, concesso quel ruolo utente al mio utente amministratore, quindi ho creato il database utilizzando l'utente amministratore con il proprietario impostato sull'utente normale.
Nick Spacek

C'è una breve scrittura che descrive la causa di questo effetto su RDS qui .. blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Molomby

3
Ho avuto lo stesso errore su Google Cloud SQL per PostgreSQL e questa risposta è stata la soluzione tranne che ho eseguito GRANT o TO postgres;prima di creare il database.
Simon Watson

40

Mi sono imbattuto in questo stesso problema, si lamenta del fatto che l'utente corrente (master) con cui hai effettuato l'accesso non è un membro del gruppo di utenti per cui stai cercando di creare lo schema. Dovresti concedere l'accesso al ruolo al tuo utente principale e ti consentirà di creare lo SCHEMA senza errori:

GRANT <role> TO <master_user>;

24

Stai usando RDS? Perché ottengo lo stesso problema quando accedo come "superutente" che creano per te. Il modo in cui sono stato in grado di risolvere questo problema è stato creare un nuovo ruolo di gruppo che includesse il mio super utente e l'utente che possedeva lo schema. Quindi per te questo significherebbe aggiungere il tuo super utente e utente di prova a un nuovo gruppo di ruoli:

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

Ora dovresti essere in grado di creare il tuo schmea


1
Questo è un po 'confuso, ma l'ho usato per capire alla fine cosa stava succedendo. Vedi la mia risposta: stackoverflow.com/a/34898033/242457
David Jones

17

Ho avuto questo problema anche con RDS.

Per risolverlo:

Accedi come superutente

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

Crea l'utente

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

Disconnettersi

\q

Accedi come newuser

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

Crea il tuo DB / Schema

CREATE SCHEMA/DATABASE ....

9

Non dobbiamo solo concedere l'appartenenza dell'utente amministratore al ruolo del servizio?

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
In Postgres 9.0 e superiori la concessione include "TO":GRANT service_role TO admin_user;
Grengas

5

Ho riscontrato questo problema anche su RDS. Ho effettuato l'accesso come rootutente, ho creato un ruolo denominato myappusere quindi ho provato a creare uno schema chiamato il superdupercui proprietario è myappuser.

Ho trovato una soluzione che funziona. Crea il myappuserruolo e assicurati che questo ruolo abbia almeno l'autorizzazione per creare database (il privilegio è chiamato CREATEDB). Dopo aver creato il myappuserruolo, ho effettuato l'accesso al database come myappusere ho creato lo superduperschema il cui utente è myappuser. Ha funzionato senza problemi.


1

Mi sono appena imbattuto in questo utilizzando Amazon RDS.

Molte delle risposte sono già corrette, ma puoi anche modificare il ruolo.

Ecco la mia implementazione

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

Quindi, mentre modifico la password, aggiungo anche l'autorizzazione del ruolo CREATEDB al ruolo.


0

Stavo affrontando lo stesso problema. Per risolvere questo problema, ho effettuato l'accesso con il ruolo appena creato e ho creato il database. In qualche modo, grant non funziona in RDS Postgres.


0

L'ho risolto accedendo con l' postgresutente (e quindi applicare le mie modifiche, che nel mio caso cambiava proprietà):

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.