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:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
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:
|
1 |
sudo su - postgres |
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:
|
1 |
psql |
Poté spusťte následující příkaz pro zobrazení rolí:
|
1 |
\du |

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:
|
1 |
CREATE ROLE demo_role; |
Chcete-li zkontrolovat, zda byla vytvořena, spusťte příkaz:
|
1 |
\du |

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í:
|
1 |
\q |
Pomocí následujícího příkazu můžete vytvořit roli s názvem “test”:
|
1 |
createuser test |
Jakmile provedete výše uvedený příkaz, přihlaste se do psql a vypište role pomocí následujících příkazů:
|
1 2 |
psql \du |

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:
|
1 |
DROP ROLE role_name; |
Demo roli, kterou jsme vytvořili dříve, můžete smazat pomocí příkazu:
|
1 |
DROP ROLE demo_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:
|
1 |
DROP ROLE demo_role; |

Pokud chcete, aby příkaz nevyhazoval chybu, když role neexistuje, můžete do příkazu přidat ‘IF EXISTS’:
|
1 |
DROP ROLE IF EXISTS role_name; |
Můžete zkusit smazat roli znovu pomocí tohoto příkazu:
|
1 |
DROP ROLE IF EXISTS demo_role; |
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:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Chcete-li zobrazit možnosti pro tento příkaz, můžete otevřít nápovědu pomocí tohoto příkazu:
|
1 |
\h CREATE ROLE |

If you want to create a role with login permissions, you can form the command like this:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

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:
|
1 |
CREATE USER role_name; |
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:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
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:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Chcete-li uživateli znovu povolit přihlášení, můžete změnit oprávnění pomocí následujícího příkazu:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
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:
|
1 |
\password test |
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:
|
1 2 |
\q exit |
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:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
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:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

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:
|
1 2 3 |
\q sudo su - postgres psql |
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:
|
1 |
GRANT permission_type ON table_name TO role_name; |
Můžete vytvořit jednoduchou tabulku pro provedení příkazu:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Chcete-li zobrazit vytvořenou tabulku, spusťte příkaz:
|
1 |
\d |

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:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Všechna oprávnění můžete roli udělit zadáním oprávnění jako ‘ALL’:
|
1 |
GRANT ALL ON demo TO demo_role; |
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:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Všechna udělená oprávnění si můžete zobrazit pomocí následujícího příkazu:
|
1 |
\z |
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:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
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:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
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’:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO 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:
|
1 |
\du |

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:
|
1 |
SET ROLE temporary_role; |
Všechny tabulky, které nyní vytvoříte, jsou vlastněny rolí temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Chcete-li zkontrolovat vlastnictví tabulky, spusťte následující příkaz:
|
1 |
\d |

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:
|
1 |
RESET ROLE; |
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’:
|
1 |
ALTER ROLE test_user INHERIT; |
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’:
|
1 |
DROP ROLE temporary_users; |

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:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Pomocí následujícího příkazu můžete zkontrolovat, že temporary_role nyní nevlastní žádné tabulky:
|
1 |
\d |

Nyní můžete roli ‘temporary_role’ odstranit, protože již nemá žádné závislosti:
|
1 |
DROP ROLE temporary_users; |
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!


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