Zpět na blog

Jak používat role a spravovat oprávnění v PostgreSQL

Jak používat role a spravovat oprávnění v PostgreSQL

PostgreSQL je open-source DBMS, který využívá SQL. Je to velmi výkonný nástroj, který se používá ke správě aplikací a hostování webových dat na VPS. V tomto návodu se naučíte, jak spravovat oprávnění v PostgreSQL. Pomůže vám to poskytnout rolím vaší aplikace požadovaná oprávnění. Tento návod budeme provádět s využitím PostgreSQL na Ubuntu 18.04 cloudovém serveru na CloudSigma.

Instalace PostgreSQL

Chcete-li stáhnout a nainstalovat PostgreSQL, spusťte následující příkazy:

Instalátor vytvoří výchozího uživatele – “Postgres”, pod kterým bude pracovat. Tohoto uživatele budeme používat po většinu tohoto návodu. K tomuto uživateli se můžete přihlásit pomocí tohoto příkazu:

Nyní, když je PostgreSQL nainstalován, se dozvíte, jak zpracovává oprávnění. Můžete také sledovat náš návod na nastavení PostgreSQL na Ubuntu pro podrobný návod k instalaci krok za krokem.

Koncepty oprávnění v PostgreSQL

Postgres spravuje oprávnění prostřednictvím konceptu “rolí”. U rolí neexistuje žádný rozdíl mezi uživateli a skupinami. Role jsou flexibilnější než tradiční unixový systém uživatelů a skupin. Role může například vystupovat jako člen jiné role a dědit její oprávnění.

Zobrazení rolí v PostgreSQL

Chcete-li zobrazit role v PostgreSQL, musíte se nejprve přihlásit do příkazové řádky pomocí následujícího příkazu:

Poté spusťte následující příkaz pro zobrazení rolí:

show roles manage permissions in PostgreSQL

V současné době existuje pouze jedna výchozí role se všemi oprávněními.

Jak vytvořit role v PostgreSQL

Role pro Postgres můžete vytvářet buď z příkazové řádky, nebo přímo z prostředí Postgres. Můžete vyzkoušet následující dva přístupy, po kterých uvidíte, jak spravovat oprávnění a přístupy v PostgreSQL.

Jak vytvořit role přímo v PostgreSQL

Nejjednodušší způsob, jak vytvořit role, je přímo z příkazové řádky Postgresu. Můžete tak učinit pomocí následujícího příkazu:

Chcete-li zkontrolovat, zda byla vytvořena, spusťte příkaz:

create role from prompt

To znamená, že nová role nemá žádná přihlašovací oprávnění. Jak to změnit, se dozvíte později v tomto návodu.

Jak vytvořit role z příkazové řádky

Alternativou k výše uvedené metodě je vytvoření uživatele z příkazové řádky. Chcete-li ukončit příkazovou řádku PostgreSQL, zadejte následující:

Pomocí následujícího příkazu můžete vytvořit roli s názvem “test”:

Jakmile provedete výše uvedený příkaz, přihlaste se do psql a vypište role pomocí následujících příkazů:

creating user from commandline

Můžete si všimnout, že uživatel vytvořený tímto způsobem nemá stejné atributy.

Jak smazat role v PostgreSQL

Role v PostgreSQL můžete snadno smazat pomocí následující syntaxe:

Demo roli, kterou jsme vytvořili dříve, můžete smazat pomocí příkazu:

drop role

Pokud se pokusíme odstranit roli, která neexistuje, vyvolá to chybu. Chcete-li to vidět, můžete se pokusit odstranit stejnou roli znovu:

drop role fail

Pokud chcete, aby příkaz nevyhazoval chybu, když role neexistuje, můžete do příkazu přidat ‘IF EXISTS’:

Můžete zkusit smazat roli znovu pomocí tohoto příkazu:

drop role if exists

Jak definovat oprávnění při vytváření role

