I PostgreSQL er alt bygget op omkring konceptet rolle .
Første gang du installerede PostgreSQL på macOS, oprettede scriptet en rolle med dit macOS-brugernavn , med en liste over tildelte tilladelser.
Der er ingen brugere i PostgreSQL, kun roller .
Ved at køre psql postgres
i din terminal logger du automatisk på med dit macOS-brugernavn til PostgreSQL og får derfor adgang til den oprettede rolle.
I mit tilfælde flaviocopes
rollen blev oprettet, og jeg kan se den ved at bruge \du
kommando:
Se? Jeg har følgende rolleegenskaber som standard:
Superuser
Create role
Create DB
Replication
Bypass RLS
og jeg er ikke medlem af nogen anden rolle (mere om dette senere)
Oprettelse af en ny rolle
En ny rolle oprettes ved hjælp af CREATE ROLE
kommando:
CREATE ROLE <role>;
For eksempel:
CREATE ROLE testing;
Vi har fået en ny rolle med Cannot login
rolle egenskab. Vores nyoprettede bruger vil ikke kunne logge ind.
Du kan prøve ved at skrive \q
kommando og derefter psql postgres -U testing
, men du vil se denne fejl:
For at løse dette problem skal vi tilføje LOGIN
rolleattribut ved oprettelse:
CREATE ROLE <role> WITH LOGIN;
Hvis vi fjerner den rolle ved hjælp af:
DROP ROLE <role>;
og tilføj WITH LOGIN
denne gang:
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;
Vi kan se, at testing
rolle kan logge på, fordi vi ikke har Cannot login
rolleattribut denne gang:
Prøv ved at tilføje kommandoen \q
for at afslutte, og derefter psql postgres -U testing
:
Bemærk, at prompten ændret fra =#
til =>
fordi vi ikke har Superuser
rolleattribut nu.
Tilføjelse af en adgangskode til en rolle
I den forrige CREATE ROLE
kommando vi oprettede en rolle uden adgangskode. Det er selvfølgelig meget vigtigt at have (sikre) adgangskoder. Du kan tilføje en adgangskode ved at bruge PASSWORD
søgeord:
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
OPRETT BRUGER
En alternativ måde at definere roller med LOGIN
attribut tilføjet automatisk (ved at skabe brugere, der kan logge ind) er at bruge CREATE USER
:
CREATE USER <role> PASSWORD '<password>';
Tilføjelse af en rolleattribut til en rolle
En rolleattribut kan tilføjes senere til en rolle ved hjælp af ALTER ROLE
kommando.
Lad os antage, at vi har oprettet en rolle uden LOGIN-attributten:
CREATE ROLE <username> PASSWORD '<password>';
Vi kan tilføje det ved at bruge:
ALTER ROLE <role> WITH LOGIN;
Indbyggede rolleattributter
Vi så LOGIN
rolleattribut allerede, for at tillade en rolle at logge ind.
Men hvad er andre indbyggede rolleattributter, vi kan bruge?
LOGIN
/NOLOGIN
:tillad (eller ej) at logge ind på PostgreSQLSUPERUSER
/NOSUPERUSER
:tillad (eller ej) superbrugertilladelser. En databasesuperbruger vil omgå andre tilladelsestjek, undtagenLOGIN
(det skal bevilges særskilt).CREATEDB
/NOCREATEDB
:tillade (eller ej) muligheden for at oprette nye databaserCREATEROLE
/NOCREATEROLE
:tillade (eller ej) muligheden for at oprette nye rollerCREATEUSER
/NOCREATEUSER
:tillade (eller ej) muligheden for at oprette nye brugereINHERIT
/NOINHERIT
:tillade (eller ej) muligheden for at gøre privilegierne arveligeREPLICATION
/NOREPLICATION
:give (eller ej) replikeringstilladelser (et avanceret emne, vi ikke dækker)
Grupperoller
I PostgreSQL er der ingen grupper af brugere.
I stedet kan du oprette roller med bestemte tilladelser og derefter tildele disse roller til andre roller.
Roller vil arve tilladelserne for roller, der er givet til dem, hvis disse roller har attributten INHERIT.
Opret en grupperolle
For at oprette en grupperolle skal du skrive
CREATE ROLE <groupname>;
Syntaksen er den samme som at oprette en rolle.
Når grupperollen er oprettet, kan du tilføje roller til grupperollen ved hjælp af GRANT
:
GRANT <groupname> TO <role>
For eksempel kan vi oprette en flavio
brugerrolle, en "medarbejder"-grupperolle, og tildel brugeren til grupperollen:
CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;
Du kan fjerne en rolle fra en grupperolle ved at bruge:
REVOKE <groupname> FROM <username>
Eksempel:
REVOKE employee FROM flavio;
Grupperolleattributter
Som standard vil tilføjelse af en rolle til en grupperolle ikke få rollen til at arve attributter (tilladelser) fra grupperollen.
Du skal oprette grupperollen med INHERIT
attribut.
Antag, at du opretter medarbejdergrupperollen og tildeler den CREATEDB
attribut:
CREATE ROLE employee WITH CREATEDB INHERIT;
Opret nu en ny rolle ved hjælp af INHERIT
:
CREATE ROLE flavio;
GRANT employee TO flavio;