J'ai une instance AWS EC2 qui se connecte à 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_user1
et le mot de passe était 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 -s
flag, ça marche:
$ 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;
$
Si clairement, my_user1
n'a pas l'autorisation de créer un super-utilisateur. Mais c'est l'utilisateur à qui j'ai dit que RDS était mon utilisateur administrateur! Si my_user1
n'a pas l'autorisation de créer un super-utilisateur, qui en a? Et comment puis-je obtenir leur nom d'utilisateur/mot de passe auprès d'AWS?
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. As 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.
Si vous répertoriez vos autorisations actuelles avec \du+
ou \dg+
, vous remarquerez que vous n'êtes pas un super-utilisateur mais seulement 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.