sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL användarbehörigheter

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å PostgreSQL
  • SUPERUSER / NOSUPERUSER :tillåt (eller inte) superanvändarbehörigheter. En databassuperanvändare kommer att kringgå andra behörighetskontroller, förutom LOGIN (det måste beviljas separat).
  • CREATEDB / NOCREATEDB :tillåta (eller inte) möjligheten att skapa nya databaser
  • CREATEROLE / NOCREATEROLE :tillåta (eller inte) möjligheten att skapa nya roller
  • CREATEUSER / NOCREATEUSER :tillåta (eller inte) möjligheten att skapa nya användare
  • INHERIT / NOINHERIT :tillåta (eller inte) möjligheten att göra privilegierna ärvbara
  • REPLICATION / 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;


  1. Postgres-fel vid infogning - ERROR:ogiltig bytesekvens för kodning av UTF8:0x00

  2. Hur får jag en frågeexekveringsplan i SQL Server?

  3. Oracle PL/SQL Bulk Collect med Spara undantag Exempel

  4. SQLite-uppdatering