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:
SuperuserCreate roleCreate DBReplicationBypass 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;
