Mengapa saya tidak bisa membuat superuser di AWS Postgresql misalnya?

15

Saya memiliki instance AWS EC2 yang menghubungkan ke instance RDS (Postgresql). Ketika saya membuat instance RDS, saya memberi tahu nama pengguna DB root: my_user1dan kata sandinya password1. Sekarang saya mencoba untuk membuat peran dan pengguna super. Tetapi gagal:

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

Ketika saya mengulangi perintah tanpa -sbendera, itu berfungsi:

$ 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;
$

Jadi jelas, my_user1tidak memiliki izin untuk membuat pengguna super. Tapi ini adalah pengguna yang saya beri tahu RDS adalah pengguna admin saya! Jika my_user1tidak memiliki izin untuk membuat pengguna super, siapa yang punya? Dan bagaimana cara saya mendapatkan nama pengguna / kata sandi dari AWS?

Saqib Ali
sumber
apakah pg_hba.conf mengatakan skema otentikasi peer untuk pengguna lokal?
drookie
Drookie, apakah file ini pada instance RDS itu sendiri? Saya bahkan belum SSHed ke mesin itu.
Saqib Ali
@ SaqibAli Anda tidak bisa SSH menjadi instance RDS.
ceejayoz

Jawaban:

23

Mesin virtual RDS dikelola oleh Amazon. Dengan demikian, untuk mencegah Anda melanggar hal-hal seperti replikasi, pengguna Anda - bahkan pengguna root yang Anda atur saat Anda membuat instance - tidak akan memiliki hak superuser penuh.

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html

Saat Anda membuat turunan DB, akun sistem pengguna master yang Anda buat ditugaskan ke peran rds_superuser. Peran rds_superuser adalah peran RDS Amazon yang telah ditentukan sebelumnya, serupa dengan peran superuser PostgreSQL (biasanya dinamai postgres dalam instance lokal), tetapi dengan beberapa batasan. Seperti peran superuser PostgreSQL, peran rds_superuser memiliki hak istimewa paling tinggi pada instance DB Anda dan Anda tidak boleh menetapkan peran ini kepada pengguna kecuali mereka membutuhkan akses paling besar ke instance DB.

ceejayoz
sumber
6
saya tidak dapat membuat cadangan basis data saya tanpa menggunakan bendera pengguna super pg_dump. Apakah ada jalan keluar dengan rds on aws?
chovy
@chovy, coba grantperan pemilik db untuk pengguna Anda.
Spike
3

Jika Anda mendaftar izin Anda saat ini dengan \du+atau \dg+, Anda akan melihat bahwa Anda bukan superuser tetapi hanya izin yang diizinkan Buat peran, Buat DB . Dengan demikian Anda tidak diizinkan untuk memberikan sendiri izin yang lebih tinggi dari yang Anda gunakan saat ini.

Biasanya Anda tidak diberi izin root atau superuser di lingkungan apa pun yang dihosting. Saya sarankan Anda memutar instance EC2 kustom dan menginstal PostgreSQL secara lokal untuk kontrol penuh.

Gorazd Zagar
sumber
2
apakah benar-benar tidak ada cara untuk membuat cadangan database amazon rds dengan pg_dump sebaliknya?
chovy