Warum kann ich in der AWS Postgresql-Instanz keinen Superuser erstellen?

15

Ich habe eine AWS EC2-Instanz, die eine Verbindung zu einer RDS-Instanz (Postgresql) herstellt. Als ich die RDS-Instanz erstellte, teilte ich ihr mit, dass der Benutzername des Datenbankstamms: my_user1und das Kennwort : lauten password1. Jetzt versuche ich, eine Rolle und einen Superuser zu erstellen. Aber es schlägt fehl:

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

Wenn ich den Befehl ohne -sFlag wiederhole , funktioniert es:

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

Also klar, my_user1hat keine Berechtigungen, um einen Super-User zu erstellen. Aber dies ist der Benutzer, dem ich gesagt habe, dass RDS mein Administrator ist! Wer my_user1hat keine Berechtigung zum Erstellen eines Super-Users? Und wie erhalte ich ihren Benutzernamen / ihr Passwort von AWS?

Saqib Ali
quelle
besagt die pg_hba.conf, dass das Authentifizierungsschema Peer für lokale Benutzer ist?
Drookie
Drookie, befindet sich diese Datei auf der RDS-Instanz selbst? Ich habe noch nicht einmal SSH auf diesem Computer installiert.
Saqib Ali
@SaqibAli Sie können kein SSH in eine RDS-Instanz ausführen.
Ceejayoz

Antworten:

22

RDS-Instanzen werden von Amazon verwaltet. Um zu verhindern, dass Sie Dinge wie die Replikation beschädigen, haben Ihre Benutzer - selbst der Root-Benutzer, den Sie beim Erstellen der Instanz eingerichtet haben - keine vollständigen Superuser-Berechtigungen.

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

Wenn Sie eine DB-Instanz erstellen, wird das von Ihnen erstellte Hauptbenutzersystemkonto der Rolle rds_superuser zugewiesen. Die Rolle "rds_superuser" ist eine vordefinierte Amazon RDS-Rolle, die der Rolle "PostgreSQL-Superuser" (üblicherweise "postgres" in lokalen Instanzen) ähnlich ist, jedoch einige Einschränkungen aufweist. Wie bei der PostgreSQL-Superuser-Rolle hat die Rolle "rds_superuser" die meisten Berechtigungen für Ihre DB-Instanz, und Sie sollten diese Rolle Benutzern nur zuweisen, wenn sie den größten Zugriff auf die DB-Instanz benötigen.

ceejayoz
quelle
5
Ich kann meine Datenbank nicht sichern, ohne das Superuser-Flag zu verwenden pg_dump. Gibt es einen Weg, dies mit RDS auf AWS zu umgehen?
Chovy
@chovy, versuchen grantSie Ihrem Benutzer die DB- Eigentümerrolle zuzuweisen .
Spike
3

Wenn Sie Ihre aktuellen Berechtigungen mit \du+oder \dg+auflisten, werden Sie feststellen, dass Sie kein Superuser sind, sondern nur Berechtigungen. Rolle erstellen, DB erstellen . Aus diesem Grund dürfen Sie sich keine höheren Berechtigungen zuweisen als die, denen Sie derzeit zugewiesen sind.

Normalerweise erhalten Sie in keiner gehosteten Umgebung Root- oder Superuser-Berechtigungen. Ich schlage vor, Sie starten eine benutzerdefinierte EC2-Instanz und installieren PostgreSQL lokal, um die vollständige Kontrolle zu haben.

Gorazd Zagar
quelle
2
gibt es sonst wirklich keine möglichkeit eine amazon rds datenbank mit pg_dump zu sichern?
Chovy