Začínám s MySQL 16. - Zabezpečení

14. prosince 2001
Computer 24/01 SDÍLET NA FACEBOOKU TWEETNOUT
V dnešním předposledním díle našeho seriálu vám ukáži, jakým způsobem v MySQL zabráníme neoprávněné manipulaci s daty.
Trochu úvodu

Každý databázový produkt, MySQL nevyjímaje, by měl obsahovat alespoň základní zabezpečovací mechanismy, které brání odcizení či úmyslnému poškození citlivých dat někým nepovolaným. Podle mnoha studií totiž většina neoprávněných přístupů nepochází z okolí sítě (např. z Internetu), ale přímo z vnitřní sítě. To je hlavní důvod, proč bychom neměli nechávat naše mnohdy cenná data jen tak na pospas okolí, ale měli bychom je řádně zabezpečit.

Zabezpečení MySQL

Na úvod uvedu konkrétní případ. Pracujete ve firmě, kde jsou důležitá data uložena v databázi MySQL, a potřebujete zajistit, aby pracovník č. 1 měl přístup do jedné databáze a pracovník č. 2 do druhé databáze. Jak se s tím vypořádáte?

Zcela jednoduše. Využijete totiž možností správy „účtů“, která je v MySQL k dispozici. Při každé nové instalaci MySQL se automaticky vytvoří 2 databáze. První se jmenuje test a je implicitně prázdná. Druhá má název mysql (neplést s názvem produktu) a obsahuje několik tabulek, v nichž je uvedeno aktuální nastavení uživatelských „kont“. Konkrétně se jedná o tabulky user, db, host, func, tables_priv a columns_priv.

Předpokládám, že jste správci MySQL, a tudíž jako jediní máte přístup k databázi mysql. Jak jsem se již zmínil, tato databáze obsahuje několik tabulek pro konfiguraci uživatelských „kont“. Začnu tabulkou user. Tato tabulka obsahuje privilegia (oprávnění) na globální úrovni. Pokud tedy má uživatel nastavena některé oprávnění v této tabulce, pak se vztahují na celý SQL server - tudíž na každou databázi, která se na něm nachází. Tato tabulka obsahuje několik polí. Jejich výčet a popis naleznete v následující tabulce:

Název pole Popis
Host Název hostitelského počítače. Tímto způsobem můžete omezit přístup pouze na určitou doménu (název či IP).
User Uživatelské jméno. Pod tímto jménem se následně přihlašujete do MySQL.
Password Uživatelské heslo. Toto heslo je z bezpečnostních důvodů ukládáno zašifrované.
Select_priv Dovoluje uživateli vykonávat výběrové dotazy (příkaz SELECT).
Insert_priv Dovoluje uživateli vkládat nové záznamy do databáze (příkaz INSERT).
Update_priv Dovoluje uživateli aktualizovat data v databázích (příkaz UPDATE).
Delete_priv Dovoluje uživateli odstraňovat záznamy (příkaz DELETE).
Create_priv Dovoluje uživateli vytvářet nové tabulky a databáze (příkaz CREATE).
Drop_priv Dovoluje uživateli rušit tabulky a databáze (příkaz DROP).
Reload_priv Dovoluje uživateli aktualizovat tabulku uživatelských účtů (příkaz FLUSH PRIVILEGES).
Shutdown_priv Dovoluje uživateli ukončit SQL server.
Process_priv Dovoluje uživateli sledovat jednotlivé požadavky na SQL serveru. Při tomto oprávnění smí odstraňovat i jednotlivé procesy.
File_priv Dovoluje uživateli číst a zapisovat do souborů na SQL serveru.
Grant_priv Dovoluje uživateli přidělovat práva dalším uživatelům.
References_priv Není mi známa funkce.
Index_priv Dovoluje uživateli vytvářet či odstraňovat indexy.
Alter_priv Dovoluje uživateli měnit strukturu tabulky.

