Назад | Перейти на главную страницу

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

У меня есть экземпляр AWS EC2, подключающийся к экземпляру RDS (Postgresql). Когда я создал экземпляр RDS, я сказал ему, что имя пользователя root DB: 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?

Инстансы 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 имеет наибольшее количество привилегий в вашем экземпляре БД, и вы не должны назначать эту роль пользователям, если им не нужен наибольший доступ к экземпляру БД.

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

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