Utilizarea rolurilor și controlul accesului în postgresql

Plasarea serverelor în centre de date fiabile din Europa. Deschideți serverul VPS / VDS bazat pe cloud pe SSD-uri rapide în 1 minut!

Cel mai bun Gazduire:
- protejează datele de accesul nedorit într-un centru de date european protejat
- va accepta plata cel puțin în taxe.
- vă va permite să vă distribuiți distribuția

- protecția împotriva atacurilor DDos
- copie de rezervă gratuită
- Uptime 99.9999%
- Centrul de date - TIER III
- furnizor - TIER I

Sprijinim în limba rusă 24/7/365 Lucrăm cu persoane juridice și persoane fizice. Acum aveți nevoie de 24 nuclee și 72 GB de memorie RAM. Vă rog!

Tarifele noastre avantajoase vor dovedi că nu ați știut încă ieftinul de găzduire!

Minute: selectați configurația, plătiți și CMS de pe VPS este gata.
Banii înapoi - 30 de zile!

Carduri bancare, e-valută, prin intermediul terminalelor Qiwi, Webmoney, PayPal, Novoplat etc.

Puneți o întrebare la sprijinul 24/7/365

Găsiți răspunsuri în baza noastră de date și cunoașteți recomandările

PostgreSQL este un sistem deschis de gestionare a bazelor de date (DBMS) bazat pe limba interogărilor SQL. PostgreSQL este un instrument foarte puternic conceput pentru organizarea și stocarea datelor de aplicație.

Acest ghid vă va învăța cum să gestionați drepturile de acces PostgreSQL.

Notă. Manualul este rulat pe serverul cloud Ubuntu 12.04, însă toate instrucțiunile, cu excepția secțiunii de instalare, pot fi aplicate altor distribuții moderne Linux.

Instalarea PostgreSQL

Dacă PostgreSQL nu a fost instalat mai devreme, instalați-l acum. Pentru aceasta, utilizați următoarele comenzi:

sudo apt-get update
sudo apt-get instalare postgresql postgresql-contrib

În timpul instalării, PostgreSQL creează un utilizator standard pentru lucrare. Treceți la sesiunea acestui utilizator.

sudo su - postgres

PostgreSQL drepturi de acces

PostgreSQL gestionează accesul prin așa-numitele roluri.

Rolurile sunt similare cu permisiunile obișnuite ale sistemului Unix, spre deosebire de Unix, ele nu sunt împărțite în utilizatori și grupuri.

Rolurile pot fi membri ai altor roluri, ceea ce le permite să moștenească setările de privilegii ale rolurilor definite anterior.

și apoi tastați:

După cum puteți vedea, după instalarea în PostgreSQL există un singur rol, care are drepturi de acces extinse.

Crearea de roluri PostgreSQL

Există două moduri de bază pentru a crea roluri: la linia de comandă PostgreSQL și la linia de comandă a sistemului.

Crearea unui rol în PostgreSQL

Este mai ușor să creați noi roluri în linia de comandă PostgreSQL.

Pentru aceasta, utilizați următoarea sintaxă:

CREAȚI ROLUL new_role_name;

Încercați să creați un nou rol (în manual este denumit în mod provizoriu demo_role):

CREAȚI ROLUL demo_role;
CREȘTE ROLUL

Verificați lista rolurilor existente:

\ du
Listă de roluri
Nume de roluri Atribute Membru al
-----------+------------------------------------------------+-----------
demo_role | Nu se poate conecta | <>
postgres | Superuser, Creare rol, Creare DB, Replicare | <>

După cum puteți vedea, un nou rol a apărut pe listă. Rețineți: în acest moment nu are privilegii de conectare.

Crearea unui rol pe linia de comandă a sistemului

De asemenea, puteți crea un rol utilizând comanda createuser.

Închideți linia de comandă PostgreSQL:

Pentru a crea un rol pe linia de comandă a sistemului, tastați următoarea comandă (în acest manual acest rol va fi convențional numit test_user):

createuser test_user
Noul rol va fi un superuser? (y / n) n
Va fi permis noului rol să creeze baze de date? (y / n) n
Va permite noului rol să creeze mai multe noi roluri? (y / n) n

Comanda va pune o serie de întrebări care vor determina privilegiile inițiale ale acestui rol.

Deschideți din nou linia de comandă Postgres și căutați lista rolurilor existente:

psql
\ du
Listă de roluri
Nume de roluri Atribute Membru al
-----------+------------------------------------------------+-----------
demo_role | Nu se poate conecta | <>
postgres | Superuser, Creare rol, Creare DB, Replicare | <>
test_user | | | <>

După cum puteți vedea, rolurile create prin diferite metode nu sunt identice. Rolul creat pe linia de comandă a sistemului are privilegii de conectare.

Ștergerea rolurilor PostgreSQL

Acum încercați să setați privilegiile demo_role și test_user. Acest lucru se poate face în timpul creării rolului (adică trebuie să ștergeți și să recreați demo_role). De asemenea, puteți să editați pur și simplu privilegiile rolului existent.

