web-dev-qa-db-fra.com

Impossible de supprimer le rôle PostgreSQL. Erreur: «ne peut pas être supprimé car certains objets en dépendent»

J'essayais de supprimer l'utilisateur PostgreSQL:

DROP USER ryan;

J'ai reçu cette erreur:

Error in query:
ERROR: role "ryan" cannot be dropped because some objects depend on it
DETAIL: privileges for database mydatabase

J'ai cherché une solution à partir de ces fils:

Ont toujours la même erreur.

Cela se produit après avoir accordé toutes les autorisations à l'utilisateur "ryan" avec:

GRANT ALL PRIVILEGES ON DATABASE mydatabase ON SCHEMA public TO ryan;
10
notalentgeek

Débarrassez-vous de tous les privilèges avec DROP OWNED (ce qui n'est pas trop évident d'après le libellé). Le manuel:

[...] Tous les privilèges accordés aux rôles donnés sur les objets de la base de données courante et sur les objets partagés (bases de données, espaces disque logiques) seront également révoqués.

La séquence fiable de commandes pour supprimer un rôle est donc:

REASSIGN OWNED BY ryan TO postgres;  -- or some other trusted role
DROP OWNED BY ryan;
-- repeat in ALL databases where the role owns anything or has any privileges!

DROP USER ryan;

En relation:

19
Erwin Brandstetter

Ce qui a fonctionné pour moi, c'est 1) Se connecter à la base de données

\c mydatabase

2) Réattribution de la propriété

REASSIGN OWNED BY ryan TO <newuser>;

Ou/et simplement supprimer l'objet

DROP OWNED BY ryan;

3) Exécution des privilèges REVOKE

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

4) Supprimer l'utilisateur

DROP USER ryan;

PS: Il se peut que vous n'ayez pas besoin d'exécuter les étapes 2 et 3, une seule des deux étapes peut généralement suffire.

0
Samuel Anyaele

Accorder toutes les autorisations à ryan n'aidera pas, il est probable qu'il soit le propriétaire de la base de données. Vous devrez faire en sorte que quelqu'un d'autre le possède:

REASSIGN OWNED BY ryan TO postgres;

à moins que vous n'ayez plus besoin de ma base de données, si c'est le cas, déposez simplement la base de données (ASSUREZ-VOUS QUE VOUS N'EN AVEZ PAS BESOIN AVANT DE LE FAIRE):

DROP DATABASE mydatabase;
0
A Hettinger