LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> PostgreSQL (25) - Administrace skupin a uživatelů

PostgreSQL Od počátku seriálu o PostgreSQL jsme se přehoupli přes řadu 8.1, která změnila systém vytváření uživatelů a je zapotřebí se seznámit i se systémem vytváření skupin a s pokročilejší správou uživatelů. Ale protože se vyskytují i servery, jejichž správci jsou konzervativní v nasazování nových verzí, pokusíme se shrnout i odlišnosti starších verzí.

12.1.2007 10:00 | MaReK Olšavský | Články autora | přečteno 16056×

Vytvoření a správa skupin

Vytváření skupin uživatelů může předcházet vytvoření jednotlivých uživatelů, proto jej předřazuji samotnému vytvoření uživatelů. Práva k jednotlivým databázím a tabulkám totiž lze přiřazovat jednotlivým skupinám, i uživatelům, ale je mnohem přehlednější vytvořit skupinu, která má garantované určité přístupy, do níž se pak přidávají nově vytvoření uživatelé, než vytvářet uživatele mimo skupiny a těm pak jednotlivě přiřazovat potřebná práva. Je rozdíl mezi verzemi před 8.0, včetně, a v tom, jaké jsou změny od řady 8.1. To jak je systém přepracován od verze 8.1 naleznete v odstavcích dále a tuto část textu můžete přeskočit.

Nová skupina uživatelů se vytváří pomocí příkazu CREATE GROUP jmeno_skupiny [[WITH] volba [dalsi_volba]], kde volby a parametry jsou následující (ve verzi 7.4 nejsou tyto volby obsaženy):

-- ve verzi 8.0
SYSID gid
USER uzivatelske_jmeno [, dalsi_uzivatel [, ...]]

Jedinými parametry jsou číslo skupiny (gid), které pokud nezadáte bude vygenerováno automaticky a členové skupiny, které však můžete přidávat později pomocí ALTER GROUP.

Například při tvorbě účetního systému pro přístup ke klíčovým datům, při rozdělení na různých činností, které je běžné ve velkých firmách, budete mít skupiny správců, perzonalistů a účetních (i ty lze rozdělit na mzdové a finanční), do kterých pak budete přiřazovat jednotlivé uživatele, kteří pak budou mít přístup definovaný pouze k určitým databázím, tabulkám, či pohledům.

Změny ve skupinách se realizují pomocí příkazu ALTER USER ve třech možných variantách.

-- pridani jednoho nebo vice uzivatelu do skupiny jmeno
ALTER GROUP jmeno ADD USER uzivatel1 [, ...]
-- odebrani jednoho nebo vice uzivatelu ze skupiny jmeno
ALTER GROUP jmeno DROP USER uzivatel1 [, ...]
-- prejmenovani skupiny, toto smi udelat pouze vlastnik db
ALTER GROUP jmeno RENAME TO nove_jmeno

Pro smazání skupiny je, nejjednodušší a nejkratší, příkaz DROP GROUP jmeno.

Od verze 8.1 jsou skupiny v tomto pojetí zrušeny, nejedná se o SQL standard, a je povoleno vytvářet pouze uživatele/role.

Vytváření a správa uživatelů

Stále platí, že pro vytvoření prvního uživatele musíte být přihlášeni jako hlavní uživatel postgres, a to ať z konzole/terminálu, nebo v rámci SQL příkazu, ale už zmizela jedna menší nelogičnost v právech vytváření uživatelů. Protože se snažím v seriálu postihnout vlastnosti řady 7 i aktuální 8, pokusíme se v tomto díle vysvětlit obě verze.

