Dlaczego nie mogę utworzyć superużytkownika w instancji AWS Postgresql?

16

Mam instancję AWS EC2 łączącą się z instancją RDS (Postgresql). Kiedy utworzyłem instancję RDS, powiedziałem, że nazwa użytkownika root DB to: my_user1a hasło to password1. Teraz próbuję stworzyć rolę i superużytkownika. Ale to się nie udaje:

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

Kiedy powtarzam polecenie bez -sflagi, działa:

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

Tak wyraźnie, my_user1nie ma uprawnień do tworzenia superużytkownika. Ale to jest użytkownik, o którym powiedziałem, że RDS jest moim administratorem! Jeśli my_user1nie ma uprawnień do tworzenia superużytkownika, to kto? Jak mogę uzyskać nazwę użytkownika / hasło z AWS?

Saqib Ali
źródło
czy pg_hba.conf twierdzi, że schemat uwierzytelniania jest równorzędny dla lokalnych użytkowników?
drookie
Drookie, czy ten plik jest w samej instancji RDS? Nie mam jeszcze SSHed na tej maszynie.
Saqib Ali,
@ SaqibAli Nie możesz SSH do instancji RDS.
ceejayoz

Odpowiedzi:

23

Instancjami RDS zarządza Amazon. W związku z tym, aby zapobiec uszkodzeniu replikacji, użytkownicy - nawet użytkownik root skonfigurowany podczas tworzenia instancji - nie będą mieli pełnych uprawnień administratora.

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

Podczas tworzenia instancji DB utworzone konto użytkownika głównego jest przypisywane do roli rds_superuser. Rola rds_superuser to wstępnie zdefiniowana rola Amazon RDS podobna do roli superużytkownika PostgreSQL (zwyczajowo nazywana postgres w lokalnych instancjach), ale z pewnymi ograniczeniami. Podobnie jak w przypadku roli administratora PostgreSQL, rola rds_superuser ma najwięcej uprawnień w instancji DB i nie należy przypisywać tej roli użytkownikom, chyba że potrzebują oni największego dostępu do instancji DB.

ceejayoz
źródło
6
nie mogę wykonać kopii zapasowej mojej bazy danych bez użycia flagi superużytkownika pg_dump. Czy jest jakiś sposób na obejście tego z rds na aws?
chovy
@chovy, spróbuj grantprzekazać rolę użytkownika db db.
Spike
3

Jeśli podasz swoje obecne uprawnienia z \du+lub \dg+, zauważysz, że nie jesteś superużytkownikiem, ale tylko dozwolone uprawnienia Utwórz rolę, Utwórz bazę danych . W związku z tym nie możesz przypisywać sobie uprawnień wyższych niż te, którym jesteś obecnie przypisany.

Zwykle nie masz uprawnień administratora ani administratora w żadnym hostowanym środowisku. Sugeruję utworzenie niestandardowej instancji EC2 i zainstalowanie PostgreSQL lokalnie, aby uzyskać pełną kontrolę.

Gorazd Zagar
źródło
2
czy naprawdę nie ma sposobu na wykonanie kopii zapasowej bazy danych amazon rds za pomocą pg_dump?
chovy