我有一个连接到RDS实例(Postgresql)的AWS EC2实例。 当我创buildRDS实例时,我告诉它,数据库根目录的用户名是: my_user1 ,密码是password1 。 现在我试图创build一个angular色和一个超级用户。 但是它失败了:
$ 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没有创build超级用户的权限。 但是这是我告诉RDS的用户是我的pipe理员用户! 如果my_user1没有创build超级用户的权限,那么谁呢? 我如何从AWS获取他们的用户名/密码?
RDS实例由Amazonpipe理。 因此,为了防止破坏复制等function,用户(即使是在创build实例时设置的root用户)也不会拥有完全的超级用户权限。
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html
创build数据库实例时,您创build的主用户系统帐户被分配给rds_superuserangular色。 rds_superuserangular色是预定义的Amazon RDSangular色,类似于PostgreSQL超级用户angular色(通常在本地实例中命名为postgres),但有一些限制。 和PostgreSQL超级用户angular色一样,rds_superuserangular色在您的数据库实例上拥有最多权限,您不应将此angular色分配给用户,除非他们需要对数据库实例的访问权限最高。
如果您列出您当前的权限
\dg+
你会注意到你不是超级用户,但只允许创buildangular色,创build数据库 。 因此,您不能从您当前分配的权限中分配更高的权限。
通常,在任何托pipe环境中,您都没有获得超级用户权限或超级用户权限。 我build议你启动一个自定义的EC2实例并在本地安装PostgreSQL来完成控制。