Il y a quelques temps, j'ai créé un utilisateur PostgreSQL nommé user1 (PostgreSQL 9.4.9).
Je souhaite supprimer cet utilisateur. J'ai donc d'abord révoqué toutes les autorisations sur les tables, les séquences, les fonctions, les privilèges par défaut et la propriété:
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON SEQUENCES FROM user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM user1;
REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM user1;
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM user1;
REVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM user1;
REASSIGN OWNED BY user1 TO postgres;
Cependant il semble qu'un objet reste lié à cet utilisateur dans 2 bases de données:
postgres=# DROP ROLE user1;
ERROR: role "user1" cannot be dropped because some objects depend on it
DETAIL: 1 object in database db1
1 object in database db2
Cela semble même être une fonction:
postgres=# \c db1
You are now connected to database "db1" as user "postgres".
db1=# DROP ROLE user1;
ERROR: role "user1" cannot be dropped because some objects depend on it
DETAIL: privileges for function text(boolean)
1 object in database db2
Mais je ne peux pas déterminer quel objet appartient ou est lié à user1.
Si je pg_dump -s db1 | grep user1
n'obtiens aucun résultat! Serait-ce un objet global?
Comment identifier l'objet manquant?
J'ai exécuté les commandes dans chaque base de données (db1 et db2). Je ne veux pas supprimer les objets appartenant à user1
, je veux juste réaffecter ou supprimer des subventions pour cet utilisateur.
la source
Vous devez d'abord vous connecter à la base de données. Dans votre cas, ce serait
et
Essayez ensuite d'exécuter à nouveau les instructions REVOKE ALL PRIVILEGES et REASSIGN OWNED / DROP OWNED.
la source