Dosud jste role vytvářeli a odstraňovali. V této části vytvoříte role se změněnými oprávněními. Můžete tak učinit specifikováním oprávnění pro roli pomocí příkazu create:

Chcete-li zobrazit možnosti pro tento příkaz, můžete otevřít nápovědu pomocí tohoto příkazu:

help create user

If you want to create a role with login permissions, you can form the command like this:

create role with login manage permissions in PostgreSQL

Jak jsme viděli dříve, pokud chcete vytvořit role s oprávněním k přihlášení, můžete také použít následující příkaz:

Jediný rozdíl mezi těmito dvěma příkazy je ten, že ‘CREATE USER’ dává roli oprávnění k přihlášení ve výchozím nastavení.

Jak změnit oprávnění rolí v PostgreSQL

Doposud jste si vyzkoušeli, jak udělit oprávnění při vytváření uživatele. V této části změníte oprávnění již vytvořených uživatelů. Syntaxe pro příkaz alter je:

Pokud například chcete, můžete změnit přihlašovací oprávnění role demo_role na ‘přihlášení’ pomocí tohoto příkazu:

alter nologin

Chcete-li uživateli znovu povolit přihlášení, můžete změnit oprávnění pomocí následujícího příkazu:

Jak se přihlásit jako jiný uživatel v PostgreSQL

PostgreSQL vám ve výchozím nastavení umožňuje přihlásit se pouze lokálně, pokud se vaše uživatelské jméno shoduje se systémovým uživatelským jménem. Chcete-li to obejít, můžete buď změnit typ přihlášení, nebo nakonfigurovat PostgreSQL tak, aby používal síťové rozhraní loopback. Toto rozhraní by změnilo typ připojení na vzdálené, i když je připojení lokální.

V této části vyzkoušíte druhou možnost. Pro začátek můžete nastavit heslo uživatele, aby bylo možné provést ověření.

Nastavte heslo pro ‘demo_user’ pomocí následujícího příkazu:

Po zobrazení výzvy zadejte a potvrďte heslo. Jakmile budete hotovi, můžete ukončit rozhraní PostgreSQL a vrátit se k běžnému uživateli vašeho počítače:

PostgreSQL vyžaduje, abyste se přihlásili pod uživatelským jménem, které se shoduje s uživatelským jménem vašeho operačního systému, a také abyste se připojili k databázi se stejným uživatelským jménem. Vzhledem k tomu, že v tomto případě tak nečiníte, budete muset explicitně specifikovat možnosti, které chcete použít. Můžete použít následující syntaxi:

user: Uživatelské jméno, pod kterým se chcete připojit
DB: Existující databáze, ke které máte přístup
-h 127.0.0.1: Určuje PostgreSQL, že se budete připojovat přes síťové rozhraní k lokálnímu počítači. Tato možnost nám umožňuje autentizaci, i když se uživatelské jméno neshoduje se systémovým uživatelským jménem.
-W: Indikuje PostgreSQL, že zadáte heslo

Chcete-li se přihlásit pod naším “test_user,” můžeme zadat následující příkaz:

postgresql login through network interface manage permissions in PostgreSQL

Jakmile zadáte heslo, budete přihlášeni do shellu. V našem příkladu používáme databázi ‘postgres,’ což je výchozí databáze automaticky nastavená během instalace.

V této relaci se v závislosti na uživateli, kterého jste vybrali k přihlášení, setkáte s problémem, že nemáte správná oprávnění k provádění různých akcí. Důvodem tohoto problému je, že jste uživateli dosud neudělili dostatečná oprávnění ke správě věcí.

V další části udělíte uživatelům požadovaná oprávnění. Nejprve budete muset změnit uživatele zpět na administrátorského:

Správa oprávnění v PostgreSQL: Jak udělit oprávnění v PostgreSQL

Pokud je v PostgreSQL databáze nebo tabulka vytvořena konkrétní rolí, má oprávnění k její úpravě pouze tato role. Výjimkou by byly role, které mají oprávnění superuživatele. V této části udělíte oprávnění ostatním rolím. Oprávnění ostatním rolím můžete udělit pomocí příkazu ‘GRANT’. Syntaxe je:

