I PostgreSQL är allt byggt kring konceptet roll .
När du installerade PostgreSQL på macOS första gången skapade skriptet en roll med ditt macOS-användarnamn , med en lista över beviljade behörigheter.
Det finns inga användare i PostgreSQL, bara roller .
Genom att köra psql postgres
i din terminal loggar du automatiskt in med ditt macOS-användarnamn till PostgreSQL, och kommer därför åt den skapade rollen.
I mitt fall flaviocopes
roll skapades, och jag kan se den genom att använda \du
kommando:
Ser? Jag har följande rollattribut som standard:
Superuser
Create role
Create DB
Replication
Bypass RLS
och jag är inte medlem i någon annan roll (mer om detta senare)
Skapa en ny roll
En ny roll skapas med CREATE ROLE
kommando:
CREATE ROLE <role>;
Till exempel:
CREATE ROLE testing;
Vi har fått en ny roll, med Cannot login
rollattribut. Vår nyskapade användare kommer inte att kunna logga in.
Du kan försöka genom att skriva \q
kommandot och sedan psql postgres -U testing
, men du kommer att se det här felet:
För att åtgärda detta problem måste vi lägga till LOGIN
rollattribut vid skapande:
CREATE ROLE <role> WITH LOGIN;
Om vi tar bort den rollen med:
DROP ROLE <role>;
och lägg till WITH LOGIN
denna gång:
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;
Vi kan se att testing
roll kan logga in, eftersom vi inte har Cannot login
rollattribut denna gång:
Försök genom att lägga till kommandot \q
för att avsluta och sedan psql postgres -U testing
:
Lägg märke till att prompten ändrat från =#
till =>
eftersom vi inte har Superuser
rollattribut nu.
Lägga till ett lösenord till en roll
I föregående CREATE ROLE
kommandot skapade vi en roll utan lösenord. Naturligtvis är det väldigt viktigt att ha (säkra) lösenord. Du kan lägga till ett lösenord genom att använda PASSWORD
nyckelord:
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
SKAPA ANVÄNDARE
Ett alternativt sätt att definiera roller med LOGIN
attribut som läggs till automatiskt (att skapa användare som kan logga in) är att använda CREATE USER
:
CREATE USER <role> PASSWORD '<password>';
Lägga till ett rollattribut till en roll
Ett rollattribut kan läggas till senare till en roll med hjälp av ALTER ROLE
kommando.
Låt oss anta att vi skapade en roll utan LOGIN-attributet:
CREATE ROLE <username> PASSWORD '<password>';
Vi kan lägga till det med:
ALTER ROLE <role> WITH LOGIN;
Inbyggda rollattribut
Vi såg LOGIN
rollattribut redan, för att tillåta en roll att logga in.
Men vilka andra inbyggda rollattribut kan vi använda?
LOGIN
/NOLOGIN
:tillåt (eller inte) att logga in på PostgreSQLSUPERUSER
/NOSUPERUSER
:tillåt (eller inte) superanvändarbehörigheter. En databassuperanvändare kommer att kringgå andra behörighetskontroller, förutomLOGIN
(det måste beviljas separat).CREATEDB
/NOCREATEDB
:tillåta (eller inte) möjligheten att skapa nya databaserCREATEROLE
/NOCREATEROLE
:tillåta (eller inte) möjligheten att skapa nya rollerCREATEUSER
/NOCREATEUSER
:tillåta (eller inte) möjligheten att skapa nya användareINHERIT
/NOINHERIT
:tillåta (eller inte) möjligheten att göra privilegierna ärvbaraREPLICATION
/NOREPLICATION
:bevilja (eller inte) replikeringsbehörigheter (ett avancerat ämne som vi inte kommer att täcka)
Grupproller
I PostgreSQL finns det inga grupper av användare.
Istället kan du skapa roller med vissa behörigheter och sedan ge dessa roller till andra roller.
Roller kommer att ärva behörigheterna för roller som beviljats dem, om dessa roller har attributet INHERIT.
Skapa en grupproll
För att skapa en grupproll, skriv
CREATE ROLE <groupname>;
Syntaxen är densamma som att skapa en roll.
När grupprollen har skapats kan du lägga till roller till grupprollen med GRANT
:
GRANT <groupname> TO <role>
Till exempel kan vi skapa en flavio
användarroll, en "anställd"-grupproll och tilldela användaren grupprollen:
CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;
Du kan ta bort en roll från en grupproll med:
REVOKE <groupname> FROM <username>
Exempel:
REVOKE employee FROM flavio;
Grupprollattribut
Som standard är det inte att lägga till en roll i en grupproll få rollen att ärva attribut (behörigheter) från grupprollen.
Du måste skapa grupprollen med INHERIT
attribut.
Anta att du skapar anställningsgruppens roll och tilldelar den CREATEDB
attribut:
CREATE ROLE employee WITH CREATEDB INHERIT;
Skapa nu en ny roll med INHERIT
:
CREATE ROLE flavio;
GRANT employee TO flavio;