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

87

Je suis connecté avec un compte superutilisateur et voici le processus que je fais:

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!

Ultranuke
la source
il suffit de passer par postgresql.org/docs/9.3/static/role-membership.html
Vivek S.
J'ai toujours le même problème, n'importe qui peut m'aider?
Ultranuke

Réponses:

127

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

Lors de l'utilisation d'Amazon RDS, l'utilisateur émettant le CREATE DATABASEdoit ê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 est appelé root, et je vais créer un rôle oqui 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
David Jones
la source
3
Même chose, mais j'ai trouvé que le nouvel utilisateur n'avait pas besoin de l'autorisation CREATEDB. J'ai créé un utilisateur normal, accordé ce rôle d'utilisateur à mon utilisateur administrateur, puis créé la base de données à l'aide de l'utilisateur administrateur avec le propriétaire défini sur l'utilisateur normal.
Nick Spacek
Il y a un court article décrivant la cause de cet effet sur RDS ici. Blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Molomby
2
J'ai eu cette même erreur sur Google Cloud SQL pour PostgreSQL et cette réponse était la solution sauf que j'ai couru GRANT o TO postgres;avant de créer la base de données.
Simon Watson
38

Je suis tombé sur ce même problème, il se plaint du fait que l'utilisateur (principal) actuel avec lequel 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 et il vous permettra de créer le SCHEMA sans erreur:

GRANT <role> TO <master_user>;
James Ching
la source
24

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

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

Vous devriez maintenant pouvoir créer votre schmea

bionique séraphin
la source
1
C'est un peu confus, mais je l'ai utilisé pour finalement comprendre ce qui se passait. Voir ma réponse: stackoverflow.com/a/34898033/242457
David Jones
17

Eu ce problème avec RDS aussi.

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';

Se déconnecter

\q

Se connecter 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 ....
Rafael Oliveira
la source
8

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
Jorfus
la source
4
Dans Postgres 9.0 et supérieur, l'octroi comprend "TO":GRANT service_role TO admin_user;
Grengas
5

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

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

Krystian Cybulski
la source
0

J'étais confronté au même problème. Pour résoudre ce problème, je me suis connecté avec le rôle nouvellement créé et j'ai créé la base de données. D'une manière ou d'une autre, la subvention ne fonctionne pas dans RDS Postgres.

Sid
la source
0

Je viens de rencontrer cela en utilisant Amazon RDS.

Beaucoup de réponses sont déjà correctes, mais vous pouvez également simplement 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, tout en modifiant le mot de passe, j'ajoute également l'autorisation de rôle CREATEDB au rôle.

sprut
la source
0

Je l'ai corrigé en me connectant avec l' postgresutilisateur (puis en appliquant mes modifications, ce qui changeait la propriété dans mon cas):

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