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

> MySQL (63) - jemné nastavení práv

Potřetí a naposledy se budeme v MySQL zabývat právy; tentokrát jejich jemným nastavením.

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

Při našem rozboru oprávnění MySQL jsme se dostali k přihlášení uživatelů. Už tedy umíme zakázat nebo povolit nějakému uživateli z nějakého stroje přihlásit se k našemu serveru. To je sice moc hezké, ale nestačí to.

MySQL a oprávnění při požadavku

Lidé se k MySQL nepřihlašují proto, aby byli spojeni s databázovým serverem. Přihlašují se proto, že chtějí se serverem něco dělat, tvořit strukturu databáze nebo pracovat s daty. Takže, když si lehce zopakujeme látku z minulého dílu a založíme uživatele franta, který se smí na server připojit z místního stroje:

grant usage on *.* to franta@'localhost' identified by 'atnarf';

A přihlásíme se jako tento uživatel, zjistíme, že kromě přihlášení nemůžeme se serverem dělat vůbec nic. Nelze použít žádnou databázi ani žádnou vytvořit. Uživatel prostě nemá jiná než přihlašovací práva.

Pozn.: Nemusí to být tak úplně pravda. V závislosti na konfiguraci serveru může mít náš nový uživatel implicitně přístup do databáze test. Proč to je, to uvidíme za chvíli.

Přidělení globálních práv

Odpovědí na tento problém je nahlédnutí do tabulky user. Sice jsem Vám to minule zatajil, ale tato tabulka obsahuje i další pole kromě host, user a password. Ta jsou určena právě pro přidělování globálních práv, takže například pole select_priv povoluje či zakazuje našemu Frantovi číst databázová data (k čemu slouží insert_priv a další jistě vysvětlovat nemusím). Můžete si to vyzkoušet. Zadáte následující příkazy:

update user set select_priv='Y' where user='franta' and host='localhost';
flush privileges;

Od této chvíle náš Franta může klidně brouzdat databázemi a vybírat data pomocí příkazu SELECT. O něco pohodlněji by se dalo podobné věci dosáhnout jedním příkazem GRANT. Předvedu:

grant select on *.* to franta@'localhost' identified by 'atnarf';

Neboli: Příkaz grant může zajišťovat nejen oprávnění při připojení, ale i oprávnění při požadavku. Jednotlivých oprávnění při požadavku je asi pětadvacet a nebudu je zde rozepisovat, k tomu slouží manuál. Důležité je rověž vědět, že v jednom příkazu GRANT lze oprávnění kombinovat, takže našemu uživateli bychom mohli například povolit plnou manipulaci s daty v existujících tabulkách pomocí následujícího příkazu GRANT:

grant select, insert, update, delete on *.* to franta@'localhost' identified by 'atnarf';

Což, jak už nejspíš tušíte, zaktualizuje související políčka v tabulce user.

Problém s globálními právy

Největší problém s globálními právy spočívá v tom, že jsou příliš přebujelá. Je třeba si uvědomit, že pokud takto práva přidělíme, tak uživatel může přistupovat k datům ve všech databázích na serveru, A TO VČETNĚ DATABÁZÍ, které vzniknou v budoucnu!!! Takový systém je dost nepředvídatelný, zejména pokud by se jednalo o server, v němž má každý uživatel data v jedné databázi. Taková konfigurace je obvyklá například na hostinzích. Proto se globální práva uživatelům v typických scénářích až na malé výjimky neposkytují. Čímž se dostáváme k další otázce, a tou je odebrání práv.

Odebrání práv

Odebrání práv funguje analogicky k jeho přidělování. Související sloupce v tabulce user se nasaví na N (tedy nepovoleno), nebo lze využít protipólu příkazu GRANT, a tím je REVOKE. Protože má podobnou syntaxi jako GRANT, tak to pouze předvedu:

revoke select, insert, delete, update on *.* from 'franta'@'localhost';

Pozn.: Pozor na syntaxi. Správně je "GRANT ... TO" a "REVOKE ... FROM". Ať se Vám to neplete. REVOKE rovněž nikdy neodstraní záznam z tabulky user, takže pokud budete chtít uživateli znemožnit i samotné přihlášení na server, tak musíte sáhnout po ručním promazávání tabulky user.

Práva k jednotlivým databázím

V praxi se skutečně nejčastěji používá tento způsob, kdy:

  1. Uživatelé jsou v tabulce user zapsáni pouze proto, aby se mohli přihlásit k serveru jako takovému a žádná globální práva jim nejsou poskytnuta
  2. Uživatelům jsou pak povolena pouze práva pro konkrétní databázi.

Předveďme, jak to celé funguje, pokud budeme chtít uživateli franta povolit přístup do nově vzniklé databáze franta z lokálního počítače. Nejprve pomocí ručního zápisu do tabulek oprávnění:

delete from user where user = 'franta' and host='localhost';
insert into user (user, host, password) values ('franta', 'localhost', password('atnarf'));
create database franta;
insert into db (host, db, user, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv,
References_priv, Index_priv, Alter_priv, Create_tmp_table_priv, Lock_tables_priv, Create_view_priv,
Show_view_priv, Create_routine_priv, Alter_routine_priv, Execute_priv)
values
('localhost', 'franta', 'franta', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
flush privileges;

Je to trochu delší příklad, takže co jsme vlastně provedli: Nejdřív jsme odstranili a znovu vložili uživatele franta do tabulky user. Byl to nejrychlejší způsob, jak se ujistit, že nebude mít žádná globální oprávnění. Následně jsme vytvořili databázi franta, a konečně jsme zápisem do tabulky db (to děláme nyní poprvé) přidělili uživateli franta všechna práva k této nově vzniklé databázi.

Všimněte si, že franta nemá práva k žádné jiné databázi na serveru. Tento způsob přidělování se používá právě na hostinzích. A ještě pro úplnost dodejme, že to celé lze postatně zkrátit použitím GRANT, v tomto smyslu:

create database franta;
grant all on franta.* to 'franta'@'localhost' identified by 'atnarf';

Z výroby však může být nastaveno, že jednotliví uživatelé mohou přistupovat k databázi test. Pokud se chcete podívat, jak je na tom vaše instalace serveru, stačí se zeptat:

select * from db where db='test';

Závěr

V popisu přidělování práv bychom mohli podobným způsobem pokračovat a ukázat si, jak se přidělují práva k jednotlivým tabulkám a sloupcům. Protože však je to podobné a protože se to tak často nepoužívá, odpustíme si to. Rovněž je zajímavé "právo přidělovat práva", které umožňuje jiným uživatelům přidělit práva, která sám mám. MySQL navíc disponuje možnostmi přidělovat práva na základě toho, zda a jak je spojení k databázi zašifrované.

Pokud se budete chtít stát v MySQL bezpečnostními experty, pravděpodobně Vám informace zde uvedené stačit nebudou. Ale jestliže chcete celému mechanizmu pouze rozumnět, nebo jestliže chcete nastavit pár jednodušších bezpečnostních pravidel, tak byste tu měli najít, co potřebujete.

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