为什么我的所有权变更被拒绝?

Kit*_*nde 6 postgresql postgresql-9.4 amazon-rds

我现在的用户是 pronto

mediapop_staging=> select current_user;
 current_user
--------------
 pronto
(1 row)
Run Code Online (Sandbox Code Playgroud)

此用户是在 AWS RDS 上创建的标准超级用户。

mediapop_staging=> \du pronto
                        List of roles
 Role name |          Attributes           |    Member of
-----------+-------------------------------+-----------------
 pronto    | Create role, Create DB       +| {rds_superuser}
           | Password valid until infinity |
Run Code Online (Sandbox Code Playgroud)

但我得到这个:

mediapop_staging=> REASSIGN OWNED BY pronto TO mediapop_staging;
ERROR:  permission denied to reassign objects
Run Code Online (Sandbox Code Playgroud)

为什么?我该如何解决?

Oto*_*dze 9

感谢@Spike的评论,提供了对我有用的解决方案(来源

这假设对象从一个角色重新分配admin到另一个角色new_admin

1.创建新角色:

mydb=> CREATE ROLE change_owner LOGIN;
CREATE ROLE
Run Code Online (Sandbox Code Playgroud)

2.使旧所有者角色和新所有者角色都成为新创建的角色的成员:

mydb=> GRANT admin TO change_owner;
GRANT ROLE
mydb=> GRANT new_admin TO change_owner;
GRANT ROLE
Run Code Online (Sandbox Code Playgroud)

3.从psql注销并使用新角色登录:

$ psql -U change_owner mydb
mydb=>
Run Code Online (Sandbox Code Playgroud)

4.执行重新分配:

mydb=> REASSIGN OWNED BY admin TO new_admin
REASSIGN OWNED
Run Code Online (Sandbox Code Playgroud)


小智 1

在没有超级用户的情况下使用时,存在一些不直观的权限要求REASSIGN请参阅SO 上的另一篇文章,我回答了同样的问题。

  • @Cerin 对此最可能的解释是,您在云提供商(例如 AWS RDS)上使用 Postgres。他们不会向他们创建的用户授予实际的“超级用户”权限,而是授予一个精简的“rds_superuser”角色,该角色可以执行大多数但不是所有实际 Postgres“超级用户”的操作。 (3认同)