web-dev-qa-db-fra.com

"ERREUR: doit être membre du rôle" lors de la création du schéma dans PostgreSQL

Je suis connecté avec un compte superutilisateur et voici le processus que je suis en train de faire:

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

Le rôle est correctement créé, mais j'obtiens cette erreur en essayant de créer le schéma:

ERROR:  must be member of role "test"

Merci d'avance!

51
Ultranuke

J'ai rencontré ce problème lors de l'utilisation de CREATE DATABASE sur Amazon RDS. Je pense que c'est essentiellement la même chose que d'utiliser CREATE SCHEMA.

Lors de l'utilisation d'Amazon RDS, l'utilisateur qui a émis le CREATE DATABASE doit être membre du rôle qui sera le propriétaire de la base de données. Dans mon cas, le compte superutilisateur que j'utilise s'appelle root et je vais créer un rôle o qui va posséder une base de données 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
70
David Jones

Je suis tombé sur le même problème, le fait de se plaindre de l’utilisateur (maître) actuel auquel vous êtes connecté n’est pas membre du groupe d’utilisateurs pour lequel vous essayez de créer le schéma. Vous devez accorder l'accès au rôle à votre utilisateur principal, ce qui vous permettra de créer le SCHEMA sans erreur:

GRANT <role> TO <master_user>;
22
James Ching

Utilisez-vous RDS? Parce que je reçois le même problème lorsque je me connecte en tant que "superutilisateur" créé pour vous. La façon dont j'ai pu résoudre ce problème a été de créer un nouveau rôle de groupe incluant mon super utilisateur et l'utilisateur à qui appartient le schéma. Donc, pour vous, cela signifierait ajouter votre super utilisateur et votre utilisateur test à un nouveau groupe de rôles:

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

Maintenant, vous devriez pouvoir créer votre schmea

21
bionicseraph

Eu aussi ce problème avec RDS.

Pour le résoudre:

Connectez-vous en tant que superutilisateur

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

Créer l'utilisateur

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

Connectez - Out

\q

Connectez-vous en tant que newuser

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

Créez votre base de données/schéma

CREATE SCHEMA/DATABASE ....
15
Rafael Oliveira

Ne devons-nous pas simplement accorder l'adhésion de l'utilisateur administrateur au rôle de service?

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
7
jorfus

J'ai également rencontré ce problème sur RDS. Je me suis connecté en tant qu'utilisateur root, j'ai créé un rôle nommé myappuser, puis tenté de créer un schéma appelé superduper dont le propriétaire est myappuser.

J'ai trouvé une solution qui fonctionne. Créez le rôle myappuser et assurez-vous qu'il dispose au moins de l'autorisation de créer des bases de données (le privilège s'appelle CREATEDB). Après avoir créé le rôle myappuser, je me suis connecté à la base de données en tant que myappuser et j'ai créé le schéma superduper dont l'utilisateur est myappuser. Cela a fonctionné sans aucun problème.

5
Krystian Cybulski

Je viens de rencontrer cela en utilisant Amazon RDS.

La plupart des réponses sont déjà correctes, mais vous pouvez également modifier le rôle.

Voici ma mise en œuvre

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

Ainsi, lors de la modification du mot de passe, j'ajoute également l'autorisation du rôle CREATEDB au rôle.

0
sprut

Je faisais face au même problème. Pour résoudre ce problème, j'ai ouvert une session avec le rôle nouvellement créé et créé la base de données .

0
Sid