“LỖI: phải là thành viên của vai trò” Khi tạo lược đồ trong PostgreSQL


88

Tôi đã đăng nhập bằng tài khoản superuser và đây là quá trình tôi đang thực hiện:

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

Vai trò được tạo chính xác nhưng tôi gặp lỗi này khi cố gắng tạo Giản đồ:

ERROR:  must be member of role "test"

Cảm ơn trước!



Tôi vẫn gặp vấn đề tương tự, bất cứ ai có thể xin vui lòng giúp tôi?
Ultranuke

Câu trả lời:


128

Tôi đã gặp sự cố này khi sử dụng CREATE DATABASEtrên Amazon RDS. Tôi nghĩ về cơ bản nó giống như cách sử dụng CREATE SCHEMA.

Khi sử dụng Amazon RDS, người dùng phát hành CREATE DATABASEphải là thành viên của vai trò sẽ là chủ sở hữu của cơ sở dữ liệu. Trong trường hợp của tôi, tài khoản superuser mà tôi đang sử dụng được gọi rootvà tôi sẽ tạo một vai trò osẽ sở hữu một cơ sở dữ liệu 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
Tương tự, nhưng tôi thấy người dùng mới không cần phải có quyền CREATEDB. Tôi đã tạo người dùng thông thường, cấp vai trò người dùng đó cho người dùng quản trị của mình, sau đó tạo cơ sở dữ liệu bằng người dùng quản trị với chủ sở hữu được đặt thành người dùng thông thường.
Nick Spacek

Có một bài viết ngắn mô tả nguyên nhân của hiệu ứng này trên RDS ở đây .. blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super
Molomby 28/02/18

2
Tôi đã gặp lỗi này tương tự trên Google Cloud SQL cho PostgreSQL và câu trả lời này là giải pháp ngoại trừ tôi đã chạy GRANT o TO postgres;trước khi tạo cơ sở dữ liệu.
Simon Watson

38

Tôi đã gặp phải vấn đề tương tự này, đó là phàn nàn về người dùng (chính) hiện tại mà bạn đang đăng nhập không phải là thành viên của nhóm người dùng mà bạn đang cố gắng tạo lược đồ. Bạn nên cấp quyền truy cập vai trò cho người dùng chính của mình và nó sẽ cho phép bạn tạo SCHEMA mà không gặp lỗi:

GRANT <role> TO <master_user>;

24

Bạn đang sử dụng RDS? Vì tôi gặp vấn đề tương tự khi đăng nhập với tư cách là "siêu người dùng" mà họ tạo cho bạn. Cách mà tôi có thể khắc phục điều này là tạo một vai trò nhóm mới bao gồm người dùng cấp cao của tôi và người dùng sở hữu lược đồ. Vì vậy, đối với bạn, điều này có nghĩa là thêm người dùng cấp cao và người dùng thử nghiệm của bạn vào một nhóm vai trò mới:

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

Bây giờ bạn sẽ có thể tạo schmea của mình


1
Điều này là một chút bối rối, nhưng tôi đã sử dụng điều này để cuối cùng tìm ra những gì đang xảy ra. Xem phản ứng của tôi: stackoverflow.com/a/34898033/242457
David Jones

17

Cũng gặp vấn đề này với RDS.

Để giải quyết nó:

Đăng nhập với tư cách siêu người dùng

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

Tạo người dùng

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

Đăng xuất

\q

Vào newuser

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

Tạo DB / Schema của bạn

CREATE SCHEMA/DATABASE ....

8

Không phải chúng ta chỉ cần cấp tư cách thành viên người dùng quản trị cho vai trò dịch vụ sao?

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
Trong Postgres 9.0 trở lên cấp bao gồm "ĐẾN":GRANT service_role TO admin_user;
Grengas

5

Tôi cũng gặp phải vấn đề này trên RDS. Tôi đã đăng nhập với tư cách là rootngười dùng, tạo một vai trò có tên myappuservà sau đó thử tạo một lược đồ được gọi là superduperchủ sở hữu của nó myappuser.

Tôi đã tìm thấy một giải pháp hiệu quả. Tạo myappuservai trò và đảm bảo rằng vai trò này ít nhất có quyền tạo cơ sở dữ liệu (đặc quyền được gọi CREATEDB). Sau khi tạo myappuservai trò, tôi đăng nhập vào cơ sở dữ liệu myappuservà tạo superduperlược đồ có người dùng là myappuser. Điều này làm việc mà không có bất kỳ vấn đề.


0

Tôi đã phải đối mặt với cùng một vấn đề. Để giải quyết vấn đề này, tôi đã đăng nhập với vai trò mới được tạo và tạo cơ sở dữ liệu. Bằng cách nào đó, trợ cấp không hoạt động trong RDS Postgres.


0

Tôi vừa gặp phải vấn đề này bằng cách sử dụng Amazon RDS.

Rất nhiều câu trả lời đã đúng, nhưng bạn cũng có thể thay đổi vai trò.

Đây là cách thực hiện của tôi

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

Vì vậy, trong khi thay đổi mật khẩu, tôi cũng đang thêm quyền vai trò CREATEDB cho vai trò.


0

Tôi đã sửa nó bằng cách đăng nhập với postgresngười dùng (và sau đó áp dụng các thay đổi của tôi, tức là thay đổi quyền sở hữu trong trường hợp của tôi):

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.