PostgreSQL je sustav za upravljanje bazama podataka (DBMS) otvorenog koda koji koristi SQL. To je vrlo moćan alat koji se koristi za upravljanje aplikacijama i smještaj web podataka na VPS-u. U ovom vodiču naučit ćete kako upravljati dozvolama u PostgreSQL-u. To će vam pomoći da ulogama svoje aplikacije dodijelite potrebne dozvole. Ovaj vodič ćemo izvesti koristeći PostgreSQL na Ubuntu 18.04 oblačnom poslužitelju na CloudSigma.
Instalacija PostgreSQL-a
Za preuzimanje i instalaciju PostgreSQL-a pokrenite sljedeće naredbe:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
Instalacijski program će stvoriti zadanog korisnika – “Postgres” pod kojim će raditi. Koristit ćemo ovog korisnika za veći dio ovog vodiča. Možete se prijaviti kao taj korisnik pomoću ove naredbe:
|
1 |
sudo su - postgres |
Sada kada je PostgreSQL instaliran, naučit ćete kako upravlja dozvolama. Također možete pratiti naš vodič o postavljanju PostgreSQL-a na Ubuntuu za detaljan vodič korak-po-korak kroz proces instalacije.
Koncepti dozvola u PostgreSQL-u
Postgres upravlja dozvolama putem koncepta “uloga”. S ulogama nema razlike između korisnika i grupa. Uloge su fleksibilnije od tradicionalnog Unix sustava korisnika i grupa. Na primjer, uloga može djelovati kao član druge uloge, nasljeđujući njezine dozvole.
Pregled uloga u PostgreSQL-u
Da biste pregledali uloge u PostgreSQL-u, najprije se morate prijaviti u naredbeni redak pomoću sljedeće naredbe:
|
1 |
psql |
Zatim pokrenite sljedeće za pregled uloga:
|
1 |
\du |

Za sada postoji samo jedna zadana uloga sa svim privilegijama.
Kako stvoriti uloge u PostgreSQL-u
Uloge za Postgres možete stvoriti iz naredbenog retka ili unutar Postgres ljuske. Možete isprobati sljedeća dva pristupa, nakon čega ćete vidjeti kako upravljati dozvolama i pristupima u PostgreSQL-u.
Kako stvoriti uloge unutar PostgreSQL-a
Najlakši način za stvaranje uloga je unutar naredbenog retka Postgresa. To možete učiniti sljedećom naredbom:
|
1 |
CREATE ROLE demo_role; |
Da biste provjerili je li stvorena, pokrenite naredbu:
|
1 |
\du |

To specificira da nova uloga nema dozvole za prijavu. Naučit ćete kako to promijeniti kasnije u vodiču.
Kako stvoriti uloge iz naredbenog retka
Alternativa gornjoj metodi je stvaranje korisnika iz naredbenog retka. Za izlazak iz PostgreSQL naredbenog retka upišite sljedeće:
|
1 |
\q |
Možete stvoriti ulogu pod nazivom “test” sa sljedećom naredbom:
|
1 |
createuser test |
Nakon što izvršite gornju naredbu, prijavite se u psql i izlistajte uloge pomoću sljedećih naredbi:
|
1 2 |
psql \du |

Možete primijetiti da korisnik stvoren na ovaj način nema iste atribute.
Kako obrisati uloge u PostgreSQL-u
Uloge u PostgreSQL-u možete jednostavno obrisati pomoću sljedeće sintakse:
|
1 |
DROP ROLE role_name; |
Možete obrisati demo ulogu koju smo ranije stvorili pomoću naredbe:
|
1 |
DROP ROLE demo_role; |

Ako pokušamo ukloniti ulogu koja ne postoji, to će samo izazvati pogrešku. Da biste to vidjeli, možete pokušati ponovno ukloniti istu ulogu:
|
1 |
DROP ROLE demo_role; |

Ako želite da naredba ne javlja pogrešku kada uloga ne postoji, možete dodati ‘IF EXISTS’ u naredbu:
|
1 |
DROP ROLE IF EXISTS role_name; |
Možete ponovno pokušati obrisati ulogu ovom naredbom:
|
1 |
DROP ROLE IF EXISTS demo_role; |
Kako definirati privilegije pri stvaranju uloge
Do sada ste stvarali i brisali uloge. U ovom odjeljku stvorit ćete uloge s izmijenjenim dozvolama. To možete učiniti navođenjem dozvola za ulogu pomoću naredbe create:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Da biste vidjeli opcije za ovo, možete otvoriti pomoć pomoću ove naredbe:
|
1 |
\h CREATE ROLE |

