如何在 Postgres 中撤销用户的所有权限,然后删除该用户?
文档说它应该如此简单:
REVOKE ALL PRIVILEGES ON DATABASE database FROM user;
DROP USER user;
但是,如果我打开 psql 提示符,我会得到奇怪的输出:
mydb=> REVOKE ALL PRIVILEGES ON DATABASE mydb FROM myuser;
REVOKE
mydb=> DROP USER myuser;
ERROR: role "myuser" cannot be dropped because some objects depend on it
DETAIL: privileges for schema myschema
呃,什么?好的,所以我只需要显式撤销“myschema”的权限?但后来我得到:
mydb=> REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschema FROM myuser;
REVOKE
mydb=> DROP USER myuser;
ERROR: role "myuser" cannot be dropped because some objects depend on it
DETAIL: privileges for schema myschema
它表示它已成功撤销所有数据库和架构访问权限,但架构访问权限仍然存在,阻止我删除用户。
更奇怪的是,如果我尝试通过以下方式确认用户具有该架构访问权限:
SELECT *
FROM pg_namespace
WHERE has_schema_privilege('myuser', 'myschema', 'USAGE');
除了“pg_catalog”、“information_schema”和“public”之外,它不返回任何内容。
我在这里做错了什么?
该错误消息不是谈论架构中表的权限,而是谈论架构本身的权限。