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

9

Eu tenho uma instância do AWS EC2 conectando a uma instância do RDS (Postgresql). Quando criei a instância do RDS, informei que o nome de usuário da raiz do banco de dados era: my_user1 e a senha era password1 . Agora estou tentando criar uma função e um superusuário. Mas isso 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 o sinalizador -s , 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;
$

Então, claramente, my_user1 não tem permissão para criar um superusuário. Mas este é o usuário que eu disse ao RDS que era meu usuário administrador! Se my_user1 não tiver permissões para criar um superusuário, quem terá? E como faço para obter o nome de usuário / senha da AWS?

    
por Saqib Ali 22.01.2015 / 20:52

2 respostas

15

As instâncias do RDS são gerenciadas pela Amazon. Assim, para impedir que você divida 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.

link

When you create a DB instance, the master user system account that you create is assigned to the rds_superuser role. The rds_superuser role is a pre-defined Amazon RDS role similar to the PostgreSQL superuser role (customarily named postgres in local instances), but with some restrictions. As with the PostgreSQL superuser role, the rds_superuser role has the most privileges on your DB instance and you should not assign this role to users unless they need the most access to the DB instance.

    
por 22.01.2015 / 22:38
3

Se você listar suas permissões atuais com

\dg+

você notará que 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 permissões superiores àquelas 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 um controle completo.

    
por 18.01.2017 / 14:49