Dar, înainte de a începe să gestionați privilegiile PostgreSQL, trebuie să învățați cum să ștergeți rolurile.

Pentru aceasta, utilizați următoarea sintaxă:

ROL DROP nume_rolu;
Ștergeți rolul "demo_role" tastând:
DROP ROLE demo_role;
DROP ROLE

Dacă nu există rolul specificat, comanda va returna o eroare:

DROP ROLE demo_role;
EROARE: rolul "demo_role" nu există

Instrumentul IF EXISTS evită această eroare; O comandă cu un astfel de operator va șterge rolul dacă există. Dacă nu este prezent rolul specificat, comanda nu va afișa o eroare.

DROP ROLE DACĂ EXISTĂ nume_culin;

Aceasta este, în orice caz, comanda va fi executată cu succes și nu va repeta o eroare.

DROP ROLE DACĂ EXISTĂ demo_role;
ANUNȚ: rolul "demo_role" nu există, sărind peste
DROP ROLE

Determinarea privilegiilor în timpul creării de roluri

Încercați din nou să creați rolul demo_role stabilindu-i drepturile de acces în avans. Drepturile pentru drepturi pot fi specificate imediat după extrasul principal de creare.

Sintaxa este:

CREAȚI ROLUL nume_rolu WITH optional_permissions;

Pentru ca utilizatorul asociat acestui rol să aibă privilegii de conectare, tastați:

CREAȚI ROLUL demo_role WITH LOGIN;
CREȘTE ROLUL

Verificați lista rolurilor existente și rețineți că acum ambele roluri au aceleași privilegii:

Pentru ca rolul să aibă drepturi de conectare fără argumentul de conectare, utilizați următoarea comandă în loc de CREATE ROLE:

CREAȚI UTILIZATOR;

Comanda CREATE USER diferă doar prin faptul că oferă automat privilegiile înregistrării.

Gestionarea drepturilor rolului PostgreSQL

Pentru a modifica permisiunile unui rol existent, folosiți comanda ALTER ROLE.

Sintaxa de bază este:

ALTER ROLE nume_rolu cu atribute_opțiuni;

De exemplu, încercați să readuceți rolurile demo_role la privilegiile originale:

ALTER ROLE demo_role CU NOLOGIN;
ALTER ROLE

\ du
Listă de roluri
Nume de roluri Atribute Membru al
-----------+------------------------------------------------+-----------
demo_role | Nu se poate conecta | <>
postgres | Superuser, Creare rol, Creare DB, Replicare | <>
test_user | | | <>

Acum demo_role nu are privilegii de conectare.

Puteți restabili privilegiile de conectare cu comanda:

ALTER ROLE demo_role CU LOGIN;

Schimbați utilizatorul PostgreSQL

În mod implicit, utilizatorii se pot conecta la nivel local doar dacă numele utilizatorului sistemului este același cu numele postului PostgreSQL.

Pentru a schimba acest tip de comportament, puteți schimba tipul de conectare sau puteți configura PostgreSQL pentru a asculta interfața locală (aceasta va schimba tipul de conexiune la una de la distanță).

Luați în considerare a doua opțiune.

În primul rând, trebuie să setați o parolă pentru utilizatorul a cărui sesiune doriți să o accesați.

Setați parola pentru test_user:

Comanda vă cere să introduceți și să confirmați parola. Apoi închideți interfața PostgreSQL și reveniți la sesiunea utilizatorului sistemului.

În mod implicit, PostgreSQL presupune că veți utiliza rolul, care este același nume pentru utilizatorul sistemului, pentru a vă conecta și că un astfel de rol va fi conectat la baza de date cu același nume.

Dar în acest caz nu este așa, deci trebuie să specificați în mod explicit opțiunile. Pentru aceasta, folosiți sintaxa:

psql -U nume_utilizator -d nume_bază-h 127.0.0.1 -W

Notă. În loc de user_name, specificați numele de utilizator cu care doriți să stabiliți o conexiune; în loc de database_name, specificați numele bazei de date la care doriți să vă conectați.

Instrucțiunea -h 127.0.0.1 indică faptul că trebuie să vă conectați la mașina locală prin intermediul interfeței de rețea. Acest lucru va permite autentificarea, chiar dacă numele de utilizator și numele rolurilor nu se potrivesc. Flagul -W înseamnă că atunci când intri în PostgreSQL, trebuie să introduci o parolă.

Pentru a deschide o sesiune test_user, tastați:

psql -U test_user -d postgres -h 127.0.0.1 -W
Parola pentru utilizator test_user:

Programul va cere parola setată anterior.

Notă. Această comandă va conecta utilizatorul la baza de date postgres, baza de date standard creată în timpul instalării.

Încercați să lucrați în această sesiune; după cum puteți vedea, acest utilizator are privilegii destul de înguste.

Reveniți la sesiunea de administrare:

\ q
sudo su - postgres
psql

