Wie wäre es mit
DROP USER <username>
Dies ist eigentlich ein Alias für DROP ROLE
.
Sie müssen alle mit diesem Benutzer verknüpften Berechtigungen explizit löschen, um seinen Besitz auf andere Rollen zu übertragen (oder das Objekt zu löschen).
Dies wird am besten erreicht durch
REASSIGN OWNED BY <olduser> TO <newuser>
und
DROP OWNED BY <olduser>
Letzteres entfernt alle dem Benutzer gewährten Berechtigungen.
Weitere Informationen hierzu finden Sie in den Postgres-Dokumenten für DROP ROLE und in der detaillierteren Beschreibung .
Zusatz:
Anscheinend funktioniert der Versuch, einen Benutzer mit den hier genannten Befehlen zu löschen, nur, wenn Sie ihn ausführen, während Sie mit derselben Datenbank verbunden sind, aus der die ursprünglichen GRANTS erstellt wurden, wie hier beschrieben:
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
gab die Fehlermeldungen :ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo
.DROP OWNED BY testuser
Hat der Trick jedoch getan, betrachtet Postgres Zuschüsse anscheinend als abwerfbare Objekte.Die akzeptierte Antwort führte bei dem Versuch, REASSIGN OWNED BY oder DROP OWNED BY zu verwenden, zu Fehlern. Folgendes hat bei mir funktioniert:
Der Benutzer verfügt möglicherweise über Berechtigungen in anderen Schemas. In diesem Fall müssen Sie die entsprechende REVOKE-Zeile ausführen, wobei "public" durch das richtige Schema ersetzt wird. Um alle Schemas und Berechtigungstypen für einen Benutzer anzuzeigen, habe ich den Befehl \ dp bearbeitet, um diese Abfrage durchzuführen:
Ich bin nicht sicher, welche Berechtigungstypen dem Widerruf von TABELLEN, SEQUENZEN oder FUNKTIONEN entsprechen, aber ich denke, dass alle unter eine der drei fallen.
quelle
REVOKE ALL PRIVILEGES ON DATABASE db_name FROM username;
revoke USAGE on SCHEMA some_schema from username;
Beachten Sie auch, wenn Sie ausdrücklich gewährt haben:
CONNECT ON DATABASE xxx TO GROUP
,Sie müssen dies getrennt von DROP OWNED BY widerrufen, indem Sie Folgendes verwenden:
REVOKE CONNECT ON DATABASE xxx FROM GROUP
quelle
Ich musste REVOKE noch eine Zeile hinzufügen ...
Nach dem Rennen:
Ich habe immer noch den Fehler erhalten: Benutzername kann nicht gelöscht werden, da einige Objekte davon abhängen. DETAIL: Berechtigungen für das öffentliche Schema
Mir hat das gefehlt:
Dann konnte ich die Rolle fallen lassen.
quelle
Folgendes hat endlich für mich funktioniert:
quelle
Da es keine gibt
REVOKE ALL PRIVILEGES ON ALL VIEWS
, endete ich mit:und üblich:
damit Folgendes gelingt:
quelle
In der Befehlszeile
dropuser
steht ein Befehl zum Löschen von Benutzern aus Postgres zur Verfügung.quelle
Ich stand vor dem gleichen Problem und fand nun einen Weg, es zu lösen. Zuerst müssen Sie die Datenbank des Benutzers löschen, den Sie löschen möchten. Dann kann der Benutzer leicht gelöscht werden.
Ich habe einen Benutzer namens "msf" erstellt und eine Weile versucht, den Benutzer zu löschen und neu zu erstellen. Ich folgte den folgenden Schritten und wurde erfolgreich.
1) Löschen Sie die Datenbank
2) Lassen Sie den Benutzer fallen
Jetzt habe ich den Benutzer erfolgreich fallen lassen.
quelle