LINUXSOFT.cz
Username: Password:     
    CZ UK PL

> 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ý | read 19673×

DISCUSSION   

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.

 

DISCUSSION

For this item is no comments.

Add comment is possible for logged registered users.
> Search Software
> Search Google
1. Pacman linux
Download: 4873x
2. FreeBSD
Download: 9063x
3. PCLinuxOS-2010
Download: 8561x
4. alcolix
Download: 10943x
5. Onebase Linux
Download: 9658x
6. Novell Linux Desktop
Download: 0x
7. KateOS
Download: 6240x

1. xinetd
Download: 2411x
2. RDGS
Download: 937x
3. spkg
Download: 4752x
4. LinPacker
Download: 9961x
5. VFU File Manager
Download: 3196x
6. LeftHand Mała Księgowość
Download: 7200x
7. MISU pyFotoResize
Download: 2805x
8. Lefthand CRM
Download: 3561x
9. MetadataExtractor
Download: 0x
10. RCP100
Download: 3117x
11. Predaj softveru
Download: 0x
12. MSH Free Autoresponder
Download: 0x
©Pavel Kysilka - 2003-2024 | mailatlinuxsoft.cz | Design: www.megadesign.cz