sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL brugertilladelser

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å PostgreSQL
  • SUPERUSER / NOSUPERUSER :tillad (eller ej) superbrugertilladelser. En databasesuperbruger vil omgå andre tilladelsestjek, undtagen LOGIN (det skal bevilges særskilt).
  • CREATEDB / NOCREATEDB :tillade (eller ej) muligheden for at oprette nye databaser
  • CREATEROLE / NOCREATEROLE :tillade (eller ej) muligheden for at oprette nye roller
  • CREATEUSER / NOCREATEUSER :tillade (eller ej) muligheden for at oprette nye brugere
  • INHERIT / NOINHERIT :tillade (eller ej) muligheden for at gøre privilegierne arvelige
  • REPLICATION / 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;


  1. Find sekvenshuller i en tabel i Oracle

  2. Opret rumenhed til en tabel, som har et felt med LANG datatype i Sqlite

  3. Oracle bordskifteskærm

  4. Den berygtede java.sql.SQLEundtagelse:Ingen passende driver fundet