Můžete vytvořit jednoduchou tabulku pro provedení příkazu:

Chcete-li zobrazit vytvořenou tabulku, spusťte příkaz:

create table manage permissions in PostgreSQL

Nyní, když máte tabulku demo, můžete udělit oprávnění k tabulce ‘demo’ roli ‘demo_role.’ Roli můžete udělit oprávnění ‘UPDATE’ pomocí tohoto příkazu:

Všechna oprávnění můžete roli udělit zadáním oprávnění jako ‘ALL’:

Pokud chcete udělit konkrétní oprávnění všem rolím v systému, můžete místo role použít klíčové slovo ‘public’, jako v následujícím příkazu:

Všechna udělená oprávnění si můžete zobrazit pomocí následujícího příkazu:

granted permissions

Správa oprávnění v PostgreSQL: Jak odebrat oprávnění v PostgreSQL

Oprávnění role můžete snadno odebrat pomocí příkazu ‘REVOKE’. Je to velmi podobné příkazu grant:

Stejně jako u GRANT můžeme použít klíčová slova – ‘ALL’ a ‘PUBLIC’ k udělení všech oprávnění nebo udělení oprávnění všem rolím:

Jak používat skupinové role v PostgreSQL

Pro umožnění rozsáhlé kontroly oprávnění jsou role dostatečně flexibilní, aby umožňovaly seskupování s jinými rolemi. Můžete například vytvořit roli – ‘temporary_role’ a poté k této roli přidat ‘demo_role’ a ‘test_user’:

Nyní můžete spravovat oprávnění těchto dvou rolí pouhou správou oprávnění role ‘temporary_role’. To umožňuje snazší správu oprávnění. Informace o členství v rolích můžete zobrazit pomocí tohoto příkazu:

role - group manage permissions in PostgreSQL

Jakýkoli člen skupiny může vystupovat jako skupina pomocí příkazu ‘set role’. Vzhledem k tomu, že uživatel ‘postgres’ je superuživatel, můžete použít ‘set role’, i když nejste členem skupiny:

Všechny tabulky, které nyní vytvoříte, jsou vlastněny rolí temporary_role:

Chcete-li zkontrolovat vlastnictví tabulky, spusťte následující příkaz:

create table with temporary_role

Můžete vidět, že role ‘temporary_role’ vlastní novou tabulku a sekvenci spojenou s datovým typem serial. Chcete-li se vrátit k původním oprávněním role, spusťte následující příkaz:

Pokud chcete, aby role měla všechna oprávnění role, do které patří, můžete zadat vlastnost ‘inherit’ pomocí příkazu ‘alter role’:

Pomocí výše uvedeného příkazu získal ‘test_user’ všechna oprávnění rolí, do kterých patří. Chcete-li roli odstranit, můžete použít příkaz ‘drop role’:

drop role manage permissions in PostgreSQL

Výše uvedený příkaz vyhodí chybu, protože na něm závisí některé objekty, například tabulka ‘hello’. Chcete-li jej odstranit, můžete převést vlastnictví tabulky na jinou roli:

Pomocí následujícího příkazu můžete zkontrolovat, že temporary_role nyní nevlastní žádné tabulky:

check ownerships

Nyní můžete roli ‘temporary_role’ odstranit, protože již nemá žádné závislosti:

Přestože výše uvedený příkaz zruší roli temporary_users, bývalí členové této skupiny rolí nebudou odebráni.

Závěr

Dokončili jste návod a nyní už víte, jak spravovat oprávnění v PostgreSQL. Oprávnění můžete snadno spravovat. Znalost správy oprávnění zajišťuje, že vaše aplikace budou mít přístup k požadovaným databázím a zároveň nebudou mít přístup k žádné jiné databázi používané jinou aplikací.

Příjemnou práci!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.