Ako želite stvoriti ulogu s dozvolama za prijavu, možete oblikovati naredbu ovako:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

Kao što smo ranije vidjeli, ako želite stvoriti uloge s dopuštenjem za prijavu, možete koristiti i sljedeću naredbu:
|
1 |
CREATE USER role_name; |
Jedina razlika između te dvije naredbe je u tome što ‘CREATE USER’ prema zadanim postavkama daje dopuštenje za prijavu ulozi.
Kako promijeniti privilegije uloga u PostgreSQL-u
Do sada ste isprobali kako dati dopuštenja prilikom stvaranja korisnika. U ovom odjeljku izmijenit ćete dopuštenja već stvorenih korisnika. Sintaksa za naredbu alter je:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
Na primjer, ako želite, možete promijeniti dopuštenja za prijavu uloge demo_role na ‘log in’ pomoću ove naredbe:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Kako biste korisniku ponovno omogućili prijavu, možete izmijeniti dopuštenja sljedećom naredbom:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
Kako se prijaviti kao drugi korisnik u PostgreSQL-u
PostgreSQL vam prema zadanim postavkama dopušta prijavu samo lokalno ako se vaše korisničko ime podudara s korisničkim imenom sustava. Kako biste to zaobišli, možete promijeniti vrstu prijave ili konfigurirati PostgreSQL da koristi mrežno sučelje povratne petlje. Ovo sučelje bi promijenilo vrstu veze u udaljenu, čak i ako je veza lokalna.
U ovom odjeljku isprobat ćete drugu opciju. Za početak možete postaviti lozinku korisnika kako bi autentifikacija bila moguća.
Postavite lozinku za ‘demo_user’ pomoću sljedeće naredbe:
|
1 |
\password test |
Kada se to od vas zatraži, unesite i potvrdite lozinku. Kada završite, možete izaći iz PostgreSQL sučelja i vratiti se na svog uobičajenog korisnika stroja:
|
1 2 |
\q exit |
PostgreSQL zahtijeva da se prijavite s korisničkim imenom koje se podudara s korisničkim imenom vašeg operacijskog sustava i također da se povežete s bazom podataka s istim korisničkim imenom. Budući da to ne činite u ovom slučaju, morat ćete eksplicitno navesti opcije koje želite koristiti. Možete koristiti sljedeću sintaksu:
|
1 |
psql -U <span class="highlight">korisnik</span> -d <span class="highlight">baza</span> -h 127.0.0.1 -W |
korisnik: Korisničko ime s kojim se želite povezati
DB: Postojeća baza podataka kojoj imate pristup
-h 127.0.0.1: Specificira PostgreSQL-u da ćete se povezivati putem mrežnog sučelja na lokalno računalo. Ova nam opcija omogućuje autentifikaciju iako se korisničko ime ne podudara s korisničkim imenom sustava.
-W: Označava PostgreSQL-u da ćete unijeti lozinku
Kako bismo se prijavili s našim “test_user,” možemo izdati sljedeću naredbu:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

Nakon što unesete lozinku, bit ćete prijavljeni u ljusku. U našem primjeru koristimo bazu podataka ‘postgres,’ zadanu bazu podataka koja se automatski postavlja tijekom instalacije.
U ovoj sesiji, ovisno o korisniku kojeg ste odabrali za prijavu, suočit ćete se s problemom da nemate odgovarajuća dopuštenja za obavljanje raznih radnji. Razlog za ovaj problem je taj što korisniku još niste dali dovoljna dopuštenja za administriranje.
U sljedećem odjeljku dodijelit ćete potrebna dopuštenja korisnicima. Prvo ćete morati vratiti korisnika na administrativnog:
|
1 2 3 |
\q sudo su - postgres psql |
Upravljanje dopuštenjima u PostgreSQL-u: Kako dodijeliti dopuštenja u PostgreSQL-u
U PostgreSQL-u, ako je bazu podataka ili tablicu stvorila određena uloga, samo ta uloga ima dopuštenja za njezinu izmjenu. Iznimka od ovoga bile bi uloge koje imaju superkorisnička dopuštenja. U ovom odjeljku dodijelit ćete dopuštenja drugim ulogama. Možete dodijeliti dopuštenja drugim ulogama pomoću izjave ‘GRANT’. Sintaksa je:
|
1 |
GRANT permission_type ON table_name TO role_name; |
Možete stvoriti jednostavnu tablicu za izvršavanje naredbe:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Da biste vidjeli stvorenu tablicu, pokrenite naredbu:
|
1 |
\d |

