为什么不能在AWS Postgresql实例中创建超级用户?


15

我有一个连接到RDS实例(Postgresql)的AWS EC2实例。创建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 2015年

Drookie,这个文件在RDS实例本身上吗?我什至还没有SSH到那台机器上。
萨奇布·阿里2015年

@SaqibAli您无法通过SSH进入RDS实例。
ceejayoz

Answers:


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角色在您的数据库实例上拥有最多的特权,除非您需要对数据库实例的最大访问权限,否则您不应将此角色分配给用户。


6
没有使用的超级用户标志,我无法备份数据库pg_dump。有没有办法解决将rds放在aws上的问题?
chovy

@chovy,尝试grant为您的用户设置数据库所有者角色。

3

如果使用\du+或列出当前的权限\dg+,您会注意到您不是超级用户,而仅是允许的权限创建角色Create DB。因此,不允许您向自己分配比当前分配给您更高的权限。

通常,在任何托管环境中都不会为您提供root或超级用户权限。我建议您启动一个自定义EC2实例并在本地安装PostgreSQL以进行完全控制。


2
否则真的没有办法用pg_dump备份Amazon RDS数据库吗?
chovy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.