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!
postgresql
roles
Ultranuke
fuente
fuente
Respuestas:
Me encontré con este problema cuando lo usaba
CREATE DATABASE
en Amazon RDS. Creo que es esencialmente lo mismo que usarCREATE SCHEMA
.Al utilizar Amazon RDS, el usuario que emite el
CREATE DATABASE
debe 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 usandoroot
, y voy a crear un rolo
que será propietario de una base de datosd
: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
fuente
GRANT o TO postgres;
antes de crear la base de datos.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>;
fuente
¿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
fuente
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
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 ....
fuente
¿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
fuente
GRANT service_role TO admin_user;
También me he encontrado con este problema en RDS. Inicié sesión como
root
usuario, creé un rol llamadomyappuser
y luego intenté crear un esquema llamadosuperduper
cuyo propietario esmyappuser
.Encontré una solución que funciona. Cree el
myappuser
rol y asegúrese de que este rol tenga al menos el permiso para crear bases de datos (el privilegio se llamaCREATEDB
). Después de crear elmyappuser
rol, inicié sesión en la base de datos comomyappuser
y creé elsuperduper
esquema cuyo usuario esmyappuser
. Esto funcionó sin ningún problema.fuente
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.
fuente
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.
fuente
Lo arreglé iniciando sesión con el
postgres
usuario (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;
fuente