Почему я не могу создать суперпользователя в экземпляре AWS Postgresql?

15

У меня есть экземпляр AWS EC2, подключающийся к экземпляру RDS (Postgresql). Когда я создал экземпляр RDS, я сказал ему, что имя пользователя корня БД было: my_user1и пароль был password1. Сейчас я пытаюсь создать роль и супер-пользователя. Но это не удается:

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

Когда я повторяю команду без -sфлага, она работает:

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

Очевидно, что у my_user1него нет прав для создания суперпользователя. Но это тот пользователь, которому я сказал, что RDS был моим администратором! Если у my_user1вас нет прав на создание суперпользователя, кто это делает? И как я могу получить их имя пользователя / пароль от AWS?

Сакиб Али
источник
pg_hba.conf говорит, что схема аутентификации одноранговая для локальных пользователей?
drookie
Друки, этот файл на самом экземпляре RDS? Я еще даже не SSHed на эту машину.
Сакиб Али
@SaqibAli Вы не можете использовать SSH в экземпляре RDS.
ceejayoz

Ответы:

23

Экземпляры RDS управляются Amazon. Таким образом, чтобы предотвратить нарушение таких функций, как репликация, ваши пользователи - даже пользователь root, который вы установили при создании экземпляра - не будут иметь полных привилегий суперпользователя.

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

При создании экземпляра БД системная учетная запись главного пользователя, которую вы создаете, назначается роли rds_superuser. Роль rds_superuser - это предопределенная роль Amazon RDS, аналогичная роли суперпользователя PostgreSQL (обычно называемой postgres в локальных экземплярах), но с некоторыми ограничениями. Как и в случае с ролью суперпользователя PostgreSQL, роль rds_superuser имеет наибольшие привилегии для вашего экземпляра БД, и вам не следует назначать эту роль пользователям, если им не требуется максимальный доступ к экземпляру БД.

ceejayoz
источник
6
я не могу сделать резервную копию своей базы данных без использования флага супер пользователя pg_dump. Есть ли способ обойти это с RDS на AWS?
чови
@chovy, попробуй grantроль владельца db для своего пользователя.
Спайк
3

Если вы перечислите свои текущие права доступа с помощью \du+или \dg+, вы заметите, что вы не являетесь суперпользователем, а только разрешены разрешения Создать роль, Создать базу данных . Таким образом, вы не можете назначать себе разрешения выше тех, которые вам назначены в настоящее время.

Обычно вам не предоставляются права root или суперпользователя в любой размещенной среде. Я предлагаю вам раскрутить пользовательский экземпляр EC2 и установить PostgreSQL локально для полного контроля.

Горазд Загар
источник
2
действительно ли нет способа сделать резервную копию базы данных Amazon RDS с помощью pg_dump в противном случае?
Чови