Späť na blog

Ako používať roly a spravovať oprávnenia v PostgreSQL

Ako používať roly a spravovať oprávnenia v PostgreSQL

PostgreSQL je open-source DBMS, ktorý zasa využíva SQL. Je to veľmi výkonný nástroj, ktorý sa používa na správu aplikácií a hostovanie webových dát na VPS. V tomto návode sa naučíte, ako spravovať oprávnenia v PostgreSQL. Pomôže vám to poskytnúť rolám vašej aplikácie požadované oprávnenia. Tento návod budeme vykonávať pomocou PostgreSQL na Ubuntu 18.04 cloudový server na CloudSigma.

Inštalácia PostgreSQL

Ak chcete stiahnuť a nainštalovať PostgreSQL, spustite nasledujúce príkazy:

Inštalátor vytvorí predvoleného používateľa – “Postgres”, pod ktorým bude pracovať. Tohto používateľa budeme používať počas väčšiny tohto návodu. K tomuto používateľovi sa môžete prihlásiť pomocou tohto príkazu:

Teraz, keď je PostgreSQL nainštalovaný, sa dozviete, ako narába s oprávneniami. Môžete tiež sledovať náš návod na nastavenie PostgreSQL na Ubuntu pre podrobného sprievodcu procesom inštalácie krok za krokom.

Koncepty oprávnení v PostgreSQL

Postgres spravuje oprávnenia prostredníctvom konceptu “rolí.” Pri roliach neexistuje rozdiel medzi používateľmi a skupinami. Role sú flexibilnejšie ako tradičný unixový systém používateľov a skupín. Napríklad rola môže vystupovať ako člen inej role a dediť jej oprávnenia.

Zobrazenie rolí v PostgreSQL

Ak chcete zobraziť role v PostgreSQL, musíte sa najprv prihlásiť do príkazového riadku pomocou nasledujúceho príkazu:

Potom spustite nasledujúci príkaz na zobrazenie rolí:

show roles manage permissions in PostgreSQL

Aktuálne existuje iba jedna predvolená rola so všetkými privilégiami.

Ako vytvoriť role v PostgreSQL

Role pre Postgres môžete vytvoriť buď z príkazového riadku, alebo priamo z prostredia Postgres. Môžete vyskúšať nasledujúce dva prístupy, po ktorých uvidíte, ako spravovať oprávnenia a prístupy v PostgreSQL.

Ako vytvoriť role priamo z PostgreSQL

Najjednoduchší spôsob, ako vytvoriť role, je priamo z príkazového riadku Postgresu. Môžete tak urobiť pomocou nasledujúceho príkazu:

Ak chcete skontrolovať, či bola vytvorená, spustite príkaz:

create role from prompt

To špecifikuje, že nová rola nemá žiadne prihlasovacie oprávnenia. Ako to zmeniť, sa dozviete neskôr v tomto návode.

Ako vytvoriť role z príkazového riadku

Alternatívou k vyššie uvedenej metóde je vytvorenie používateľa z príkazového riadku. Ak chcete ukončiť príkazový riadok PostgreSQL, zadajte nasledujúce:

Pomocou nasledujúceho príkazu môžete vytvoriť rolu s názvom “test”:

Po vykonaní vyššie uvedeného príkazu sa prihláste do psql a vypíšte role pomocou nasledujúcich príkazov:

creating user from commandline

Môžete si všimnúť, že používateľ vytvorený týmto spôsobom nemá rovnaké atribúty.

Ako odstrániť role v PostgreSQL

Role v PostgreSQL môžete jednoducho odstrániť pomocou nasledujúcej syntaxe:

Demo rolu, ktorú sme vytvorili predtým, môžete odstrániť pomocou príkazu:

drop role

Ak sa pokúsime odstrániť rolu, ktorá neexistuje, jednoducho to vyhodí chybu. Aby ste to videli, môžete sa pokúsiť odstrániť rovnakú rolu znova:

drop role fail

Ak chcete, aby príkaz nevyhodil chybu, keď rola neexistuje, môžete do príkazu pridať ‘IF EXISTS’:

Môžete sa znova pokúsiť o odstránenie role pomocou tohto príkazu:

drop role if exists

Ako definovať privilégiá pri vytváraní role

Doteraz ste role vytvárali a odstraňovali. V tejto časti vytvoríte role so zmenenými oprávneniami. Môžete tak urobiť špecifikovaním oprávnení pre rolu pomocou príkazu create:

