sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-gebruikersmachtigingen

In PostgreSQL is alles gebouwd rond het concept van rol .

Bij de eerste installatie van PostgreSQL op macOS, heeft het script een rol gemaakt met uw macOS-gebruikersnaam , met een lijst van verleende machtigingen.

Er zijn geen gebruikers in PostgreSQL, alleen rollen .

Door psql postgres . uit te voeren in uw terminal logt u automatisch in met uw macOS-gebruikersnaam bij PostgreSQL, waardoor u toegang krijgt tot de gecreëerde rol.

In mijn geval de flaviocopes rol is gemaakt, en ik kan het zien door de \du commando:

Zie je wel? Ik heb de volgende rolkenmerken standaard:

  • Superuser
  • Create role
  • Create DB
  • Replication
  • Bypass RLS

en ik ben geen lid van een andere rol (hierover later meer)

Een nieuwe rol maken

Een nieuwe rol wordt aangemaakt met de CREATE ROLE commando:

CREATE ROLE <role>;

Bijvoorbeeld:

CREATE ROLE testing;

We hebben een nieuwe rol gekregen, met de Cannot login rol attribuut. Onze nieuw aangemaakte gebruiker kan niet inloggen.

U kunt het proberen door de \q . te typen commando, en dan psql postgres -U testing , maar u ziet deze fout:

Om dit probleem op te lossen, moeten we de LOGIN . toevoegen rolattribuut bij aanmaak:

CREATE ROLE <role> WITH LOGIN;

Als we die rol verwijderen met:

DROP ROLE <role>;

en voeg WITH LOGIN . toe deze keer:

DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;

We kunnen zien dat de testing rol kan inloggen, omdat we de Cannot login . niet hebben rolkenmerk deze keer:

Probeer het door het commando \q . toe te voegen om te stoppen, en dan psql postgres -U testing :

Merk op dat de prompt gewijzigd van =# naar => omdat we de Superuser . niet hebben rolkenmerk nu.

Een wachtwoord aan een rol toevoegen

In de vorige CREATE ROLE opdracht hebben we een rol zonder wachtwoord gemaakt. Natuurlijk is het erg belangrijk om (veilige) wachtwoorden te hebben. U kunt een wachtwoord toevoegen met behulp van het PASSWORD zoekwoord:

CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';

GEBRUIKER MAKEN

Een alternatieve manier om rollen te definiëren met de LOGIN attribuut automatisch toegevoegd (effectief gebruikers aanmaken die kunnen inloggen) is het gebruik van CREATE USER :

CREATE USER <role> PASSWORD '<password>';

Een rolkenmerk aan een rol toevoegen

Een rolkenmerk kan later aan een rol worden toegevoegd met behulp van de ALTER ROLE commando.

Laten we aannemen dat we een rol hebben gemaakt zonder het LOGIN-attribuut:

CREATE ROLE <username> PASSWORD '<password>';

We kunnen het toevoegen met:

ALTER ROLE <role> WITH LOGIN;

Ingebouwde rolattributen

We zagen de LOGIN rolkenmerk al, om een ​​rol toe te staan ​​om in te loggen.

Maar wat zijn andere ingebouwde rolattributen die we kunnen gebruiken?

  • LOGIN / NOLOGIN :toestaan ​​(of niet) om in te loggen op PostgreSQL
  • SUPERUSER / NOSUPERUSER :superuser-machtigingen toestaan ​​(of niet). Een database-supergebruiker zal andere toestemmingscontroles omzeilen, behalve LOGIN (het moet apart worden toegekend).
  • CREATEDB / NOCREATEDB :sta de mogelijkheid toe (of niet) om nieuwe databases aan te maken
  • CREATEROLE / NOCREATEROLE :sta de mogelijkheid toe (of niet) om nieuwe rollen aan te maken
  • CREATEUSER / NOCREATEUSER :sta de mogelijkheid toe om nieuwe gebruikers aan te maken (of niet)
  • INHERIT / NOINHERIT :sta de mogelijkheid toe (of niet) om de privileges overerfbaar te maken
  • REPLICATION / NOREPLICATION :replicatierechten toekennen (of niet) (een geavanceerd onderwerp dat we niet behandelen)

Groepsrollen

In PostgreSQL zijn er geen groepen gebruikers.

In plaats daarvan kunt u rollen maken met bepaalde machtigingen en die rollen vervolgens aan andere rollen toekennen.

Rollen nemen de machtigingen over van rollen die aan hen zijn verleend, als die rollen het INHERIT-kenmerk hebben.

Maak een groepsrol

Typ

. om een ​​groepsrol te maken
CREATE ROLE <groupname>;

De syntaxis is hetzelfde als het maken van een rol.

Zodra de groepsrol is aangemaakt, kun je rollen aan de groepsrol toevoegen met GRANT :

GRANT <groupname> TO <role>

We kunnen bijvoorbeeld een flavio . maken gebruikersrol, een groepsrol “werknemer” en wijs de gebruiker toe aan de groepsrol:

CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;

U kunt een rol uit een groepsrol verwijderen met:

REVOKE <groupname> FROM <username>

Voorbeeld:

REVOKE employee FROM flavio;

Groepsrolkenmerken

Standaard zal het toevoegen van een rol aan een groepsrol niet laat de rol attributen (permissies) erven van de groepsrol.

U moet de groepsrol maken met de INHERIT attribuut.

Stel dat u de rol van de werknemersgroep maakt en deze de CREATEDB . toewijst kenmerk:

CREATE ROLE employee WITH CREATEDB INHERIT;

Maak nu een nieuwe rol aan met INHERIT :

CREATE ROLE flavio;
GRANT employee TO flavio;


  1. Kan pg gem niet installeren op Mountain Lion

  2. verschil tussen ON-clausule en het gebruik van clausule in sql

  3. Hoe .sql-bestand uit te voeren met powershell?

  4. Moet het laten vallen van een database in geen enkele transactie gebeuren?