«ОШИБКА: должен быть членом роли» при создании схемы в PostgreSQL


88

Я вошел в систему с учетной записью суперпользователя, и вот что я делаю:

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

Роль создана правильно, но я получаю эту ошибку при попытке создать схему:

ERROR:  must be member of role "test"

Заранее спасибо!



У меня все еще та же проблема, кто-нибудь может мне помочь?
Ultranuke

Ответы:


128

Я столкнулся с этой проблемой при использовании CREATE DATABASEAmazon RDS. Я думаю, что по сути это то же самое, что и использование CREATE SCHEMA.

При использовании Amazon RDS пользователь, выдающий CREATE DATABASEучетную запись, должен быть членом роли, которая будет владельцем базы данных. В моем случае вызывается учетная запись суперпользователя, которую я использую root, и я собираюсь создать роль, oкоторая будет владеть базой данных 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
То же самое, но я обнаружил, что новому пользователю не нужно иметь разрешение CREATEDB. Я создал обычного пользователя, предоставил эту роль моему пользователю с правами администратора, а затем создал базу данных, используя пользователя с правами администратора, с владельцем, установленным на обычного пользователя.
Ник Спейсек

Здесь есть краткая запись, описывающая причину этого эффекта на RDS .. blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Molomby

2
У меня была такая же ошибка в Google Cloud SQL для PostgreSQL, и этот ответ был решением, за исключением того, что я запускал GRANT o TO postgres;перед созданием базы данных.
Саймон Уотсон

38

Я столкнулся с той же проблемой: он жалуется на то, что текущий (главный) пользователь, с которым вы вошли в систему, не является членом группы пользователей, для которой вы пытаетесь создать схему. Вы должны предоставить доступ к роли вашему главному пользователю, и это позволит вам создать SCHEMA без ошибок:

GRANT <role> TO <master_user>;

24

Вы используете RDS? Потому что я получаю ту же проблему, когда вхожу в систему как «суперпользователь», которую они для вас создают. Способ, которым я смог это исправить, заключался в создании новой групповой роли, включающей моего суперпользователя и пользователя, владеющего схемой. Таким образом, для вас это будет означать добавление вашего суперпользователя и тестового пользователя в новую группу ролей:

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

Теперь вы сможете создать свою шмею


1
Это немного сбивает с толку, но я использовал это, чтобы в конечном итоге понять, что происходит. См. Мой ответ: stackoverflow.com/a/34898033/242457
Дэвид Джонс,

17

Была эта проблема и с RDS.

Чтобы решить эту проблему:

Войти как суперпользователь

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

Создать пользователя

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

Выйти

\q

Войти как newuser

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

Создайте свою БД / схему

CREATE SCHEMA/DATABASE ....

8

Разве мы не должны просто предоставить членство администратора в роли службы?

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
В Postgres 9.0 и выше предоставление включает «ТО»:GRANT service_role TO admin_user;
Grengas

5

Я столкнулся с этой проблемой и в RDS. Я вошел в систему как rootпользователь, создал роль с именем, myappuserа затем попытался создать схему с именем superduper, владельцем которой является myappuser.

Я нашел решение, которое работает. Создайте myappuserроль и убедитесь, что у этой роли есть хотя бы разрешение на создание баз данных (эта привилегия называется CREATEDB). После создания myappuserроли я вошел в базу данных как myappuserи создал superduperсхему, пользователем которой является myappuser. Это сработало без проблем.


0

Я столкнулся с той же проблемой. Чтобы решить эту проблему, я вошел в систему с вновь созданной ролью и создал базу данных. Как-то не работает грант в RDS Postgres.


0

Я только что столкнулся с этим при использовании Amazon RDS.

Многие ответы уже верны, но вы также можете просто изменить роль.

Вот моя реализация

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

Поэтому при изменении пароля я также добавляю к роли разрешение роли CREATEDB.


0

Я исправил это, войдя в систему с postgresпользователем (а затем применил свои изменения, которые в моем случае меняли владельца):

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.