Gebruiker verwijderen uit Postgres-database

Ik heb de volgende postgres-gebruikers die ik kan bekijken door het \du-commando als volgt in de terminal aan te roepen:

postgres=# \du 
                            List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 tutorial1 |                                                | {}

Volgens de postgres-documentatiezou ik in staat moeten zijn om de gebruiker genaamd “tutorial1” te verwijderen door het volgende commando in te voeren:

postgres=# DROP USER tutorial1

Als ik dat commando gebruik, gebeurt er echter niets. De documentatie geeft geen hints waarom dit niet werkt, en geeft ook geen duidelijke voorbeelden.

Dat gezegd hebbende, wat is het commando om deze gebruiker te verwijderen?


Antwoord 1, autoriteit 100%

Ik heb veel te veel tijd verspild aan het zoeken naar alle dingen om te ontspannen. Raadpleeg naast het bovenstaande (of mogelijk als volledige vervanging) dit antwoord op een vergelijkbare vraag: https://stackoverflow.com /a/11750309/647581

DROP OWNED BY your_user;
DROP USER your_user;

heeft me geholpen


Antwoord 2, autoriteit 55%

Als u zich hier bevindt (zoals ik) omdat u de gebruiker niet kunt verwijderen, kan de volgende sjabloon nuttig zijn:

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM tutorial1;
DROP USER tutorial1;

De gebruiker heeft mogelijk privileges in andere schema’s, in welk geval u de juiste REVOKE-regel moet uitvoeren waarbij “public” wordt vervangen door het juiste schema. Om alle schema’s en privilege-types voor een gebruiker te tonen, heb ik het \dp-commando bewerkt om deze query uit te voeren:

SELECT 
  n.nspname as "Schema",
  CASE c.relkind 
    WHEN 'r' THEN 'table' 
    WHEN 'v' THEN 'view' 
    WHEN 'm' THEN 'materialized view' 
    WHEN 'S' THEN 'sequence' 
    WHEN 'f' THEN 'foreign table' 
  END as "Type"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.array_to_string(c.relacl, E'\n') LIKE '%postgres%';

Ik weet niet zeker welke privileges overeenkomen met het intrekken van TABLES, SEQUENCES of FUNCTIONS, maar ik denk dat ze allemaal onder een van de drie vallen.


Antwoord 3, autoriteit 37%

Je commando is ok, maar je vergeet ;aan het einde van het commando te zetten.

Probeer het zo

postgres=# DROP USER tutorial1; (Note I put semicolon at the end)

Antwoord 4, autoriteit 32%

Eerste in Ubuntu-terminalacties:

$ sudo -su postgres
$ psql postgres

vervolgens in de terminal van postgres:

# \du
# drop user 'user_name';
# \du

[OPMERKING]:

Vergeet de puntkomma niet ";"


[UPDATE]:

Als uw Postgres zich in een docker-container bevindt …


Antwoord 5, autoriteit 7%

In het geval u een punt in de gebruikersnaam test.user heeft

drop user test.user;
ERROR:  42601: syntax error at or near "."
drop user "test.user";

Zou het moeten oplossen.


Antwoord 6, autoriteit 7%

Het antwoord van Timofey werkte bijna voor mij, maar ik moest ook machtigingen intrekken op schemaniveau. Dus mijn dropscript zag er als volgt uit:

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON SCHEMA public FROM tutorial1;
DROP USER tutorial1;

Dus intrekken moet mogelijk gebeuren op elk van de niveaus die hier plaatsvinden:
https://www.postgresql.org/docs/9.1/static/ sql-revoke.html

BEWERKEN:

Terwijl ik dit opnieuw probeerde, kreeg ik de fout

ERROR: rol kan niet worden verwijderd omdat sommige objecten ervan afhankelijk zijn

Dus ik moest de code van dit antwoord aan mijn script toevoegen
https://stackoverflow.com/a/51257346/9540123

Other episodes