Een gebruiker met bestaande rechten snel verwijderen

Ik probeer beperkte DB-gebruikers te maken voor de app waaraan ik werk, en ik wil de Postgres-databasegebruiker die ik gebruik om te experimenteren verwijderen. Is er een manier om de gebruiker te laten vallen zonder eerst al zijn rechten handmatig in te trekken, of alle subsidies die een gebruiker heeft in te trekken?


Antwoord 1, autoriteit 100%

Wat dacht je van

DROP USER <username>

Dit is eigenlijk een alias voor DROP ROLE.

U moet expliciet alle rechten die aan die gebruiker zijn gekoppeld, laten vallen, ook om het eigendom ervan naar andere rollen te verplaatsen (of het object te verwijderen).

Dit kan het beste worden bereikt door

REASSIGN OWNED BY <olduser> TO <newuser>

en

DROP OWNED BY <olduser>

De laatste verwijdert alle rechten die aan de gebruiker zijn verleend.

Bekijk de postgres-documenten voor DROP ROLEen de meer gedetailleerde beschrijvinghiervan.

Toevoeging:

Blijkbaar zal het proberen om een ​​gebruiker te verwijderen met behulp van de hier genoemde commando’s alleen werken als je ze uitvoert terwijl je verbonden bent met dezelfde database waarvan de originele GRANTS zijn gemaakt, zoals hier besproken:

https://www.postgresql.org/message- id/83894A1821034948BA27FE4DAA47427928F7C29922%40apde03.APD.Satcom.Local


Antwoord 2, autoriteit 46%

Het geaccepteerde antwoord resulteerde in fouten voor mij bij een poging REASSIGN OWNED BY of DROP OWNED BY. Het volgende werkte voor mij:

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

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 '%username%';

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 10%

Let ook op, als u expliciet hebt verleend:

CONNECT ON DATABASE xxx TO GROUP,

je moet dit apart van DROP OWNED BY intrekken met:

REVOKE CONNECT ON DATABASE xxx FROM GROUP


Antwoord 4, autoriteit 10%

Dit is wat uiteindelijk voor mij heeft gewerkt:

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschem FROM user_mike;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA myschem FROM user_mike;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA myschem FROM user_mike;
REVOKE ALL PRIVILEGES ON SCHEMA myschem FROM user_mike;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschem REVOKE ALL ON SEQUENCES FROM user_mike;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschem REVOKE ALL ON TABLES FROM user_mike;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschem REVOKE ALL ON FUNCTIONS FROM user_mike;
REVOKE USAGE ON SCHEMA myschem FROM user_mike;
REASSIGN OWNED BY user_mike TO masteruser;
DROP USER user_mike ;

Antwoord 5, autoriteit 6%

Ik moest nog een regel toevoegen aan REVOKE…

Na het hardlopen:

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

Ik kreeg nog steeds de foutmelding:
gebruikersnaam kan niet worden verwijderd omdat sommige objecten ervan afhankelijk zijn DETAIL: privileges voor schema public

Ik miste dit:

REVOKE USAGE ON SCHEMA public FROM username;

Toen kon ik de rol laten vallen.

DROP USER username;

Antwoord 6, autoriteit 2%

Er is geen REVOKE ALL PRIVILEGES ON ALL VIEWS, dus ik eindigde met:

do $$
DECLARE r record;
begin
  for r in select * from pg_views where schemaname = 'myschem'
  loop
    execute 'revoke all on ' || quote_ident(r.schemaname) ||'.'|| quote_ident(r.viewname) || ' from "XUSER"';
  end loop;
end $$;

en gebruikelijk:

REVOKE ALL PRIVILEGES ON DATABASE mydb FROM "XUSER";
REVOKE ALL PRIVILEGES ON SCHEMA myschem FROM "XUSER";
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschem FROM "XUSER";
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA myschem FROM "XUSER";
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA myschem FROM "XUSER";

om het volgende te laten slagen:

drop role "XUSER";

Antwoord 7, autoriteit 2%

In de opdrachtregel is een commando dropuserbeschikbaar om de gebruiker uit postgres te laten vallen.

$ dropuser someuser

Antwoord 8, autoriteit 2%

Dit werkte voor mij:

DROP OWNED BY dbuser

en dan:

DROP USER dbuser

Antwoord 9

Dit zou moeten werken:

REVOKE ALL ON SCHEMA public FROM myuser;
REVOKE ALL ON DATABASE mydb FROM myuser;
DROP USER myuser;

Antwoord 10

https://dbtut.com/index.php/2018/07/09/role-x-cannot-be-dropped-because-some-objects-depend-on-it/

Gecontroleerd en er was geen eigendom voor enig object in db en realiseerde zich later dat dit te wijten kan zijn aan buitenlandse datawrappertoewijzing die is gemaakt voor de gebruiker en toestemming verleent.

Dus er waren twee acties nodig

  1. Gebruikerstoewijzing verwijderen
  2. Gebruik op buitenlandse datawrapper intrekken.

voorbeeldvragen

DROP GEBRUIKERSMAPPING VOOR gebruikersnaam SERVER buitenlandse servernaam

INTREK ALLES OP BUITENLANDSE SERVER buitenlandse servernaam VAN gebruikersnaam


Antwoord 11

Ik had hetzelfde probleem en heb nu een manier gevonden om het op te lossen.
Eerst moet u de database verwijderen van de gebruiker die u wilt verwijderen. Dan kan de gebruiker eenvoudig worden verwijderd.

Ik heb een gebruiker met de naam “msf” gemaakt en heb een tijdje geworsteld om de gebruiker te verwijderen en opnieuw aan te maken. Ik volgde de onderstaande stappen en het is gelukt.

1) Zet ​​de database neer

dropdb msf

2) laat de gebruiker vallen

dropuser msf

Nu heb ik de gebruiker succesvol verwijderd.

Other episodes