¿Por qué no puedo crear un superusuario en la instancia de AWS Postgresql?

15

Tengo una instancia de AWS EC2 que se conecta a una instancia de RDS (Postgresql). Cuando creé la instancia de RDS, le dije que el nombre de usuario de la raíz de la base de datos era: my_user1y que la contraseña era password1. Ahora estoy intentando crear un rol y un superusuario. Pero falla:

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

Cuando repito el comando sin la -sbandera, funciona:

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

Claramente, my_user1no tiene permisos para crear un superusuario. ¡Pero este es el usuario que le dije a RDS que era mi usuario administrador! Si my_user1no tiene permisos para crear un superusuario, ¿quién sí? ¿Y cómo obtengo su nombre de usuario / contraseña de AWS?

Saqib Ali
fuente
Qué dice pg_hba.conf que el esquema de autenticación es similar para usuarios locales?
drookie
Drookie, ¿está este archivo en la propia instancia de RDS? Ni siquiera he SSHed en esa máquina todavía.
Saqib Ali
@SaqibAli No puede SSH en una instancia de RDS.
ceejayoz

Respuestas:

23

Las instancias de RDS son administradas por Amazon. Como tal, para evitar que rompa cosas como la replicación, sus usuarios, incluso el usuario raíz que configuró al crear la instancia, no tendrán privilegios completos de superusuario.

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

Cuando crea una instancia de base de datos, la cuenta del sistema de usuario maestro que crea se asigna a la función rds_superuser. El rol rds_superuser es un rol predefinido de Amazon RDS similar al rol de superusuario PostgreSQL (normalmente denominado postgres en instancias locales), pero con algunas restricciones. Al igual que con el rol de superusuario de PostgreSQL, el rol rds_superuser tiene la mayoría de los privilegios en su instancia de base de datos y no debe asignar este rol a los usuarios a menos que necesiten el mayor acceso a la instancia de base de datos.

ceejayoz
fuente
66
No puedo hacer una copia de seguridad de mi base de datos sin usar el indicador de superusuario pg_dump. ¿Hay alguna forma de evitar esto con rds en aws?
chovy
@chovy, prueba grantel rol de propietario de db a tu usuario.
Spike
3

Si enumera sus permisos actuales con \du+o \dg+, notará que no es un superusuario sino que solo tiene permisos permitidos Crear rol, Crear DB . Como tal, no puede asignarse permisos superiores a los que tiene asignados actualmente.

Normalmente no se le otorgan permisos de root o superusuario en ningún entorno alojado. Le sugiero que active una instancia EC2 personalizada e instale PostgreSQL localmente para un control completo.

Gorazd Zagar
fuente
2
¿realmente no hay forma de hacer una copia de seguridad de una base de datos rds de amazon con pg_dump?
chovy