Tại sao tôi không thể tạo siêu người dùng trong ví dụ AWS Postgresql?


15

Tôi có một phiên bản AWS EC2 kết nối với một phiên bản RDS (Postgresql). Khi tôi tạo cá thể RDS, tôi đã nói với nó tên người dùng của DB là: my_user1và mật khẩu là password1. Bây giờ tôi đang cố gắng tạo ra một vai trò và một siêu người dùng. Nhưng nó thất bại:

$ createuser -P -d -s -e my_user2 --host myhost.com -U my_user1
Enter password for new role: XXXYYYZZZ
Enter it again: XXXYYYZZZ
Password: password1
CREATE ROLE my_user2 PASSWORD 'md5999999c0101a1d64afd57575e06f999c' SUPERUSER CREATEDB  CREATEROLE INHERIT LOGIN;
createuser: creation of new role failed: ERROR:  must be superuser to create superusers
$

Khi tôi lặp lại lệnh mà không có -scờ, nó hoạt động:

$ createuser -P -d -e my_user2 --host myhost.com  -U my_user1
Enter password for new role:
Enter it again:
Password:
CREATE ROLE my_user2 PASSWORD 'md5999999c0101a1d64afd57575e06f888c' NOSUPERUSER CREATEDB NOCREATEROLE INHERIT LOGIN;
$

Vì vậy, rõ ràng, my_user1không có quyền để tạo một siêu người dùng. Nhưng đây là người dùng tôi đã nói với RDS là người dùng quản trị của tôi! Nếu my_user1không có quyền tạo siêu người dùng, ai sẽ làm? Và làm cách nào để có được tên người dùng / mật khẩu của họ từ AWS?


pg_hba.conf có nói sơ đồ xác thực là ngang hàng với người dùng cục bộ không?
drookie

Drookie, tập tin này có phải là bản sao RDS không? Tôi thậm chí chưa SSH vào máy đó.
Saqib Ali

@SaqibAli Bạn không thể SSH vào một ví dụ RDS.
ceejayoz

Câu trả lời:


22

Các trường hợp RDS được quản lý bởi Amazon. Như vậy, để ngăn bạn phá vỡ mọi thứ như sao chép, người dùng của bạn - ngay cả người dùng root mà bạn đã thiết lập khi tạo phiên bản - sẽ không có đặc quyền siêu người dùng đầy đủ.

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appcill.PostgreQuery.CommonDBAT task.html

Khi bạn tạo một cá thể DB, tài khoản hệ thống người dùng chính mà bạn tạo được gán cho vai trò rds_superuser. Vai trò rds_superuser là vai trò Amazon RDS được xác định trước tương tự như vai trò siêu người dùng PostgreQuery (được đặt tên theo postgres trong các trường hợp cục bộ), nhưng với một số hạn chế. Cũng như vai trò siêu người dùng PostgreSQL, vai trò rds_superuser có nhiều đặc quyền nhất trên cá thể DB của bạn và bạn không nên gán vai trò này cho người dùng trừ khi họ cần quyền truy cập nhiều nhất vào đối tượng DB.


5
Tôi không thể sao lưu cơ sở dữ liệu của mình mà không sử dụng cờ siêu người dùng pg_dump. Có cách nào khác với rds trên aws không?
chovy

@chovy, hãy thử nhập grantvai trò chủ sở hữu db cho người dùng của bạn.
Spike

3

Nếu bạn liệt kê các quyền hiện tại của mình bằng \du+hoặc \dg+, bạn sẽ nhận thấy bạn không phải là siêu người dùng mà chỉ cho phép các quyền Tạo vai trò, Tạo DB . Vì vậy, bạn không được phép tự gán cho mình các quyền cao hơn so với các quyền mà bạn hiện đang được chỉ định.

Thông thường, bạn không được cấp quyền root hoặc superuser trong bất kỳ môi trường lưu trữ nào. Tôi khuyên bạn nên tạo một cá thể EC2 tùy chỉnh và cài đặt PostgreSQL cục bộ để kiểm soát hoàn toàn.


2
Có thực sự không có cách nào để sao lưu cơ sở dữ liệu amazon rds với pg_dump không?
chovy
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.