Gestionarea privilegiilor PostgreSQL

Cum să transferați privilegii

Ca regulă, atunci când creează o bază de date sau un tabel, doar rolul care la creat are drepturi de acces la acesta. Dar acest comportament poate fi schimbat.

Puteți transfera permisiunile altor roluri utilizând comanda GRANT; sintaxa de bază este:

GRANT permission_type ON table_name TO name_name;

De exemplu, creați un tabel:

CREATE TABLE demo (
numele varchar (25),
id serial,
data start_date);
ANUNȚ: CREATE TABLE va crea o secvență implicită "demo_id_seq" pentru coloana de serie "demo.id"
CREATE TABLE

\ d
Lista relațiilor
Schema | Nume | Tip | proprietar
--------+-------------+----------+----------
public | demo | tabel | Postgres
public | demo_id_seq | secvență | Postgres
(2 rânduri)

Acum încearcă să treci niște permisiuni demo_root demo_role demo_role (permiteți-i să se actualizeze, UPDATE).

GRANT UPDATE pe demo TO demo_role;

Pentru a transfera toate drepturile asupra tabelului, utilizați instrucțiunea ALL:

GRANT ALL ON demo la test_user;

Pentru a transfera permisiunile tuturor utilizatorilor sistemului, specificați PUBLIC în locul numelui de utilizator:

GRANT INSERT ON demo PUBLIC;

\ z
Acces privilegii
Schema | Nume | Tip | Privilegii de acces Privilegii de acces la coloane
--------+-------------+----------+----------------------------+--------------------------
public | demo | tabel | postgres = arwdDxt / postgres +
| | | | | | demo_role = w / postgres +
| | | | | | test_user = arwdDxt / postgres + |
| | | | | | = a / postgres |
public | demo_id_seq | secvență | | |
(2 rânduri)

Cum să renunți la privilegii

Comanda REVOKE îndepărtează privilegiile.

REVOKE permission_type ON table_name FROM user_name;

Această comandă poate folosi și declarațiile publice și toate.

REVOKE INSERT ON demo DE LA PUBLIC;

PostgreSQL grupuri de roluri

PostgreSQL vă permite să grupați roluri, astfel încât rolurile să poată moșteni drepturi de acces predefinite.

De exemplu, puteți crea un rol temporar_user și adăugați roluri demo_role și test_user la acesta:

CREAȚI ROLUL temporary_users;
GRANT temporar_users TO demo_role;
GRANT temporal_users TO test_user;

Rolul grupului temporary_users este acum controlat de privilegiile rolurilor demo_role și test_user.

Comanda role role vă permite să selectați rolul grupului ale cărui drepturi doriți să le utilizați.

De exemplu, utilizatorul postgres actual are drepturi de superuser. Chiar dacă acest utilizator nu este membru al rolului temporary_users, el poate să-și folosească drepturile:

SET ROLE temporary_users;

Acum orice tabel creat va apartine rolului grupului temporary_users.

CREATE TABLE salut (
numele varchar (25),
id serial,
data start_date);

\ d
Lista relațiilor
Schema | Nume | Tip | proprietar
--------+--------------+----------+-----------------
public | demo | tabel | Postgres
public | demo_id_seq | secvență | Postgres
public | salut | tabel | temporary_users
public | hello_id_seq | secvență | temporary_users
(4 rânduri)

După cum puteți vedea, noul tabel aparține rolului temporary_users.

Pentru a readuce drepturile originale la rolul curent, tastați:

Pentru a acorda utilizatorului privilegiile tuturor rolurilor din care face parte, folosiți comanda:

ALTER ROLE test_user INHERIT;

Pentru a șterge un rol de grup (sau orice rol), utilizați:

ROL DROP temporar;
EROARE: rolul "temporary_users" nu poate fi abandonat deoarece unele obiecte depind de el
DETALIU: proprietar al mesei salut
proprietarul secvenței hello_id_seq

Această comandă va întoarce o eroare, deoarece rolul temporary_users aparține tabelului. În primul rând, trebuie să treci drepturile la tabelul unui alt rol:

ALTER TABLE salut PROPRIETAR la demo_role;

Acum, rolul mesei aparține rolului demo_role.

\ d
Lista relațiilor
Schema | Nume | Tip | proprietar
--------+--------------+----------+-----------
public | demo | tabel | Postgres
public | demo_id_seq | secvență | Postgres
public | salut | tabel | demo_role
public | hello_id_seq | secvență | demo_role
(4 rânduri)

După aceasta, puteți șterge rolul temporar_user:

ROL DROP temporar;

Aceasta va elimina rolul temporar_user; membrii acestui rol de grup nu vor fi șterși.

concluzie

Acum aveți abilități de bază în lucrul cu privilegiile PostgreSQL. Gestionarea drepturilor de acces este un aspect foarte important al colaborării cu datele; Aceasta permite fiecărei aplicații să utilizeze numai datele de care are nevoie, fără a interfera cu alte aplicații.

Articole similare