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

> MySQL (62) - Oprávnění podruhé

Jak zajistit, aby se nám k databázi připojovali jen správní lidé ze správného místa?

10.3.2006 06:00 | Petr Zajíc | Články autora | přečteno 18042×

Co můžeme udělat pro nastavení zabezpečení databáze MySQL v praxi a jak na to jít? O tom bude řeč v dnešním díle seriálu. Zpočátku se Vám možná bude zdát celá problematika dosti spletitá, ale nakonec zjistíte, že celý systém je velmi logický a přehledný. Takže, vzhůru na věc!

Jak MySQL ukládá oprávnění

Veškerá oprávnění jsou v MySQL uložena ve zvláštní databázi, která se jmenuje mysql. V ní je pět tabulek, které s oprávněním tak či onak souvisejí. MySQL při požadavku na provedení nějaké operace tyto tabulky dotazuje, a podle výsledku se rozhodne, zda dané oprávnění přidělí či nikoli. Těmito pěti tabulkami jsou:

  • user
  • db
  • host
  • tables_priv
  • columns_priv

a v zásadě se dá říci, že se s jejich obsahem dá za určitých okolností manipulovat přímo. Abychom to celé trochu zjednodušili, vynecháme z dobrých důvodů tabulku host a budeme se věnovat zbylým čtyřem. Pro experimenty je dobré v tomto případě mít k dispozici testovací server s administrátorským přístupem.

MySQL provádí v podstatě dvojí ověřování. První se nazývá ověření při připojení a stanovuje kdo se odkud smí nebo nesmí k našemu serveru připojit. Pokud to projde nastupuje druhá fáze, nazývaná ověření při požadavku. Ta poskytuje uživatelům ověřeným při připojení práva pro konkrétní akce na serveru (jako je třeba vkládání dat do tabulek).

Pozn.: V těchto dvou věcech je podstatný rozdíl. Je klidně možné nakonfigurovat správu uživatelů tak, aby se někdo mohl připojit, ale potom nemohl provést prakticky žádnou myslitelnou akci na serveru.

Ověření při připojení

Tady platí, že pro ověření při připojení se používají údaje, které jsou uloženy v tabulce user. Pokud jste přihlášen jako superuživatel, můžete si je prohlédnout pomocí

use mysql;
select * from user;

nebo ještě stručněji - protože nás v tuto chvíli zajímají pouze tři pole - pomocí něčeho jako

select host, user, password from user;

Jak asi tušíte, ověření při připojení zjišťuje, zda daný uživatel se smí připojit z daného hostitele - a zda přitom použil správné heslo. Pokud je všechno v pořádku, pustí MySQL uživatele dál. Pokud ne, skončíte při přihlašování chybou ve stylu:

ERROR 1045 (28000): Access denied for user 'xxx'@'host' (using password: NO)

Do tabulky user může superuživatel (nebo jiný uživatel, pokud má k tomu práva) zapisovat přímo. Můžete tak například založit uživatele franta s heslem atnarf, který bude smět přistupovat k serveru z hostitele 192.168.0.100. První, co Vás asi napadne je provést to pomocí INSERT prostě takto:

insert into user (user, host, password) values ('franta','192.168.0.100','atnarf');

To nebude fungovat! Důvodem je, že MySQL neukládá hesla ve sloupci password jako prostý text, ale - zjednodušeně řečeno - ukládá jejich hash. Ten lze vytovřit pomocí MySQL funkce PASSWORD, takže vylepšená verze příkazu pro vložení do tabulky user by mohla znít nějak takto (nesprávně založeného uživatele jsem odstranil):

delete from user where user = 'franta' and host = '192.168.0.100' and password = 'atnarf';
insert into user (user, host, password) values ('franta','192.168.0.100',password('atnarf'));

Jestliže si to vyzkoušíte, zjistíte pravděpodobně, že to zase nebude fungovat. Důvodem je tentokrát mechanismus, jakým MySQL obsluhuje mezipaměť. Je třeba přikázat databázi, aby nový obsah tabulky user zapsala na disk. To provedete pomocí příkazu flush:

flush privileges;

