在 PostgresQL 中删除角色

Posted

技术标签:

【中文标题】在 PostgresQL 中删除角色【英文标题】:Dropping role in PostgresSQL 【发布时间】:2021-04-18 21:49:12 【问题描述】:

我在放弃一个角色时遇到了同样的问题。对谷歌做了很多研究,但没有任何帮助。

SQL 错误 [2BP01]:错误:无法删除角色“只读”,因为某些对象依赖于它详细信息:对属于公共架构中角色 rohit 的新关系的默认权限的权限

这是我为删除只读角色所做的。

REVOKE USAGE ON SCHEMA public FROM readonly;
REVOKE ALL ON SCHEMA public FROM readonly;


REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM readonly;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM readonly;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM readonly;

  
REVOKE CONNECT ON DATABASE kozuchi_db FROM readonly;
REVOKE CONNECT ON DATABASE parc_prod FROM readonly;
REVOKE CONNECT ON DATABASE postgres FROM readonly;


DROP USER readonly;

【问题讨论】:

【参考方案1】:

根据您的错误消息,该角色设置了一些默认权限。删除它们

ALTER DEFAULT PRIVILEGES FOR ROLE rohit IN SCHEMA public
   REVOKE ALL ON TABLES FROM readonly;

【讨论】:

有没有快速查看所有对象依赖于角色的方法?我仍然看到错误:错误 [2BP01]:错误:无法删除角色“只读”,因为某些对象依赖于它详细信息:数据库中的 1 个对象 is_db 我运行了命令 ALTER DEFAULT PRIVILEGES FOR ROLE rohit IN SCHEMA public REVOKE ALL ON TABLES FROM readonly ;后跟其他命令。但还是报错。 不,没有快捷的方法。您必须从错误消息中获取线索,一一消除障碍。【参考方案2】:

试试这个

DROP OWNED BY readonly;
DROP ROLE readonly;

【讨论】:

我得到错误。 SQL 错误 [42501]:错误:拒绝删除对象的权限。我需要成为超级用户才能执行此操作吗? 另外,我不想删除 readonly 拥有的所有对象?我想放弃现成的角色。【参考方案3】:

应该在您的 Postgres 集群中使用 readonly 用户创建了一些对象。

签入数据库对象并更改这些对象的所有者,然后尝试删除用户。

【讨论】:

谢谢!这是显而易见的。但是如何检查哪些对象对 readyonly 角色有依赖关系? 检查pg_class / pg_tables 找出所有者为readonly 用户的对象。然后,更改这些对象的所有者。

以上是关于在 PostgresQL 中删除角色的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 不会递归地撤销角色

Postgresql 角色无法访问其创建的架构

Postgres:删除属于特定角色的所有表(或强制删除角色,忽略依赖对象)

无法创建用户 postgres:角色“postgres”不存在

如何解决这个问题以使用 psql? | psql:错误:致命:角色“postgres”不存在

在 PostgresQL 中删除角色