У меня есть экземпляр 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 локально для полного контроля.