在 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 中删除角色的主要内容,如果未能解决你的问题,请参考以下文章
Postgres:删除属于特定角色的所有表(或强制删除角色,忽略依赖对象)
无法创建用户 postgres:角色“postgres”不存在