“ ข้อผิดพลาด: ต้องเป็นสมาชิกของบทบาท” เมื่อสร้างสคีมาใน PostgreSQL


92

ฉันเข้าสู่ระบบด้วยบัญชี superuser และนี่คือกระบวนการที่ฉันทำ:

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

สร้างบทบาทอย่างถูกต้อง แต่ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามสร้าง Schema:

ERROR:  must be member of role "test"

ขอบคุณล่วงหน้า!


เพียงแค่อ่านpostgresql.org/docs/9.3/static/role-membership.html
Vivek S.

ฉันยังคงประสบปัญหาเดิมใครก็ได้โปรดช่วยฉันที?
Ultranuke

คำตอบ:


134

ฉันพบปัญหานี้เมื่อใช้CREATE DATABASEกับ Amazon RDS CREATE SCHEMAฉันคิดว่ามันเป็นหลักเช่นเดียวกับการใช้

เมื่อใช้ Amazon RDS ผู้ใช้ที่ออกCREATE DATABASEต้องเป็นสมาชิกของบทบาทที่จะเป็นเจ้าของฐานข้อมูล ในกรณีของฉันบัญชี superuser ที่ฉันใช้เรียกว่า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

4
เหมือนกัน แต่ฉันพบว่าผู้ใช้ใหม่ไม่จำเป็นต้องได้รับอนุญาต CREATEDB ฉันสร้างผู้ใช้ปกติมอบบทบาทผู้ใช้นั้นให้กับผู้ดูแลระบบของฉันจากนั้นสร้างฐานข้อมูลโดยใช้ผู้ใช้ผู้ดูแลระบบโดยเจ้าของตั้งค่าเป็นผู้ใช้ทั่วไป
Nick Spacek

มีข้อความสั้น ๆ อธิบายถึงสาเหตุของผลกระทบนี้กับ RDS ที่นี่ .. blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Molomby

3
ฉันมีข้อผิดพลาดเดียวกันนี้บน Google Cloud SQL สำหรับ PostgreSQL และคำตอบนี้เป็นวิธีแก้ปัญหายกเว้นว่าฉันรันGRANT o TO postgres;ก่อนสร้างฐานข้อมูล
Simon Watson

40

ฉันเจอปัญหาเดียวกันนี้มันกำลังบ่นเกี่ยวกับผู้ใช้ปัจจุบัน (หลัก) ที่คุณลงชื่อเข้าใช้ไม่ใช่สมาชิกของกลุ่มผู้ใช้ที่คุณพยายามสร้างสคีมา คุณควรให้สิทธิ์การเข้าถึงบทบาทแก่ผู้ใช้หลักของคุณและจะช่วยให้คุณสร้าง SCHEMA ได้โดยไม่มีข้อผิดพลาด:

GRANT <role> TO <master_user>;

24

คุณใช้ RDS หรือไม่? เพราะฉันได้รับปัญหาเดียวกันเมื่อฉันเข้าสู่ระบบในฐานะ "superuser" ที่พวกเขาสร้างให้คุณ วิธีที่ฉันแก้ไขปัญหานี้ได้คือการสร้างบทบาทกลุ่มใหม่ที่รวมผู้ใช้ขั้นสูงและผู้ใช้ที่เป็นเจ้าของสคีมา สำหรับคุณแล้วนี่หมายถึงการเพิ่มผู้ใช้ขั้นสูงและผู้ใช้ทดสอบของคุณไปยังกลุ่มบทบาทใหม่:

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

ตอนนี้คุณควรจะสามารถสร้าง Schmea ของคุณได้


1
มันค่อนข้างสับสน แต่ในที่สุดฉันก็ใช้สิ่งนี้เพื่อหาว่าเกิดอะไรขึ้น ดูคำตอบของฉัน: stackoverflow.com/a/34898033/242457
David Jones

17

มีปัญหากับ RDS เช่นกัน

วิธีแก้ปัญหา:

เข้าสู่ระบบด้วย superuser

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 ....

9

เราไม่จำเป็นต้องให้สิทธิ์สมาชิกผู้ใช้ที่เป็นผู้ดูแลระบบในบทบาทบริการหรือไม่?

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วิธีนี้ใช้งานได้โดยไม่มีปัญหาใด ๆ


1

ฉันเพิ่งพบสิ่งนี้โดยใช้ Amazon RDS

คำตอบจำนวนมากถูกต้องอยู่แล้ว แต่คุณสามารถปรับเปลี่ยนบทบาทได้

นี่คือการนำไปใช้ของฉัน

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

ดังนั้นในขณะที่เปลี่ยนรหัสผ่านฉันกำลังเพิ่มสิทธิ์บทบาท CREATEDB ให้กับบทบาทด้วย


0

ฉันประสบปัญหาเดียวกัน เพื่อแก้ไขปัญหานี้ฉันเข้าสู่ระบบด้วยบทบาทที่สร้างขึ้นใหม่และสร้างฐานข้อมูล อย่างไรก็ตามการให้สิทธิ์ไม่ทำงานใน RDS Postgres


0

ฉันแก้ไขโดยการเข้าสู่ระบบด้วยpostgresผู้ใช้ (จากนั้นใช้การเปลี่ยนแปลงของฉันซึ่งเป็นการเปลี่ยนความเป็นเจ้าของในกรณีของฉัน):

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.