Vor einiger Zeit habe ich einen PostgreSQL-Benutzer namens user1 (PostgreSQL 9.4.9) erstellt.
Ich möchte diesen Benutzer löschen. Daher widerrufe ich zunächst alle Berechtigungen für Tabellen, Sequenzen, Funktionen, Standardberechtigungen und Eigentumsrechte:
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;
Es scheint jedoch, dass ein Objekt in zwei Datenbanken mit diesem Benutzer verknüpft bleibt:
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
Es scheint sogar eine Funktion zu sein:
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
Ich kann jedoch nicht feststellen, welches Objekt dem Benutzer gehört oder mit ihm in Beziehung steht1.
Wenn ich pg_dump -s db1 | grep user1
kein Ergebnis bekomme! Könnte es ein globales Objekt sein?
Wie kann ich das fehlende Objekt identifizieren?
Ich habe die Befehle in jeder Datenbank ausgeführt (db1 und db2). Ich möchte keine Objekte löschen user1
, deren Eigentümer es ist , sondern nur Zuschüsse für diesen Benutzer neu zuweisen oder entfernen.
quelle
Sie müssen zuerst eine Verbindung zur Datenbank herstellen. In Ihrem Fall wäre das
und
Führen Sie dann die Anweisungen REVOKE ALL PRIVILEGES und REASSIGN OWNED / DROP OWNED erneut aus.
quelle