PostgreSQL – comment déposer rapidement un utilisateur avec des privilèges existants

J’essaie de créer des utilisateurs de firebase database restreints pour l’application sur laquelle je travaille, et je souhaite supprimer l’utilisateur de la firebase database Postgres que j’utilise pour l’expérimenter. Existe-t-il un moyen de supprimer l’utilisateur sans avoir à révoquer d’abord tous ses droits manuellement, ou de révoquer toutes les atsortingbutions d’un utilisateur?

Que diriez-vous

DROP USER  

C’est en fait un alias pour DROP ROLE .

Vous devez explicitement supprimer tous les privilèges associés à cet utilisateur, également pour transférer sa propriété à d’autres rôles (ou supprimer l’object).

Ceci est mieux réalisé par

 REASSIGN OWNED BY  TO  

et

 DROP OWNED BY  

Ce dernier supprimera tous les privilèges accordés à l’utilisateur.

Voir les documents postgres pour DROP ROLE et la description plus détaillée de ceci.

Une addition:

Apparemment, essayer de laisser tomber un utilisateur en utilisant les commandes mentionnées ici ne fonctionnera que si vous les exécutez tout en étant connecté à la même firebase database que les GRANT d’origine, comme indiqué ici:

https://www.postgresql.org/message-id/83894A1821034948BA27FE4DAA47427928F7C29922%40apde03.APD.Satcom.Local

Notez également, si vous avez explicitement accordé:

CONNECT ON DATABASE xxx TO GROUP ,

vous devrez le révoquer séparément de DROP OWNED BY, en utilisant:

REVOKE CONNECT ON DATABASE xxx FROM GROUP

La réponse acceptée a entraîné des erreurs lors de la tentative de REASSIGN OWNED BY ou DROP OWNED BY. Les suivants ont fonctionné pour moi:

 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; DROP USER username; 

L’utilisateur peut avoir des privilèges dans d’autres schémas, auquel cas vous devrez exécuter la ligne REVOKE appropriée avec “public” remplacé par le bon schéma. Pour afficher tous les schémas et types de privilèges pour un utilisateur, j’ai modifié la commande \ dp pour effectuer cette requête:

 SELECT n.nspname as "Schema", CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'foreign table' END as "Type" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE pg_catalog.array_to_ssortingng(c.relacl, E'\n') LIKE '%username%'; 

Je ne suis pas sûr des types de privilèges correspondant à la révocation sur TABLES, SEQUENCES ou FUNCTIONS, mais je pense que tous appartiennent à l’un des trois.

J’ai rencontré le même problème et j’ai maintenant trouvé un moyen de le résoudre. Vous devez d’abord supprimer la firebase database de l’utilisateur que vous souhaitez supprimer. Ensuite, l’utilisateur peut être facilement supprimé.

J’ai créé un utilisateur nommé “msf” et j’ai eu du mal à supprimer l’utilisateur et à le recréer. J’ai suivi les étapes ci-dessous et j’ai réussi.

1) Supprimer la firebase database

 dropdb msf 

2) laisser tomber l’utilisateur

 dropuser msf 

Maintenant, j’ai réussi à laisser tomber l’utilisateur.