192 votes

Comment supprimer rapidement un utilisateur avec des privilèges existants ?

J'essaie de créer des utilisateurs de base de données restreints pour l'application sur laquelle je travaille, et je veux supprimer l'utilisateur de la base de données Postgres que j'utilise à titre expérimental. Existe-t-il un moyen de supprimer l'utilisateur sans devoir d'abord révoquer tous ses droits manuellement, ou révoquer toutes les subventions accordées à un utilisateur ?

11voto

CD4 Points 121

J'ai dû ajouter une ligne de plus à REVOKE...

Après avoir couru :

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM username;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM username;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM username;

Je recevais toujours l'erreur : le nom d'utilisateur ne peut pas être supprimé car certains objets en dépendent DÉTAIL : privilèges pour le schéma public

J'ai manqué ça :

REVOKE USAGE ON SCHEMA public FROM username;

Ensuite, j'ai pu abandonner le rôle.

DROP USER username;

0 votes

Vous pouvez également avoir besoin de révoquer les privilèges pour 'SCHEMA pg_catalog' si vous avez, par exemple, créé un utilisateur pour pg_rewind qui a des privilèges sur des fonctions comme pg_read_binary_file.

9voto

yucer Points 171

Cela devrait fonctionner :

REVOKE ALL ON SCHEMA public FROM myuser;
REVOKE ALL ON DATABASE mydb FROM myuser;
DROP USER myuser;

5voto

gavenkoa Points 6974

Il n'y a pas REVOKE ALL PRIVILEGES ON ALL VIEWS alors j'ai terminé avec :

do $$
DECLARE r record;
begin
  for r in select * from pg_views where schemaname = 'myschem'
  loop
    execute 'revoke all on ' || quote_ident(r.schemaname) ||'.'|| quote_ident(r.viewname) || ' from "XUSER"';
  end loop;
end $$;

et habituel :

REVOKE ALL PRIVILEGES ON DATABASE mydb FROM "XUSER";
REVOKE ALL PRIVILEGES ON SCHEMA myschem FROM "XUSER";
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschem FROM "XUSER";
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA myschem FROM "XUSER";
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA myschem FROM "XUSER";

pour que ce qui suit réussisse :

drop role "XUSER";

3voto

Saurav Kumar Points 150

J'ai eu exactement le même problème et voici comment je l'ai résolu :

J'ai obtenu l'erreur suivante lorsque j'ai essayé de supprimer un utilisateur/rôle :

postgres=# drop user moocng;
ERROR:  role "moocng" cannot be dropped because some objects depend on it
DETAIL:  owner of database moocng

Puis j'ai compris que ça dépendait moocng base de données. Je l'ai donc d'abord supprimée. Puis tout est rentré dans l'ordre.

postgres=# drop database moocng;
DROP DATABASE
postgres=# drop user moocng;
DROP ROLE

J'espère que cela aidera d'autres personnes :)

2voto

Trying2Learn Points 11

En ligne de commande, il existe une commande dropuser disponible pour supprimer un utilisateur de postgres.

$ dropuser someuser

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X