"ERROR: debe ser miembro del rol" al crear un esquema en PostgreSQL


87

Estoy conectado con una cuenta de superusuario y este es el proceso que estoy haciendo:

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

El rol se creó correctamente pero recibo este error al intentar crear el esquema:

ERROR:  must be member of role "test"

¡Gracias por adelantado!



Sigo teniendo el mismo problema, ¿alguien puede ayudarme?
Ultranuke

Respuestas:


127

Me encontré con este problema cuando lo usaba CREATE DATABASEen Amazon RDS. Creo que es esencialmente lo mismo que usar CREATE SCHEMA.

Al utilizar Amazon RDS, el usuario que emite el CREATE DATABASEdebe ser miembro del rol que será el propietario de la base de datos. En mi caso, se llama a la cuenta de superusuario que estoy usando root, y voy a crear un rol oque será propietario de una base de datos 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
Lo mismo, pero descubrí que el nuevo usuario no necesitaba tener el permiso CREATEDB. Creé un usuario regular, le otorgué ese rol de usuario a mi usuario administrador, luego creé la base de datos usando el usuario administrador con el propietario configurado como usuario regular.
Nick Spacek

Hay un breve artículo que describe la causa de este efecto en RDS aquí .. blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Molomby

2
Tuve este mismo error en Google Cloud SQL para PostgreSQL y esta respuesta fue la solución, excepto que ejecuté GRANT o TO postgres;antes de crear la base de datos.
Simon Watson

38

Me encontré con este mismo problema, se queja de que el usuario actual (maestro) con el que ha iniciado sesión no es miembro del grupo de usuarios para el que está intentando crear el esquema. Debe otorgar el acceso de rol a su usuario maestro y le permitirá crear el ESQUEMA sin errores:

GRANT <role> TO <master_user>;

24

¿Está utilizando RDS? Porque tengo el mismo problema cuando inicio sesión como el "superusuario" que ellos crean para usted. La forma en que pude solucionar esto fue crear un nuevo rol de grupo que incluía a mi superusuario y al usuario que era propietario del esquema. Entonces, para usted, esto significaría agregar su superusuario y usuario de prueba a un nuevo grupo de roles:

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

Ahora deberías poder crear tu schmea


1
Esto es un poco confuso, pero usé esto para eventualmente averiguar qué estaba pasando. Vea mi respuesta: stackoverflow.com/a/34898033/242457
David Jones

17

También tuve este problema con RDS.

Para solucionarlo:

Iniciar sesión como superusuario

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

Crear el usuario

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

Cerrar sesión

\q

Iniciar sesión como newuser

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

Crea tu base de datos / esquema

CREATE SCHEMA/DATABASE ....

8

¿No solo tenemos que otorgar al usuario administrador la membresía del rol de servicio?

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
En Postgres 9.0 y superior, la concesión incluye "TO":GRANT service_role TO admin_user;
Grengas

5

También me he encontrado con este problema en RDS. Inicié sesión como rootusuario, creé un rol llamado myappusery luego intenté crear un esquema llamado superdupercuyo propietario es myappuser.

Encontré una solución que funciona. Cree el myappuserrol y asegúrese de que este rol tenga al menos el permiso para crear bases de datos (el privilegio se llama CREATEDB). Después de crear el myappuserrol, inicié sesión en la base de datos como myappusery creé el superduperesquema cuyo usuario es myappuser. Esto funcionó sin ningún problema.


0

Estaba enfrentando el mismo problema. Para resolver esto, inicié sesión con el rol recién creado y creé la base de datos. De alguna manera, la concesión no funciona en RDS Postgres.


0

Me encontré con esto usando Amazon RDS.

Muchas de las respuestas ya son correctas, pero también puede modificar el rol.

Aquí estaba mi implementación

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

Entonces, mientras cambio la contraseña, también agrego el permiso de función CREATEDB a la función.


0

Lo arreglé iniciando sesión con el postgresusuario (y luego apliqué mis cambios, que estaba cambiando de propiedad en mi caso):

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.