Kromě polí Host, User a Password obsahují ostatní pole hodnotu Y nebo N tj. jestli je dané právo uděleno (Y) či nikoliv (N). Veškeré přidávání, modifikace a mazání uživatelských „kont“ se pak děje za použití standardních příkazů SQL, protože se jedná o „normální“ tabulku. Uveďme příklad:

INSERT INTO user (Host, User, Password, Select_priv) VALUES (“localhost“,“novak“,PASSWORD(“heslo“),“Y“);

Předcházející příklad umožní uživateli novak provádět výběrové dotazy v kterékoliv databázi, která je umístěna na SQL serveru. Jistě jste si všimli, že jsem použil funkci PASSWORD(). Tato funkce slouží k zašifrování hesla. Ale pozor! MySQL bere ohled na velikost písmen.

Jak mi jistě dáte za pravdu, přidělování práv na globální úrovni není příliš dobré. Většinou mají v této tabulce přidělena významnější práva pouze uživatelé, kteří mají co do činění se správou MySQL. Na začátku dnešního dílu jsem se ale zmínil o možnosti mít přístup pouze do určité databáze. Vždy totiž platí, že uživatel by měl mít pouze ta práva, která skutečně potřebuje. Jak tedy na to?

Práva ke konkrétní databázi se přidělují v tabulce db. Tato tabulka obsahuje většinu polí, která jsou v tabulce user (všechna kromě Reload_priv, Shutdown_priv, Process_priv a File_priv, která zde pozbývají smyslu), a přidává pole Db, které obsahuje název databáze, na niž se práva vztahují. Postup je obdobný jako v předchozím případě, jen s tím rozdílem, že uživatel musí být již zaveden v tabulce user. Jak tomu rozumět?

Dříve, než budeme moci uživateli přidělit práva pro přístup k dané databázi, mu totiž musíme zřídit „konto“, aby se mohl přihlásit k SQL serveru. A to právě uděláme v tabulce user. Následně mu přidáte příslušná práva v tabulce db, znovu načtete práva, a vše je hotovo. Celé to vypadá následovně:

INSERT INTO user (Host, User, Password) VALUES (“localhost“,“novak“,PASSWORD(“heslo“));

INSERT INTO db (Host, User, Db, Select_priv) VALUES (“localhost,“novak“,“uzivatele“,“Y“);

FLUSH PRIVILEGES;

Předchozí syntaxe myslím nepotřebuje žádného zvláštního komentáře. Nejdříve je na globální úrovni přidán uživatel (na této úrovni mu nejsou přiřazena žádná práva). Následně je uživateli novak přiděleno právo prohlížet záznamy v tabulce uzivatele. Na úplný závěr je znovu načtena tabulka uživatelských účtů.

Další tabulkou je tabulka host. Tato tabulka obsahuje stejná pole jako tabulka db a má více méně podobnou funkci jako tabulka db. Proto ji příliš nepoužijete. Poslední dvě tabulky jsou tables_priv a columns_priv. Ty slouží k nastavování práv k jednotlivým tabulkám resp. k jednotlivým polím v tabulce. Obě tyto tabulky obsahují následující pole:

Název pole Popis
Host Název hostitelského počítače.
Db Jméno databáze, která obsahuje danou tabulku.
User Jméno uživatele, kterému přidělujeme práva.
Table_name Jméno tabulky, ke které přidělujeme práva. Zde pozor na rozlišování velkých a malých písmen.
Timestamp Informace o poslední změně.
Column_priv Toto pole obsahuje přidělená práva (množina SET). Může obsahovat hodnoty SELECT, INSERT, UPDATE a REFERENCES, případně jejich kombinaci. Vždy však musíte jednotlivé hodnoty oddělovat čárkou.

