Que diriez-vous
DROP USER <username>
Il s'agit en fait d'un alias pour DROP ROLE
.
Vous devez explicitement supprimer tous les privilèges associés à cet utilisateur, ainsi que déplacer sa propriété vers d'autres rôles (ou supprimer l'objet).
Ceci est mieux réalisé par
REASSIGN OWNED BY <olduser> TO <newuser>
et
DROP OWNED BY <olduser>
Ce dernier supprimera tous les privilèges accordés à l'utilisateur.
Voir la documentation postgres pour DROP ROLE et la description plus détaillée de ceci.
Une addition:
Apparemment, essayer de supprimer un utilisateur en utilisant les commandes mentionnées ici ne fonctionnera que si vous les exécutez tout en étant connecté à la même base de données à partir de laquelle les GRANTS d'origine ont été créés, comme indiqué ici:
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
a donné les messages d'erreur:ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo
. Cependant, aDROP OWNED BY testuser
fait l'affaire, apparemment Postgres considère les subventions comme des objets déposables.La réponse acceptée a entraîné des erreurs pour moi lors de ma tentative de réattribution de propriété ou de suppression de propriété. Ce qui suit a fonctionné pour moi:
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 schéma correct. 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:
Je ne sais pas quels types de privilèges correspondent à la révocation sur TABLES, SEQUENCES ou FUNCTIONS, mais je pense que tous relèvent de l'un des trois.
la source
REVOKE ALL PRIVILEGES ON DATABASE db_name FROM username;
revoke USAGE on SCHEMA some_schema from username;
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 source
J'ai dû ajouter une ligne de plus à REVOKE ...
Après avoir couru:
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
Je manquais ceci:
Ensuite, j'ai pu abandonner le rôle.
la source
Voici ce qui a finalement fonctionné pour moi:
la source
Il n'y a pas
REVOKE ALL PRIVILEGES ON ALL VIEWS
, alors j'ai fini par:et habituel:
pour que ce qui suit réussisse:
la source
En ligne de commande, il existe une commande
dropuser
disponible pour supprimer l'utilisateur de postgres.la source
J'ai fait face au même problème et j'ai maintenant trouvé un moyen de le résoudre. Vous devez d'abord supprimer la base de données 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 base de données
2) Déposez l'utilisateur
Maintenant, j'ai réussi à supprimer l'utilisateur.
la source