Pourquoi ne puis-je pas créer un superutilisateur dans une instance AWS Postgresql?

15

J'ai une instance AWS EC2 connectée à une instance RDS (Postgresql). Quand j'ai créé l'instance RDS, je lui ai dit que le nom d'utilisateur de la racine DB était: my_user1et le mot de passe password1. Maintenant, j'essaie de créer un rôle et un super-utilisateur. Mais cela échoue:

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

Lorsque je répète la commande sans le -sdrapeau, cela fonctionne:

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

Donc, clairement, my_user1n'a pas les autorisations pour créer un super-utilisateur. Mais c'est l'utilisateur à qui j'ai dit que RDS était mon utilisateur administrateur! Si my_user1n'a pas les autorisations pour créer un super-utilisateur, qui en a? Et comment puis-je obtenir leur nom d'utilisateur / mot de passe auprès d'AWS?

Saqib Ali
la source
le pg_hba.conf indique-t-il que le schéma d'authentification est homologue pour les utilisateurs locaux?
drookie
Drookie, ce fichier est-il sur l'instance RDS elle-même? Je n'ai même pas encore SSHed sur cette machine.
Saqib Ali
@SaqibAli Vous ne pouvez pas SSH dans une instance RDS.
ceejayoz

Réponses:

23

Les instances RDS sont gérées par Amazon. En tant que tel, pour vous empêcher de casser des choses comme la réplication, vos utilisateurs - même l'utilisateur root que vous avez configuré lors de la création de l'instance - ne disposeront pas des privilèges de superutilisateur complets.

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

Lorsque vous créez une instance de base de données, le compte de système utilisateur maître que vous créez est affecté au rôle rds_superuser. Le rôle rds_superuser est un rôle Amazon RDS prédéfini similaire au rôle de superutilisateur PostgreSQL (généralement nommé postgres dans les instances locales), mais avec certaines restrictions. Comme avec le rôle de superutilisateur PostgreSQL, le rôle rds_superuser a le plus de privilèges sur votre instance de base de données et vous ne devez pas attribuer ce rôle aux utilisateurs à moins qu'ils aient le plus besoin d'accéder à l'instance de base de données.

ceejayoz
la source
6
je ne peux pas sauvegarder ma base de données sans l'indicateur de super utilisateur à l'aide pg_dump. Y a-t-il un moyen de contourner cela avec rds sur aws?
chovy
@chovy, essayez de donner grantle rôle de propriétaire db à votre utilisateur.
Spike
3

Si vous répertoriez vos autorisations actuelles avec \du+ou \dg+, vous remarquerez que vous n'êtes pas un superutilisateur mais uniquement des autorisations autorisées Créer un rôle, Créer une base de données . En tant que tel, vous n'êtes pas autorisé à vous attribuer des autorisations supérieures à celles qui vous sont actuellement attribuées.

Normalement, vous ne disposez d'aucune autorisation root ou superutilisateur dans un environnement hébergé. Je vous suggère de faire tourner une instance EC2 personnalisée et d'installer PostgreSQL localement pour un contrôle complet.

Gorazd Zagar
la source
2
n'y a-t-il vraiment aucun moyen de sauvegarder une base de données amazon rds avec pg_dump sinon?
chovy