我刚刚在 aws 上创建了一个新的 postgres RDS 实例(通过仪表板),我给了它一个默认用户,我们称他为“jack”。
当我登录实例时,我看到了我创建的用户“jack”,并且他附加了一个角色“rds_superuser”。 (所以我认为我可以做我以前在常规 postgres 服务器上使用 super 用户所做的相同的事情)。
我检查了 documentation , 我看到那是不可能的。
作为默认用户“stan”登录,我创建了一个新的数据库用户“stan”,并想创建一个新的数据库,所有者是用户“stan”,我不能吗?
我输入了这样的内容:
CREATE DATABASE foobar WITH OWNER = stan;
但是我得到了一个错误,说的是这样的:
错误:必须是角色“stan”的成员
所以,我所做的是,创建角色“stan”,以默认用户“jack”的身份注销,以“stan”的身份登录到 RDS 实例,并以他作为所有者创建该数据库。
因为我有三个不同的用户,所以我不得不将最后一步重复三次。
我的问题是,有没有一种方法可以让我在创建 RDS postgres 期间创建默认用户“jack”,能够创建新数据库(如常规 postgres 服务器安装上的 super 用户)并为不同的所有者提供这个:
CREATE DATABASE foobar WITH OWNER = stan;
谢谢, 汤姆
最佳答案
您应该将 stan
授予 rds_superuser
才能执行此操作。你做了:
rds=> create user stan;
CREATE ROLE
rds=> CREATE DATABASE foobar WITH OWNER = stan;
ERROR: must be member of role "stan"
你应该:
rds=> grant stan to su_rdsadm;
GRANT ROLE
rds=> CREATE DATABASE foobar WITH OWNER = stan;
CREATE DATABASE
我以 rds super 用户的身份做到了:
rds=> \du+ su_rdsadm
List of roles
Role name | Attributes | Member of | Description
-------------+-------------------------------+----------------------+-------------
su_rdsadm | Create role, Create DB +| {rds_superuser,stan} |
| Password valid until infinity | |
rds=> select current_user;
current_user
--------------
su_rdsadm
(1 row)
很高兴进一步了解这一点。 rds_superuser 对所有权/授权等的这种限制将一直打击你,直到你将你想要操作(或代表你想要授予)其对象的角色授予 rds super 用户。
关于postgresql - postgres RDS 服务器中的 rds_superuser 角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49781775/