无法撤销 PgSQL AWS RDS 中的权限或删除用户

Mil*_*iez 6 postgresql role users postgresql-9.6 amazon-rds

asd我想从数据库中删除用户。所以,我有两个数据库:foo并且bar用户显然在两个数据库中都有依赖关系。数据库是从 root 用户创建的postgres,但里面的所有foo_migration表和序列都是由用户和分别创建的bar_migration

首先,我以用户身份登录postgres数据库foo。当我尝试删除用户时,我得到:

ERROR: role "asd" cannot be dropped because some objects depend on it包含有关多个序列、表、bar数据库和数据库中一些对象的权限的详细信息postgres

因此,我尝试一一清除事情(同时仍然以数据库postgres中的用户身份登录foo)。我首先尝试REASSIGN OWNED BY asd TO foo_migration;。这会返回ERROR: permission denied,这很奇怪,因为我以用户身份登录postgres。无论如何,然后我尝试

REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM asd;
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM asd;
Run Code Online (Sandbox Code Playgroud)

我得到了一堆WARNING: no privileges could be revoked用户有权访问的所有序列和表。我也尝试过DROP OWNED BY asd;,它也以ERROR: permission denied.

postgres这一切都不成功,所以我尝试以用户身份登录数据库postgres并执行相同的步骤。命令REVOKE成功执行,没有警告,但实际上没有任何权限被更改/影响。和仍然REASSIGN导致.DROP OWNED BYERROR: permission denied

错误消息是裸露的。它们没有提供任何提示或细节。

我没有该asd用户的密码,因此无法尝试使用该用户登录并执行任何操作。

您对如何解决这个问题有什么想法吗?我是否需要查看一些显示所有权的表格并从那里开始?该用户不就是postgres“万能”的管理员用户吗?

小智 2

我在 Postgres RDS 上遇到了类似的问题。是我用来将对象从一个用户重新分配给另一个用户然后删除用户的解决方法。对于你来说,它会像:

-- logged in as the rds_superuser role you defined when you created your RDS instance
CREATE ROLE change_owner LOGIN;
GRANT asd TO change_owner;
GRANT foo_migration TO change_owner;

-- log out of current user and log in as `change_owner`
REASSIGN OWNED BY asd TO foo_migration;

-- log out of current user and log in as rds_superuser role
DROP USER asd;
Run Code Online (Sandbox Code Playgroud)