几周前,当我学习 PostgreSQL 安全性时,我试图做一些奇怪的事情(尽管不推荐)从 pgadmin 的对象浏览器中删除公共模式。幸运的是,我有我运行的所有命令和我运行的所有撤消命令,但我似乎仍然有一个我无法删除的角色对象。尝试 DROP ROLE test_role_11 时出现错误,但我似乎仍然在公共模式中有对象依赖关系。你能帮我找到查询以找出它是什么吗?给定第一个查询,您还可以帮我找到正确的 REVOKE 命令(或其他命令)以撤消依赖关系和/或特权吗?PUBLIC 似乎是它自己的挑战,而不是一个实际的角色,所以我不确定如何编写查询。我尝试过使用旧问题,但没有走得太远。
异常/错误:
无法删除角色“test_role_11”,因为某些对象依赖于它 详细信息:架构公共的特权
这是我运行的查询。
CREATE ROLE test_role_11
--NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT NOLOGIN NOREPLICATION NOBYPASSRLS
REVOKE ALL ON ALL TABLES IN SCHEMA pg_catalog FROM public, me;
--GRANT ALL ON ALL TABLES IN SCHEMA pg_catalog TO public, me;
GRANT SELECT ON ALL TABLES IN SCHEMA pg_catalog TO test_role_11;
--REVOKE SELECT ON ALL TABLES IN SCHEMA pg_catalog FROM test_role_11;
GRANT test_role_11 TO me
--REVOKE object_browser FROM me;
--GRANT SELECT ON TABLE aaa IN SCHEMA pg_catalog TO test_role_11;
GRANT SELECT ON TABLE pg_catalog."aaa" TO test_role_11;
GRANT SELECT ON TABLE staging."aaa" TO test_role_11;
GRANT SELECT ON TABLE pg_database TO test_role_11;
这些没有为我的角色找到任何对象依赖项。