LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> 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 19164×

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ů

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

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

> Poslední diskuze

31.7.2023 14:13 / Linda Graham
iPhone Services

30.11.2022 9:32 / Kyle McDermott
Hosting download unavailable

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

Více ...

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