Úvod
Správa uživatelských oprávnění a oprávnění přístupu je zásadní bezpečnostní koncept pro jakýkoli typ databáze. PostgreSQL se stará o řízení přístupu prostřednictvím rolí a oprávnění. Například přidáním oprávnění LOGIN k roli získáte uživatele. Postgres nabízí několik způsobů, jak vytvářet a spravovat uživatelské účty.
Tento kurz ukazuje, jak vytvořit a nastavit různé typy uživatelů pro databázi PostgreSQL.
Předpoklady
- Nainstalován Postgres (postupujte podle našeho průvodce pro Ubuntu nebo Windows).
- Přístup k terminálu s právy sudo.
- Přístup k uživateli postgres.
Vytvoření nového uživatele v PostgreSQL
Existují dva způsoby, jak vytvořit nového uživatele v PostgreSQL, a oba případy vyžadují přístup k postgres uživatel.
Metoda 1:Použití klientského nástroje createuser
První způsob, jak vytvořit nového uživatele, je pomocí createuser
klientský nástroj. Tato metoda se vyhýbá připojení k rozhraní příkazového řádku PSQL.
Chcete-li vytvořit uživatele, spusťte v terminálu následující příkaz:
sudo -u postgres createuser <name>
Terminál nevydává zprávu. Chcete-li odeslat zprávu serveru jako echo, přidejte -e
tag:
sudo -u postgres createuser -e <name>
Například:
sudo -u postgres createuser -e john
Případně rozdělte příkaz na dvě části:
1. Přepněte na postgres uživatel:
sudo su - postgres
2. Spusťte createuser
příkaz:
createuser <name>
Postgres automaticky vytvoří uživatele (roli s oprávněním k přihlášení) v obou případech.
Metoda 2:Použití PSQL
Druhým způsobem, jak vytvořit nového uživatele v PostgreSQL, je interaktivní PSQL shell.
1. Přepněte na postgres uživatele a spusťte interaktivní terminál pomocí:
sudo -u postgres psql
Relace terminálu se změní na postgres=#
, což znamená úspěšné připojení k prostředí Postgres.
2. K vytvoření uživatele použijte následující příkaz:
CREATE USER <name>;
Například:
CREATE USER mary;
Spuštěním příkazu se vytiskne CREATE ROLE
do konzole. Důvodem je, že CREATE USER
dotaz je alias pro následující příkaz:
CREATE ROLE <name> WITH LOGIN;
Oba dotazy dávají stejný výsledek.
Vytvoření superuživatele v PostgreSQL
Chcete-li vytvořit superuživatele v PostgreSQL, musíte mít roli superuživatele.
Upozornění: Superuživatel databáze obchází všechny kontroly, což je z bezpečnostního hlediska nebezpečné. Používejte tuto akci opatrně a nepracujte s účtem superuživatele, pokud to není nezbytně nutné.
Existují dva způsoby, jak vytvořit superuživatele v PostgreSQL:
1. Vytvořte roli superuživatele pomocí klientského nástroje přidáním --superuser
tag:
sudo -u postgres createuser --superuser <name>
Nebo použijte zkrácený tag -s
místo --superuser
:
sudo -u postgres createuser -s <name>
Terminál vydá hlášení v případě chyby nebo pokud uživatel již existuje. V případě úspěchu se nezobrazí žádná zpráva.
2. Případně použijte CREATE USER
Příkaz PSQL:
CREATE USER <name> SUPERUSER;
CREATE USER
příkaz je alias pro následující příkaz:
CREATE ROLE <name> LOGIN SUPERUSER;
CREATE ROLE
příkaz vyžaduje přidání LOGIN
oprávnění k emulaci uživatele.
Vytvořte heslo pro uživatele
Každý uživatel databáze musí mít silné heslo, aby se zabránilo útokům hrubou silou. PostgreSQL nabízí dvě metody, jak vytvořit uživatele s heslem.
Upozornění: Z těchto dvou metod je první preferovaná a bezpečnější.
1. Použijte createuser
klientský nástroj a přidejte --pwprompt
možnost automatického vyvolání výzvy k vytvoření hesla:
sudo -u postgres createuser <name> --pwprompt
Zkrácená verze je -P
tag:
sudo -u postgres createuser <name> -P
Terminál vyzve k zadání hesla dvakrát. Samotné heslo nebo jeho délka je při komunikaci se serverem zašifrována a skryta.
2. Pomocí PSQL vytvořte uživatele s heslem:
CREATE USER <name> WITH PASSWORD '<password>';
Pokud uživatel již existuje, přidejte heslo pomocí ALTER USER
:
ALTER USER <name> WITH PASSWORD '<password>';
Správa hesel prostřednictvím PSQL přichází se třemi bezpečnostními chybami:
- Heslo je viditelné na obrazovce.
- Zobrazení historie příkazů odhalí heslo.
- Informace se přenášejí jako čistý text bez jakéhokoli šifrování.
Tuto metodu používejte opatrně.
Udělte uživateli oprávnění
Ve výchozím nastavení nemají noví uživatelé žádná oprávnění kromě přihlášení. Chcete-li při vytváření uživatele přidat oprávnění, spusťte createuser
klientský nástroj v následujícím formátu:
createuser <option> <name>
Chcete-li provést totéž v PSQL, spusťte:
CREATE USER <name> WITH <option>;
Níže je tabulka s běžně používanými možnostmi pro obě metody.
Syntaxe možností | PSQL | Vysvětlení |
---|---|---|
-s --superuser | SUPERUSER | Přidejte oprávnění superuživatele. |
-S --no-superuser | NOSUPERUSER | Žádné oprávnění superuživatele (výchozí). |
-d --createdb | CREATEDB | Umožňuje uživateli vytvářet databáze. |
-D --no-createdb | NOCREATEDB | Není povoleno vytvářet databáze (výchozí). |
-r --createrole | CREATEROLE | Umožňuje uživateli vytvářet nové role. |
-R --no-createrole | NOCREATEROLE | Není povoleno vytvářet role (výchozí). |
-i --inherit | INHERIT | Automaticky dědit oprávnění rolí (výchozí). |
-I --no-inherit | NOINHERIT | Nedědit oprávnění rolí. |
-l --login | LOGIN | Umožňuje uživateli přihlásit se do relace s názvem role (výchozí). |
-L --no-login | NOLOGIN | Není povoleno přihlásit se do relace s názvem role. |
--replication | REPLICATION | Umožňuje zahájit replikaci streamování a aktivovat/deaktivovat režim zálohování. |
--no-replication | NOREPLICATION | Není povoleno zahájit replikaci streamování nebo režim zálohování (výchozí). |
-P --pwprompt | PASSWORD '<password>' | Inicializuje výzvu k vytvoření hesla nebo přidá poskytnuté heslo uživateli. Nepoužívejte tuto možnost k vytvoření uživatele bez hesla. |
/ | PASSWORD NULL | Konkrétně nastaví heslo na hodnotu null. Každé ověření hesla se u tohoto uživatele nezdaří. |
-c <number> --connection-limit=<number> | CONNECTION LIMIT <number> | Nastaví maximální počet připojení pro uživatele. Výchozí hodnota je bez omezení. |
Vytvořte například uživatele s oprávněními pro vytváření a databázi a přidejte -e
tag pro echo výsledků:
sudo -u postgres createuser -d -r -e <name>
Nebo použijte ekvivalent PSQL:
CREATE USER <name> WITH CREATEROLE CREATEDB;
V obou případech jsou uvedená oprávnění udělena novému uživateli automaticky.
Interaktivně vytvořte uživatele PostgreSQL
Interaktivní vytvoření uživatele je praktická možnost dostupná pouze pro obslužný program klienta. Chcete-li vytvořit uživatele interaktivně, spusťte následující příkaz:
sudo -u postgres createuser --interactive
Příkaz automaticky vyzve řadu otázek s následujícími dotazy:
- Název role.
- Zda je role superuživatelem.
- Pokud má uživatel povoleno vytvářet databáze.
- Pokud má uživatel povoleno vytvářet další role.
Odpovězte ano (y
) na otázku superuživatele automaticky přidáte oprávnění „vytvořit databázi“ a „vytvořit roli“ a ukončíte výzvu.
Seznam všech uživatelů v PostgreSQL
Základním nástrojem pro správu uživatelů v databázích je seznam všech uživatelů s jejich příslušnými rolemi a oprávněními.
Chcete-li vypsat všechny uživatele v PostgreSQL, proveďte následující:
1. Připojte se k výzvě PSQL jako uživatel postgres:
sudo -u postgres psql
2. Vypište všechny uživatele pomocí následujícího příkazu:
\du
Výstup zobrazuje tabulku s názvy rolí, atributy (privilegii) a skupinami uživatelů. Chcete-li zobrazit popis každé role, přidejte znaménko plus (+
) podepsat:
\du+
Výstup zobrazuje další sloupec s popisem role tam, kde je to možné.