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 PostgreSQLSUPERUSER
/NOSUPERUSER
:superuser-machtigingen toestaan (of niet). Een database-supergebruiker zal andere toestemmingscontroles omzeilen, behalveLOGIN
(het moet apart worden toegekend).CREATEDB
/NOCREATEDB
:sta de mogelijkheid toe (of niet) om nieuwe databases aan te makenCREATEROLE
/NOCREATEROLE
:sta de mogelijkheid toe (of niet) om nieuwe rollen aan te makenCREATEUSER
/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 makenREPLICATION
/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 makenCREATE 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;