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

Saq*_*Ali 24 postgresql amazon-web-services amazon-rds

我有一个连接到 RDS 实例 (Postgresql) 的 AWS EC2 实例。当我创建 RDS 实例时,我告诉它数据库 root 的用户名是: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
$
Run Code Online (Sandbox Code Playgroud)

当我在没有-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;
$
Run Code Online (Sandbox Code Playgroud)

很明显,my_user1没有权限创建超级用户。但这是我告诉 RDS 的用户是我的管理员用户!如果my_user1没有创建超级用户的权限,谁有权限?我如何从 AWS 获取他们的用户名/密码?

cee*_*yoz 25

RDS 实例由亚马逊管理。因此,为了防止您破坏复制等操作,您的用户 - 即使是您在创建实例时设置的 root 用户 - 将不具有完全的超级用户权限。

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

创建数据库实例时,您创建的主用户系统帐户会分配给 rds_superuser 角色。rds_superuser 角色是一个预定义的 Amazon RDS 角色,类似于 PostgreSQL 超级用户角色(在本地实例中通常命名为 postgres),但有一些限制。与 PostgreSQL 超级用户角色一样,rds_superuser 角色对您的数据库实例拥有最多权限,除非他们需要对数据库实例的最大访问权限,否则您不应将此角色分配给用户。

  • 如果没有超级用户标志,我无法使用 `pg_dump` 备份我的数据库。aws 上的 rds 有没有办法解决这个问题? (7认同)