Por que não consigo criar um superusuário na instância do AWS Postgresql?

15

Eu tenho uma instância do AWS EC2 conectando-se a uma instância do RDS (Postgresql). Quando criei a instância do RDS, eu disse que o nome de usuário da raiz do banco de dados era: my_user1e a senha era password1. Agora estou tentando criar uma função e um superusuário. Mas falha:

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

Quando repito o comando sem a -sbandeira, ele 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_user1não tem permissões para criar um superusuário. Mas este é o usuário que eu disse que o RDS era meu usuário administrador! Se my_user1não tem permissões para criar um superusuário, quem tem? E como obtenho o nome de usuário / senha da AWS?

Saqib Ali
fonte
o pg_hba.conf diz que o esquema de autenticação é semelhante para usuários locais?
drookie
Drookie, esse arquivo está na própria instância do RDS? Eu ainda nem SSHed nessa máquina ainda.
precisa saber é o seguinte
@SaqibAli Você não pode fazer o SSH em uma instância do RDS.
precisa

Respostas:

22

Instâncias RDS são gerenciadas pela Amazon. Assim, para impedir que você quebre coisas como replicação, seus usuários - mesmo o usuário raiz que você configurou ao criar a instância - não terão privilégios completos de superusuário.

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

Quando você cria uma instância de banco de dados, a conta do sistema do usuário principal que você cria é atribuída à função rds_superuser. A função rds_superuser é uma função predefinida do Amazon RDS semelhante à função de superusuário do PostgreSQL (normalmente denominada postgres em instâncias locais), mas com algumas restrições. Assim como na função de superusuário do PostgreSQL, a função rds_superuser possui mais privilégios na instância do banco de dados e você não deve atribuir essa função aos usuários, a menos que eles precisem de mais acesso à instância do banco de dados.

ceejayoz
fonte
5
Não consigo fazer backup do meu banco de dados sem o sinalizador de superusuário usando pg_dump. Existe uma maneira de contornar isso com rds em aws?
chovy
@chovy, tentando granta função de proprietário do banco de dados para o seu usuário.
Spike
3

Se você listar suas permissões atuais com \du+ou \dg+, notará que você não é um superusuário, mas apenas permissões permitidas Criar função, Criar banco de dados . Como tal, você não tem permissão para atribuir a si próprio permissões mais altas daquelas com as quais você está atualmente atribuído.

Normalmente você não recebe permissões de root ou superusuário em nenhum ambiente hospedado. Eu sugiro que você crie uma instância personalizada do EC2 e instale o PostgreSQL localmente para ter controle completo.

Gorazd Zagar
fonte
2
realmente não há como fazer backup de um banco de dados amazon rds com pg_dump caso contrário?
chovy 18/11/19