Sada kada imate demo tablicu, možete dodijeliti privilegije na tablici ‘demo’ ulozi ‘demo_role.’ Možete dati ulozi privilegiju ‘UPDATE’ pomoću ove naredbe:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Možete dodijeliti sva dopuštenja ulozi navođenjem dopuštenja kao ‘ALL’:
|
1 |
GRANT ALL ON demo TO demo_role; |
Ako želite dodijeliti određeno dopuštenje svim ulogama u sustavu, možete upotrijebiti ključnu riječ ‘public’ umjesto uloge, kao u sljedećoj naredbi:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Možete pregledati sva dodijeljena dopuštenja pomoću sljedeće naredbe:
|
1 |
\z |
Upravljanje dopuštenjima u PostgreSQL-u: Kako ukloniti dopuštenja u PostgreSQL-u
Možete jednostavno ukloniti dopuštenja uloge pomoću naredbe ‘REVOKE’. Vrlo je slična naredbi grant:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
Kao i kod GRANT, možemo koristiti ključne riječi – ‘ALL’ i ‘PUBLIC’ za dodjelu svih dopuštenja ili dodjelu dopuštenja svim ulogama:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
Kako koristiti grupne uloge u PostgreSQL-u
Za omogućavanje široke kontrole dopuštenja, uloge su dovoljno fleksibilne da dopuste grupiranje s drugim ulogama. Na primjer, možete stvoriti ulogu – ‘temporary_role’ i zatim dodati ‘demo_role’ i ‘test_user’ toj ulozi:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO test_user; |
Sada možete upravljati dopuštenjima ovih dviju uloga samo upravljanjem dopuštenjima uloge ‘temporary_role’. To omogućuje lakše upravljanje dopuštenjima. Informacije o članstvu u ulogama možete vidjeti pomoću ove naredbe:
|
1 |
\du |

Bilo koji član grupe može djelovati kao grupa pomoću naredbe ‘set role’. Budući da je korisnik ‘postgres’ superkorisnik, možete koristiti ‘set role’ čak i ako niste član grupe:
|
1 |
SET ROLE temporary_role; |
Sve tablice koje sada stvorite u vlasništvu su temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Da biste provjerili vlasništvo nad tablicom, pokrenite sljedeću naredbu:
|
1 |
\d |

Možete vidjeti da je uloga ‘temporary_role’ vlasnik nove tablice i sekvence povezane sa serijskim tipom podataka. Za povratak na izvorna dopuštenja uloge, pokrenite sljedeću naredbu:
|
1 |
RESET ROLE; |
Ako želite da uloga ima sve privilegije uloge kojoj pripada, možete navesti svojstvo ‘inherit’ pomoću naredbe ‘alter role’:
|
1 |
ALTER ROLE test_user INHERIT; |
S gornjom naredbom, ‘test_user’ je dobio sve privilegije uloga kojima pripada. Za brisanje uloge možete koristiti naredbu ‘drop role’:
|
1 |
DROP ROLE temporary_users; |

Gornja naredba javlja pogrešku jer imamo neke objekte, poput tablice ‘hello,’ koji ovise o njoj. Da biste je izbrisali, možete prenijeti vlasništvo nad tablicom na drugu ulogu:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Možete provjeriti da temporary_role sada nije vlasnik nijedne tablice pomoću sljedeće naredbe:
|
1 |
\d |

Sada možete obrisati ‘temporary_role’ jer više nema nikakvih ovisnosti:
|
1 |
DROP ROLE temporary_users; |
Iako će gornja naredba ukloniti ulogu temporary_users, bivši članovi te grupe uloga nisu uklonjeni.
Zaključak
Završili ste vodič i sada znate kako upravljati dozvolama u PostgreSQL-u. Možete jednostavno administrirati dozvole. Poznavanje upravljanja dozvolama osigurava da vaše aplikacije imaju pristup potrebnim bazama podataka, dok nemaju pristup nijednoj drugoj bazi podataka koju koristi neka druga aplikacija.
Sretno s radom!


Komentari
Još nema komentara. Budite prvi.