E se
DROP USER <username>
Este é realmente um apelido para DROP ROLE
.
É necessário eliminar explicitamente quaisquer privilégios associados a esse usuário, também para mover sua propriedade para outras funções (ou soltar o objeto).
Isso é melhor alcançado por
REASSIGN OWNED BY <olduser> TO <newuser>
e
DROP OWNED BY <olduser>
Este último removerá todos os privilégios concedidos ao usuário.
Veja os documentos do postgres para o DROP ROLE e a descrição mais detalhada disso.
Adição:
Aparentemente, tentar descartar um usuário usando os comandos mencionados aqui só funcionará se você os estiver executando enquanto estiver conectado ao mesmo banco de dados do qual os GRANTS originais foram criados, conforme discutido aqui:
https://www.postgresql.org/message-id/83894A1821034948BA27FE4DAA47427928F7C29922%40apde03.APD.Satcom.Local
CREATE TABLE foo(bar SERIAL); ALTER TABLE foo OWNER TO postgres; CREATE USER testuser; GRANT ALL ON foo TO testuser; DROP USER testuser
deu as mensagens de erro:ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo
. No entanto,DROP OWNED BY testuser
como o truque, aparentemente o Postgres considera que as doações são objetos descartáveis.A resposta aceita resultou em erros para mim ao tentar REASSIGN OWNED BY ou DROP OWNED BY. O seguinte funcionou para mim:
O usuário pode ter privilégios em outros esquemas; nesse caso, você precisará executar a linha REVOKE apropriada com "public" substituído pelo esquema correto. Para mostrar todos os esquemas e tipos de privilégios para um usuário, editei o comando \ dp para fazer esta consulta:
Não tenho certeza de quais tipos de privilégios correspondem à revogação em TABLES, SEQUENCES ou FUNCTIONS, mas acho que todos eles se enquadram em um dos três.
fonte
REVOKE ALL PRIVILEGES ON DATABASE db_name FROM username;
revoke USAGE on SCHEMA some_schema from username;
Observe também, se você concedeu explicitamente:
CONNECT ON DATABASE xxx TO GROUP
,você precisará revogá-lo separadamente do DROP OWNED BY, usando:
REVOKE CONNECT ON DATABASE xxx FROM GROUP
fonte
Eu tive que adicionar mais uma linha para REVOKE ...
Depois de correr:
Eu ainda estava recebendo o erro: o nome de usuário não pode ser descartado porque alguns objetos dependem dele. DETAIL: privilégios para o esquema public
Eu estava sentindo falta disso:
Então eu fui capaz de largar o papel.
fonte
Aqui está o que finalmente funcionou para mim:
fonte
Não existe
REVOKE ALL PRIVILEGES ON ALL VIEWS
, então terminei com:e habitual:
para o seguinte ter sucesso:
fonte
Na linha de comando, existe um comando
dropuser
disponível para eliminar o usuário do postgres.fonte
Enfrentei o mesmo problema e agora encontrei uma maneira de resolvê-lo. Primeiro, você deve excluir o banco de dados do usuário que deseja eliminar. Em seguida, o usuário pode ser facilmente excluído.
Criei um usuário chamado "msf" e lutei um pouco para excluir o usuário e recriá-lo. Segui as etapas abaixo e obtive sucesso.
1) Solte o banco de dados
2) largue o usuário
Agora, o usuário caiu com sucesso.
fonte