Ak chcete zobraziť možnosti pre toto, môžete otvoriť nápovedu pomocou tohto príkazu:

help create user

Ak chcete vytvoriť rolu s prihlasovacími oprávneniami, môžete príkaz zostaviť takto:

create role with login manage permissions in PostgreSQL

Ako sme videli predtým, ak chcete vytvoriť roly s povolením na prihlásenie, môžete použiť aj nasledujúci príkaz:

Jediný rozdiel medzi týmito dvoma príkazmi je ten, že ‘CREATE USER’ predvolene udeľuje role povolenie na prihlásenie.

Ako zmeniť privilégiá rolí v PostgreSQL

Doteraz ste si vyskúšali, ako udeliť povolenia pri vytváraní používateľa. V tejto časti zmeníte povolenia už vytvorených používateľov. Syntaxia pre príkaz alter je:

Napríklad, ak chcete, môžete zmeniť prihlasovacie povolenia pre demo_role na ‘prihlásenie’ pomocou tohto príkazu:

alter nologin

Ak chcete používateľovi znova povoliť prihlásenie, môžete zmeniť povolenia pomocou nasledujúceho príkazu:

Ako sa prihlásiť ako iný používateľ v PostgreSQL

PostgreSQL vám predvolene umožňuje prihlásiť sa iba lokálne, ak sa vaše používateľské meno zhoduje so systémovým používateľským menom. Aby ste to obišli, môžete buď zmeniť typ prihlásenia, alebo nakonfigurovať PostgreSQL na používanie sieťového rozhrania loopback. Toto rozhranie by zmenilo typ pripojenia na vzdialené, aj keď je pripojenie lokálne.

V tejto časti vyskúšate druhú možnosť. Na začiatok môžete nastaviť heslo používateľa, aby bola možná autentifikácia.

Nastavte heslo pre ‘demo_user’ pomocou nasledujúceho príkazu:

Po zobrazení výzvy zadajte a potvrďte heslo. Po dokončení môžete ukončiť rozhranie PostgreSQL a vrátiť sa k svojmu bežnému používateľovi počítača:

PostgreSQL vyžaduje, aby ste sa prihlásili s používateľským menom, ktoré sa zhoduje s používateľským menom vášho operačného systému, a tiež aby ste sa pripojili k databáze s rovnakým používateľským menom. Keďže v tomto prípade to nerobíte, budete musieť explicitne špecifikovať možnosti, ktoré chcete použiť. Môžete použiť nasledujúcu syntax:

user: Používateľské meno, s ktorým sa chcete pripojiť
DB: Existujúca databáza, ku ktorej máte prístup
-h 127.0.0.1: Určuje pre PostgreSQL, že sa budete pripájať cez sieťové rozhranie k lokálnemu počítaču. Táto možnosť nám umožňuje autentifikáciu, aj keď sa používateľské meno nezhoduje so systémovým používateľským menom.
-W: Indikuje pre PostgreSQL, že zadáte heslo

Na prihlásenie s naším “test_user” môžeme použiť nasledujúci príkaz:

postgresql login through network interface manage permissions in PostgreSQL

Po zadaní hesla budete prihlásení do shellu. V našom príklade používame databázu ‘postgres’, predvolenú databázu automaticky nastavenú počas inštalácie.

V tejto relácii budete na základe používateľa, ktorého ste vybrali na prihlásenie, čeliť problému, že nemáte správne povolenia na vykonávanie rôznych akcií. Dôvodom tohto problému je, že ste používateľovi doteraz neudelili dostatočné povolenia na správu vecí.

V nasledujúcej časti udelíte používateľom požadované povolenia. Najprv budete musieť zmeniť používateľa späť na administrátorského:

Správa povolení v PostgreSQL: Ako udeliť povolenia v PostgreSQL

V PostgreSQL platí, že ak databázu alebo tabuľku vytvorí konkrétna rola, iba táto rola má povolenia na jej úpravu. Výnimkou by boli roly, ktoré majú povolenia superpoužívateľa (superuser). V tejto časti udelíte povolenia iným rolám. Povolenia iným rolám môžete udeliť pomocou príkazu ‘GRANT’. Syntaxia je:

Môžete vytvoriť jednoduchú tabuľku na vykonanie príkazu:

Ak chcete zobraziť vytvorenú tabuľku, spustite príkaz:

create table manage permissions in PostgreSQL

Teraz, keď máte tabuľku demo, môžete udeliť oprávnenia pre tabuľku ‘demo’ role ‘demo_role.’ Role môžete udeliť oprávnenie ‘UPDATE’ pomocou tohto príkazu:

Všetky oprávnenia môžete role udeliť tak, že oprávnenie špecifikujete ako ‘ALL’:

Ak chcete udeliť konkrétne oprávnenie všetkým rolám v systéme, môžete namiesto roly použiť kľúčové slovo ‘public’, ako v nasledujúcom príkaze:

Všetky udelené oprávnenia si môžete zobraziť pomocou nasledujúceho príkazu:

granted permissions

Správa oprávnení v PostgreSQL: Ako odobrať oprávnenia v PostgreSQL

Oprávnenia roly môžete jednoducho odobrať pomocou príkazu ‘REVOKE’. Je to veľmi podobné príkazu grant:

Podobne ako pri príkaze GRANT, môžeme použiť kľúčové slová – ‘ALL’ a ‘PUBLIC’ na udelenie všetkých oprávnení alebo udelenie oprávnení všetkým rolám:

Ako používať skupinové roly v PostgreSQL

Na umožnenie rozsiahlej kontroly oprávnení sú roly dostatočne flexibilné, aby umožňovali zoskupovanie s inými rolami. Môžete napríklad vytvoriť rolu – ‘temporary_role’ a potom do tejto roly pridať ‘demo_role’ a ‘test_user’:

Teraz môžete spravovať oprávnenia týchto dvoch rolí jednoducho spravovaním oprávnení roly ‘temporary_role’. To umožňuje jednoduchšiu správu oprávnení. Informácie o členstve v rolách môžete zobraziť pomocou tohto príkazu:

role - group manage permissions in PostgreSQL

Ktorýkoľvek člen skupiny môže vystupovať ako skupina pomocou príkazu ‘set role’. Keže používateľ ‘postgres’ je superpoužívateľ, môžete použiť ‘set role’, aj keď nie ste členom skupiny:

Všetky tabuľky, ktoré teraz vytvoríte, bude vlastniť temporary_role:

Ak chcete skontrolovať vlastníctvo tabuľky, spustite nasledujúci príkaz:

create table with temporary_role

Môžete vidieť, že rola ‘temporary_role’ vlastní novú tabuľku a sekvenciu spojenú s dátovým typom serial. Ak sa chcete vrátiť k pôvodným oprávneniam roly, spustite nasledujúci príkaz:

Ak chcete, aby rola mala všetky privilégiá roly, do ktorej patrí, môžete zadať vlastnosť ‘inherit’ pomocou príkazu ‘alter role’:

Pomocou vyššie uvedeného príkazu získal používateľ ‘test_user’ všetky privilégiá rolí, do ktorých patrí. Na odstránenie roly môžete použiť príkaz ‘drop role’:

drop role manage permissions in PostgreSQL

Vyššie uvedený príkaz vyhodí chybu, pretože máme nejaké objekty, ako napríklad tabuľku ‘hello,’ ktoré od nej závisia. Ak ju chcete odstrániť, môžete previesť vlastníctvo tabuľky na inú rolu:

Pomocou nasledujúceho príkazu môžete skontrolovať, že temporary_role teraz nevlastní žiadne tabuľky:

check ownerships

Teraz môžete rolu ‘temporary_role’ odstrániť, pretože už nemá žiadne závislosti:

Aj keď vyššie uvedený príkaz odstráni rolu temporary_users, bývalí členovia tejto skupiny rolí nebudú odstránení.

Záver

Dokončili ste návod a teraz už viete, ako spravovať oprávnenia v PostgreSQL. Oprávnenia môžete jednoducho spravovať. Znalosť správy oprávnení zabezpečuje, že vaše aplikácie majú prístup k požadovaným databázam a zároveň nemajú prístup k žiadnej inej databáze, ktorú používa iná aplikácia.

Príjemnú prácu s počítačom!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev je kreatívny dizajnér v spoločnosti CloudSigma, ktorý sa zameriava na konzistentnú firemnú identitu prostredníctvom tradičných a inovatívnych marketingových kanálov. Dokáže brilantne spájať umeleckú víziu so strategickým marketingom, čím vytvára pôsobivé príbehy značky.

Komentáre

Zatiaľ žiadne komentáre. Buďte prvý.