K čemu dojde? MySQL vyprázdní cache a znovunačte oprávnění. V našem případě i s nově založeným uživatelem, který se od této chvíle smí se svým heslem připojit ze stroje 192.168.0.100.

K celému mechanismu bych si dovolil několik poznámek:

  • V tabulce user smíte mít jednoho uživatele vícekrát. Například budete chtít, aby se franta mohl připojit i z hostitele 10.0.0.5. Tudíž je jedině logické, že pro jednoho uživatele a dva hostitele budou v tabulce user dva řádky. To není chyba
  • Ve výše popsaném případě smí mít tentýž uživatel přistupující k serveru z různých míst různá hesla. Je to sice hezká funkce, ale moc se to nepoužívá. Důvodem je to, že by si uživatel musel na každém stroji pamatovat jiné heslo, což může být poněkud náročné.
  • MySQL dovolí nechat políčko host prázdné. V zásadě to znamená, že daný hostitel se pak může připojit odkudkoli. Nedoporučuji to. Jednak to asi není to, co chcete, a jednak pak není jasné, zda jste hostitele pouze zapomněli specifikovat nebo zda má být prázdný.
  • MySQL dovolí nechat prázdné políčko pro heslo. Význam je takový, že heslo pak není pro spojení vůbec požadováno. To sice rovněž nelze doporučit, ale v praxi se to někdy používá, třeba pro lokální přístup.
  • Hostitele lze zadat mnoha způsoby, příklady jsou dostupné v dokumentaci. Já jsem si například zapamatoval, že při připojení z místního PC lze zadat jako název hostitele localhost. Za určitých podmínek lze rovněž zadat více hostitelů - například jednu podsíť.
  • Pochopitelně nesmíte zadat stejnou kombinaci uživatele a hostitele do tabulky user vícekrát. Jednak je to logický nesmysl, a jednak je na tabulce user na sloupcích user a host primární klíč - a ten jak víte musí být unikátní.
  • Smíte zadat prázdný název uživatele. To má význam ten, že pak povolujete anonymní přihlášení. Moc se to nepoužívá. Lze samozřejmě povolit anonymní přihlášení pouze z určitých hostitelů pomocí prázdného jména a zadaného hostitele.

Příkaz GRANT

Prozradím rovnou, že přímá modifikace systémových tabulek s oprávněními není jediná možnost, jak tato oprávnění spravovat. Přesto je velmi rozumné vědět, že to můžete provést. Činnosti přidávání uživatelů však můžeme udělat mnohem jednodušeji pomocí vestavěného SQL příkazu GRANT. Než bych pracně vysvětloval, jak takový příkaz funguje uvedu příklad. Stejného efektu, kterého jsme předtím dosáhli ručním vyplněním tabulky user lze pomocí GRANT dosáhnout takto:

GRANT USAGE ON *.* TO franta@'192.168.0.100' IDENTIFIED by 'atnarf';

Použití GRANT je mnohem pružnější než přímý zápis do tabulek s oprávněními nejméně z následujících důvodů:

  1. Jeho použití nevyžaduje FLUSH PRIVILEGES.
  2. Heslo se nemusí hashovat pomocí PASSWORD.
  3. Při změně formátu tabulek s oprávněními (jakože se to v případě MySQL občas stává) funguje příkaz GRANT konzistentně.
  4. Narozdíl od vkládání do tabulky pomocí INSERT lze GRANT bezpečně libovolněkrát opakovat.
  5. V jednom příkazu GRANT lze vložit více uživatelů nebo více kombinací uživatel+hostitel.
  6. Jak uvidíme příště - GRANT může ovlivňovat data ve více tabulkách, takže je mnohem rychlejší než zadávání několika příkazů INSERT

Bude dobré si říci, že svoje oprávnění (a leckdy i oprávnění ostatních) můžete zkontrolovat příkazem SHOW GRANTS:

show grants;
show grants for 'franta'@'192.168.0.100';

Tím jsme zhruba dokončili ověřování při připojení a příště se podíváme na to, jak zajistit a spravovat oprávnění při požadavku.

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ů

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ář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
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