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:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
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:
|
1 |
sudo su - postgres |
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:
|
1 |
psql |
Potom spustite nasledujúci príkaz na zobrazenie rolí:
|
1 |
\du |

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:
|
1 |
CREATE ROLE demo_role; |
Ak chcete skontrolovať, či bola vytvorená, spustite príkaz:
|
1 |
\du |

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:
|
1 |
\q |
Pomocou nasledujúceho príkazu môžete vytvoriť rolu s názvom “test”:
|
1 |
createuser test |
Po vykonaní vyššie uvedeného príkazu sa prihláste do psql a vypíšte role pomocou nasledujúcich príkazov:
|
1 2 |
psql \du |

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:
|
1 |
DROP ROLE role_name; |
Demo rolu, ktorú sme vytvorili predtým, môžete odstrániť pomocou príkazu:
|
1 |
DROP ROLE demo_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:
|
1 |
DROP ROLE demo_role; |

Ak chcete, aby príkaz nevyhodil chybu, keď rola neexistuje, môžete do príkazu pridať ‘IF EXISTS’:
|
1 |
DROP ROLE IF EXISTS role_name; |
Môžete sa znova pokúsiť o odstránenie role pomocou tohto príkazu:
|
1 |
DROP ROLE IF EXISTS demo_role; |
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:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Ak chcete zobraziť možnosti pre toto, môžete otvoriť nápovedu pomocou tohto príkazu:
|
1 |
\h CREATE ROLE |

Ak chcete vytvoriť rolu s prihlasovacími oprávneniami, môžete príkaz zostaviť takto:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

Ako sme videli predtým, ak chcete vytvoriť roly s povolením na prihlásenie, môžete použiť aj nasledujúci príkaz:
|
1 |
CREATE USER role_name; |
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:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
Napríklad, ak chcete, môžete zmeniť prihlasovacie povolenia pre demo_role na ‘prihlásenie’ pomocou tohto príkazu:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Ak chcete používateľovi znova povoliť prihlásenie, môžete zmeniť povolenia pomocou nasledujúceho príkazu:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
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:
|
1 |
\password test |
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:
|
1 2 |
\q exit |
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:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
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:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

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:
|
1 2 3 |
\q sudo su - postgres psql |
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:
|
1 |
GRANT permission_type ON table_name TO role_name; |
Môžete vytvoriť jednoduchú tabuľku na vykonanie príkazu:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Ak chcete zobraziť vytvorenú tabuľku, spustite príkaz:
|
1 |
\d |

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:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Všetky oprávnenia môžete role udeliť tak, že oprávnenie špecifikujete ako ‘ALL’:
|
1 |
GRANT ALL ON demo TO demo_role; |
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:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Všetky udelené oprávnenia si môžete zobraziť pomocou nasledujúceho príkazu:
|
1 |
\z |
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:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
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:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
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’:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO 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:
|
1 |
\du |

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:
|
1 |
SET ROLE temporary_role; |
Všetky tabuľky, ktoré teraz vytvoríte, bude vlastniť temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Ak chcete skontrolovať vlastníctvo tabuľky, spustite nasledujúci príkaz:
|
1 |
\d |

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:
|
1 |
RESET ROLE; |
Ak chcete, aby rola mala všetky privilégiá roly, do ktorej patrí, môžete zadať vlastnosť ‘inherit’ pomocou príkazu ‘alter role’:
|
1 |
ALTER ROLE test_user INHERIT; |
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’:
|
1 |
DROP ROLE temporary_users; |

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:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Pomocou nasledujúceho príkazu môžete skontrolovať, že temporary_role teraz nevlastní žiadne tabuľky:
|
1 |
\d |

Teraz môžete rolu ‘temporary_role’ odstrániť, pretože už nemá žiadne závislosti:
|
1 |
DROP ROLE temporary_users; |
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!


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