Natrag na blog

Kako koristiti uloge i upravljati dozvolama u PostgreSQL-u

Kako koristiti uloge i upravljati dozvolama u PostgreSQL-u

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:

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:

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:

Zatim pokrenite sljedeće za pregled uloga:

show roles manage permissions in PostgreSQL

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:

Da biste provjerili je li stvorena, pokrenite naredbu:

create role from prompt

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:

Možete stvoriti ulogu pod nazivom “test” sa sljedećom naredbom:

Nakon što izvršite gornju naredbu, prijavite se u psql i izlistajte uloge pomoću sljedećih naredbi:

creating user from commandline

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:

Možete obrisati demo ulogu koju smo ranije stvorili pomoću naredbe:

drop 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:

drop role fail

Ako želite da naredba ne javlja pogrešku kada uloga ne postoji, možete dodati ‘IF EXISTS’ u naredbu:

Možete ponovno pokušati obrisati ulogu ovom naredbom:

drop role if exists

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:

Da biste vidjeli opcije za ovo, možete otvoriti pomoć pomoću ove naredbe:

help create user

Ako želite stvoriti ulogu s dozvolama za prijavu, možete oblikovati naredbu ovako:

create role with login manage permissions in PostgreSQL

Kao što smo ranije vidjeli, ako želite stvoriti uloge s dopuštenjem za prijavu, možete koristiti i sljedeću naredbu:

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:

Na primjer, ako želite, možete promijeniti dopuštenja za prijavu uloge demo_role na ‘log in’ pomoću ove naredbe:

alter nologin

Kako biste korisniku ponovno omogućili prijavu, možete izmijeniti dopuštenja sljedećom naredbom:

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:

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:

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:

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:

postgresql login through network interface manage permissions in PostgreSQL

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:

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:

Možete stvoriti jednostavnu tablicu za izvršavanje naredbe:

Da biste vidjeli stvorenu tablicu, pokrenite naredbu:

create table manage permissions in PostgreSQL

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:

Možete dodijeliti sva dopuštenja ulozi navođenjem dopuštenja kao ‘ALL’:

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:

Možete pregledati sva dodijeljena dopuštenja pomoću sljedeće naredbe:

granted permissions

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:

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:

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:

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:

role - group manage permissions in PostgreSQL

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:

Sve tablice koje sada stvorite u vlasništvu su temporary_role:

Da biste provjerili vlasništvo nad tablicom, pokrenite sljedeću naredbu:

create table with temporary_role

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:

Ako želite da uloga ima sve privilegije uloge kojoj pripada, možete navesti svojstvo ‘inherit’ pomoću naredbe ‘alter role’:

S gornjom naredbom, ‘test_user’ je dobio sve privilegije uloga kojima pripada. Za brisanje uloge možete koristiti naredbu ‘drop role’:

drop role manage permissions in PostgreSQL

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:

Možete provjeriti da temporary_role sada nije vlasnik nijedne tablice pomoću sljedeće naredbe:

check ownerships

Sada možete obrisati ‘temporary_role’ jer više nema nikakvih ovisnosti:

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!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev je kreativni dizajner u CloudSigma, usredotočen na dosljedan poslovni identitet korištenjem tradicionalnih i inovativnih marketinških kanala. Vješt je u spajanju umjetničke vizije sa strateškim marketingom kako bi stvorio dojmljive brendirane priče.

Komentari

Još nema komentara. Budite prvi.