Z terminálu vytvoříte uživatele, pochopitelně, máte-li k tomu patřičná práva, příkazem createuser, jehož přesné parametry naleznete buď vyvoláním nápovědy pomocí createuser --help, případně s přesným popisem pomocí man createuser, eventuálně v dokumentaci na stránkách PostgreSQL serveru, samozřejmě, že musíte otevřít dokumentaci k té verzi PgSQL, kterou používáte. Alespoň bodově si popíšeme změny:

  • Byly odstraněny parametry -a; --adduser a -A; --no-adduser, které ve verzích 8.0 a starších sloužily k vytvoření uživatele s právy vytvářet uživatele, ale nebylo už diferencováno, zda-li má takto vytvářený uživatel právo vytvořit jen běžného uživatele, nebo superuživatele. Nově je tento parametr nahrazen následujícími:
    • -s; --superuser — Nově vytvořený uživatel bude superuživatelem. Takovéhoto uživatele může vytvořit jen jiný superuživatel. Z mnoha důvodů není příliž šťastné vytvářet více uživatelů s takovýmity právy.
    • -S; --no-superuser — Inverzní parametr k předchozímu. Tento parametr je nastaven jako výchozí.
    • -r; --createrole — Nově vytvořený uživatel bude mít oprávnění vytvářet další uživateke, ale pouze s běžnými právy, nebude moci vytvořit superuživatele.
    • -R; --no-createrole — Inverzní parametr proti předchozímu, je defaultní.
  • Parametr -i změnil význam, zatímco ve verzích 8.0 a předchozích sloužil, případně v dlouhé verzi --sysid k určení uid, což někteří správci využívali k tomu, aby měli stejné id uživatele v PgSQL i Un*xovém operačním systému, dnes je tento parametr v zrušen v původním významu. Nově parametr -i, eventuálně v dlouhé verzi -inherit, slouží k určení role, od které má nový uživatel dědit vlastnosti. Inverzním parametrem je logicky -I, či --no-inherit. Pokud spravujete systém, kde je zapotřebí mít mnoho uživatelů se stejnými právy, je použítí dědění dobrým způsobem, jak si ušetřit mnoho práce.

Ostatní parametry zůstaly beze změny. Pokud nezadáte některý z podstatných parametrů, jako například má-li být superuživatelem, právo vytvářet databáze a další běžné uživatele, utilita createuser se interaktivně vyptá na zbylé parametry.

Konzolový příkaz createuser má svůj ekvivalent i v SQL příkazu, protože může být velmi užitečné moci vytvořit dalšího uživatele z aplikace, což by použitím konzolové utility nemuselo být vůbec snadné. Tento příkaz je CREATE USER jmeno_uzivatele [WITH volba [dalsi_volba]]. Naprostým ekvivalentem a používaným se stejnými parametry je příkaz CREATE ROLE jmeno_uzivatele [WITH volba [dalsi_volba]]. Parametry příkazu jsou víceméně samodokumentační, čiže by měl většině uživatelů postačit jejich prostý výpis, eventuálně lze nahládnout do dokumentace na stránkách PostgreSQL, v tomto díle popíšu jen ty volby, kde by mohli být nejasnosti.

Ve verzích 8.0 a starších byly parametry:

SYSID uid 
CREATEDB | NOCREATEDB
CREATEUSER | NOCREATEUSER
IN GROUP groupname [, ...]
[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
VALID UNTIL 'abstime'

A od verze 8.1 jsou platné parametry:

SUPERUSER | NOSUPERUSER
CREATEDB | NOCREATEDB
CREATEROLE | NOCREATEROLE
CREATEUSER | NOCREATEUSER
INHERIT | NOINHERIT
LOGIN | NOLOGIN
CONNECTION LIMIT limit_spojeni
[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'heslo'
VALID UNTIL 'casovy_udaj'
IN ROLE role [, ...]
IN GROUP role [, ...]
ROLE role [, ...]
ADMIN role [, ...]
USER role [, ...]
SYSID uid

Opět není třeba zadávat všechny parametry, leč nebudete na vlastnosti nového uživatele interaktivně dotázáni, ale budou použity defaultní volby, které jsou defaultní stejně jako v případě konzolové varianty. Jak vidíte z výpisu možných parametrů, které jsou použitelné v SQL příkazu, tak možnosti jsou poněkudsi širší. Některé parametry si popíšeme v krátkém seznamu.

  • CONNECTION LIMIT – Udává limit souběžných připojení uživatele/role. Výchozí hodnota je −1, která povoluje neomezený počet současných připojení.
  • SYSID – Nově vytvořenému uživateli přiřadíte identifikátor, můžete stejný, jako je jeho uid v systému, nezadáte-li bude vygenerováno automaticky. Tento parametr poslouží zejména těm administrátorů, kteří chtějí mít v systému i databázi stejným způsobem číslované uživatele.
  • VALID UNTIL – Po vypršení časového omezení se nebude moci uživatel přihlásit.
  • LOGIN | NO LOGIN – Pro někoho poněkudsi nelogická volba NOLOGIN, díky které nebude možné se přihlásit pod tímto účtem, ale poslouží pro nastavení práv k jednotlivým databázím. Pokud použijete příkaz CREATE USER bude přihlášení povolené i bez uvedení klauzule LOGIN, ve všech ostatních případech bude výchozí volbou NOLOGIN.
  • IN ROLE – Pokud zadáte tuto klauzili a za ní vypíšete jména existujících rolí, bude tato nově vytvářená role přiřazená do vyjmenovaných. Jedná se o systém správy skupin, jak je pojat od PostgreSQL 8.1.
  • IN GROUP – Alias pro IN ROLE. Je označen jako zastaralý, takže nemusí časem být podporován.
  • ROLE – Obrácená klauzule vůči IN ROLE, čiže při vytváření nové role vyjmenujete již existující, které do této budou zahrnuty. Stručněji, tímto vytvoříte skupinu a do ní zahrnete ať již existující skupiny, nebo existující uživatele.
  • USER – Alias pro ROLE. Je označen jako zastaralý, takže nemusí časem být podporován.
  • ADMIN – Chová se podobně, jako ROLE, ale uživatelé, které jste tímto zahrnuli budou mít administrátorská práva v této skupině.

Již z popisu přepínačů je vidět, že role zcela nahrazují původní model uživatelů a skupin uživatelů. Pro někoho může být pochopitelnější a průhlednější původní systém, ale do Postgresu se dostávají takto veliké změny po velmi zralé úvaze, čiže se bude jednat opravdu o značně lepší systém ve správě uživatelů, především je vidět jeho lepší variabilita. Podstatné je, že od verze 8.1 je zapotřebí přestat uvažovat o uživatelích a skupinách, ale uvažovat o rolích, které jsou i ANSI SQL standardem.

Změna nastavení uživatelů se provádí příkazem ALTER USER jmeno [[WITH] volba [, dalsi_volba]], od verze 8.1, v terminologii rolí, se využívá funkce ALTER ROLE jmeno [[WITH] volba [, dalsi volba]] Volby jsou téměř stejné jako při vytváření nového uživatele, jen jich několik chybí:

Do verze 8.0, včetně, jsou parametry:

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER 
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' 
| VALID UNTIL 'abstime'

Od verze 8.1 platí následující parametry:

SUPERUSER | NOSUPERUSER
CREATEDB | NOCREATEDB
CREATEROLE | NOCREATEROLE
CREATEUSER | NOCREATEUSER
INHERIT | NOINHERIT
LOGIN | NOLOGIN
CONNECTION LIMIT limit_spojeni
[ENCRYPTED | UNECRYPTED] PASSWORD 'heslo'
VALID_UNTIL 'casovy_udaj'

Přiřazení práv

V předchozích odstavcích jste se seznámili s vytvářením jednotlivých uřivatelů a skupin v PostgreSQL, nyní je zapotřebí vytvořeným rolím přiřadit práva na objekty v databázi. K delegování práv slouží příkaz GRANT, s patřičnými parametry. Pokud na PostgreSQL přecházíte z MySQL, tento příkaz pravděpodobně znáte. Výpis všech parametrů příkazu naleznete

v dokumentaci na stránkách PostgreSQL, nebudu jej zde uvádět z prostorových důvodů, spíše bude vhodnější si vše ukázat na příkladech, které se budou z pochopitelných důvodů vztahovat k verzi 8.1 a novějším.

GRANT poslouží k delegování práv k databázovým objektům pro jednotlivé role, ale pokud chceme tato práva odebrat, alespoň některá z nich, je třeba použít příkazu REVOKE, který je opět popsán v původní dokumentaci na stránkách PostgreSQL, parametrů má poměrně mnoho.

Příklad

-- hlavni role, ktera mi zastresuje cele mzdy
CREATE ROLE amzdy NOLOGIN ENCRYPTED PASSWORD '123mzdy';

-- podrizene role
CREATE ROLE pam NOLOGIN ENCRYPTED PASSWORD 'derf' IN ROLE amzdy;
CREATE ROLE admin NOLOGIN ENCRYPTED PASSWORD 'fred' IN ROLE amzdy;

-- Nyni uzivatele
CREATE ROLE marek2 LOGIN ENCRYPTED PASSWORD 'm123' IN ROLE pam, admin;
  -- sebe davam jako (hlavniho) spravce do vsech roli
CREATE ROLE jarsuk LOGIN ENCRYPTED PASSWORD 'jaro123';

-- zapomenuta role i s uzivateli
CREATE ROLE mzdy NOLOGIN ENCRYPTED PASSWORD 'vyplaty' IN ROLE amzdy ROLE
  jarsuk, marek2;

-- sobe pridelim veskera prava
GRANT ALL ON DATABASE amzdy TO marek2 WITH GRANT OPTION;

-- k mzdovym tabulkam (casti) pridam prava pro role mzdy a amzdy
 GRANT SELECT, INSERT, UPDATE, DELETE ON prac, nemd, mzdp, ucty TO amzdy, mzdy;
 
-- uzivateli jarsuk odeberu prava mazani a prepisu
REVOKE DELETE, UPDATE ON prac, nemd, mzdp, ucty FROM jarsuk;

Závěr

V tomto díle jsem si dovolil udělat menší odbočku, která vznikla díky změně z PostgreSQL 7.2 na 8.1 na jednom serveru, o který se starám. Zpočátku se mi změna systému, od jednoduché terminologie skupin a uživatelů k rolím, příliž nelíbila, ale po vytvoření pár desítek rolí, z celkového počtu 120, jsem uznal, že tento systém je mnohem průhlednější a pružnější.

Příště se zase vrátíme k běžné manipulaci s daty a bude již načase otevřít možnosti programování na straně databáze, tj. uděláme krok k vícevrstvým aplikacím.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář

11.2.2018 23:11 /Petr Ježek
Hledáte lehký a rychlý prolížeč PDF souborů? Pokud vás již omrzelo čekat na načítání stránek či jiné nešvary, zkuste xreader.
Přidat komentář

11.2.2018 20:35 /Redakce Linuxsoft.cz
Třetí ročník odborné IT konference na téma Cloud computing v praxi proběhne ve čtvrtek 1. března 2018 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 16 hod. odpoledne. Konference o trendech v oblasti cloud computingu nabídne i informace o konkrétních možnostech využívání cloudů a řešení vybraných otázek souvisejících s provozem IT infrastruktury.
Přidat komentář

15.1.2018 0:51 /František Kučera
První letošní pražský sraz se koná již tento čtvrtek 18. ledna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Vítáni jsou všichni příznivci svobodného softwaru a hardwaru, ESP32, DIY, CNC, SDR nebo dobrého piva. Prvních deset účastníků srazu obdrží samolepku There Is No Cloud… just other people's computers. od Free Software Foundation.
Přidat komentář

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze