Como você revoga todos os privilégios de um usuário no Postgres e depois descarta o usuário?
Os documentos dizem que deveria ser tão simples quanto:
REVOKE ALL PRIVILEGES ON DATABASE database FROM user;
DROP USER user;
No entanto, se eu abrir meu prompt do psql, recebo uma saída bizarra:
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
Uh o quê? Ok, então só preciso revogar explicitamente as permissões em "myschema"? Mas então eu recebo:
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
Está dizendo que está revogando com sucesso todo o acesso ao banco de dados e ao esquema, mas ainda assim o acesso ao esquema permanece, impedindo-me de descartar o usuário.
Ainda mais bizarro, se eu tentar confirmar se o usuário tem acesso ao esquema com:
SELECT *
FROM pg_namespace
WHERE has_schema_privilege('myuser', 'myschema', 'USAGE');
não retorna nada, exceto "pg_catalog", "information_schema" e "public".
O que estou fazendo de errado aqui?
A mensagem de erro não fala sobre privilégios em tabelas no esquema, mas sobre privilégios no próprio esquema.