Tabulka tables_priv navíc obsahuje pole Grantor (obsahuje jméno člověka, který práva přidělil) a Table_priv, které obsahuje přidělená práva. Jedná se opět o množinu SET, která může nabývat různých kombinací hodnot: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, REFERENCES, INDEX či ALTER (opět oddělených čárkou). Tabulka columns_priv obsahuje navíc pole Column_name, které udává název pole, na než se vztahují práva udělená v poli Column_priv.

Možnosti nastavení jsou tedy vcelku bohaté. Mnozí zkušenější uživatelé MySQL taktéž jistě dobře znají druhý způsob nastavování práv, a to ve formě použití příkazů GRANT a REVOKE. Popis těchto příkazů je však bohužel nad rámec tohoto seriálu, a případné zájemce tedy odkáži na jejich popis v manuálu. Pro ostatní pouze dodám, že s pomocí těchto příkazů docílíte prakticky stejné věci jako přímým nastavováním uživatelských „kont“.

Závěrem

Po dnešním dílu tedy již víte, jak nastavovat příslušná oprávnění jednotlivým uživatelům MySQL. V příštím, již závěrečném dílu tohoto seriálu vám povím něco málo o základní správě MySQL.
Diskuze (4) Další článek: Computer 24/01

Témata článku: Software, Programování, MySQL, Jednotlivý díl, Uživatelé, Password, Jednotlivý uživatel, Stejný dotaz, Uživatelské jméno, Drop, Bohatý výčet, Pole, Určité data, Host, Úmyslné poškození, Grant, Název databáze, Alter, Zabezpečení, Stejný závěr, Rota, Mys


Určitě si přečtěte

Nejlepší notebooky do 20 000 Kč. Tipy, co se dnes vyplatí koupit

Nejlepší notebooky do 20 000 Kč. Tipy, co se dnes vyplatí koupit

** S cenou do 20 tisíc lze vybrat solidní notebook na práci i hry ** Přenosné notebooky nabídnou i kovová těla a rychlý hardware ** Možná největší problém je nedostupnost, nejžádanější kusy jsou vyprodané

David Polesný | 33

David Polesný
VánoceNotebooky
Google spouští vlastní VPN a konkurenci se to vůbec nelíbí
Lukáš Václavík
SoukromíVPNGoogle
Testy procesorů Ryzen 5000: AMD překonalo Intel ve všech směrech

Testy procesorů Ryzen 5000: AMD překonalo Intel ve všech směrech

** AMD začalo prodávat nové procesory Ryzen 5000 s architekturou Zen 3 ** K dispozici jsou nezávislé testy z celého světa ** AMD překonává Intel ve všech směrech

Karel Javůrek | 69

Karel Javůrek
ProcesoryTestyAMD
Microsoft Defender je jeden z nejlepších antivirových programů, tvrdí výsledky AV-TESTu
Karel Kilián
Windows DefenderAntivirusWindows 10
10 míst na mapách Googlu, která nesmíte vidět. Nahradily je čtverečky

10 míst na mapách Googlu, která nesmíte vidět. Nahradily je čtverečky

** Deset míst, které nesmíte vidět ve webových mapách ** Jsou to letiště, základny i elektrárny ** Nejvíce míst tají Francie

Jakub Čížek | 21

Jakub Čížek
Mapy GoogleMapy
Velký den pro Apple: Uvedl tři nové Macy s vlastním procesorem M1
Lukáš Václavík
PočítačeApple
Čím nahradit WhatsApp: Vyberte si z 10 alternativních komunikátorů

Čím nahradit WhatsApp: Vyberte si z 10 alternativních komunikátorů

** Z WhatsAppu kvůli novým podmínkám utíkají tisíce uživatelů ** Čím nahradit populární aplikaci pro zasílání zpráv? ** Vybrali jsme pro vás 10 alternativních komunikátorů

Karel Kilián | 109

Karel Kilián
KomunikaceWhatsAppInstant Messaging

Aktuální číslo časopisu Computer

Jak prodloužit výdrž notebooku

Velké testy: gamepady a inkoustové tiskárny

Důkladný test Sony Playstation 5