“ПОМИЛКА: повинен бути членом ролі” При створенні схеми в 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 DATABASEна Amazon 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. Я створив звичайного користувача, надав цю роль моєму користувачеві-адміністратору, а потім створив базу даних, використовуючи користувача адміністратора з власником, встановленим для звичайного користувача.
Nick Spacek

Тут є короткий запис із описом причини цього ефекту на RDS тут .. blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Моломбі

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

38

Я натрапив на цю саму проблему: вона скаржиться на поточного (головного) користувача, з яким ви ввійшли, і не є членом групи користувачів, для якої ви намагаєтеся створити схему. Ви повинні надати ролі доступ своєму головному користувачеві, і це дозволить вам створити СХЕМУ без помилок:

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 і вище надання включає "TO":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.