无法删除 PostgreSQL 角色。错误:`cannot be dropped because some objects depend on it`
·
问题:无法删除 PostgreSQL 角色。错误:cannot be dropped because some objects depend on it
我试图删除 PostgreSQL 用户:
DROP USER ryan;
我收到了这个错误:
查询错误:
错误:无法删除角色“ryan”,因为某些对象依赖于它
详细信息:数据库 mydatabase 的权限
我从这些线程中寻找解决方案:
-
PostgreSQL - 如何快速删除具有现有权限的用户
-
如果用户有依赖对象,如何在 postgres 中删除用户
仍然有同样的错误。
这发生在我向用户“ryan”授予所有权限后:
GRANT ALL PRIVILEGES ON DATABASE mydatabase ON SCHEMA public TO ryan;
解答
DROP USER(或DROP ROLE,同样的事情)无法继续,而角色仍然拥有任何东西或对其他对象具有任何授予的权限。
使用 DROP OWNED (从措辞上看不太明显) 摆脱所有特权。说明书:
[...] 授予给定角色对当前数据库中的对象和共享对象(数据库、表空间)的任何特权也将被撤销。
所以删除角色的可靠命令序列是:
REASSIGN OWNED BY ryan TO postgres; -- or some other trusted role
DROP OWNED BY ryan;
在同一个集群的每个数据库中运行这两个命令,其中角色拥有任何东西或具有任何特权!
最后:
DROP USER ryan;
-
REASSIGN OWNED更改角色当前拥有的所有对象的所有权。 -
DROP OWNED然后只撤销特权(所有权不受影响)。
或者,您可以跳过REASSIGN OWNED。然后DROP OWNED将(也)删除用户拥有的所有对象。 (你确定吗?!)
有关的:
-
删除具有特权的角色(具有为所有相关数据库生成命令的功能)
-
查找链接到 PostgreSQL 角色的对象
更多推荐
所有评论(0)