Pohledy, účty a privilegia v MySQL

Pavel Tipy & triky, Databáze

Mnoho lidí v MySQL umí vytvořit tabulky, naplnit ji daty a používat. Databázové systémy toho ale umí mnohem více a dnes ukážu jeden příklad, co jsem využil u eshopu. Obsahuje pohledy a přiřazení práv k nim.

Pohledy, účty a privilegia v MySQL

Začneme hned tím, jaký byl požadavek.

Máme 3 eshopy na jedné VPS, každý se svou DB. Je potřeba udělat co nejjednodušší výpis obratu všech 3 eshopů po měsících.

Úplně nejjednodušší bylo napsat SQL dotaz a poslat jim ho, ať si jej spouští přímo v databázi. Toto ale rozhodně není pohodlné. Udělat skript pro výpis potřebuje zase další konfigurační soubor pro přístupy atd.

Rozhodl jsem se tedy vytvořit 3 pohledy, a novému uživateli dát přístup pouze k těmto pohledům. Po přihlášení do Adminera vidí pouze 3 pohledy, které se ale chovají stejně jako tabulky. Ty si může prohlížet, ale nemůže v databázi nic měnit, i když to není omezení pohledů, viz níže.

Vytváření pohledů a uživatelů

Adminer nabízí možnost vytvořit pohled a také spravovat uživatele, není tedy potřeba znát SQL příkazy pro vše. Začneme hned vytvořením prvního pohled. Na výpisu všech tabulek úplně dole je odkaz Vytvořit pohled. Zde máme pole pro zadání SQL dotazu, který reprezentuje data v pohledu. V mém případě to bylo toto:

SELECT DATE_FORMAT(`date_add`, '%Y-%m') AS `rok_mesic`,
    COUNT(`total_paid`) AS `celkem_objednavek`,
    SUM(`total_paid`) AS `celkem_zaplaceno`
FROM `ps_orders`
WHERE `current_state` = 4
GROUP BY DATE_FORMAT(`date_add`, '%Y-%m')

Obrázkový náhled v Admineru. Název databáze jsem poté změnil na ostatní názvy, a vytvořil všechny 3 pohledy, ale v jedné databázi. 

Následně jsem vytvořil nového uživatele, kterému jsem přidal opět přístup pouze k těmto pohledům.

Přidání práv novému uživateli

K čemu jsou dobré pohledy a jak fungují?

Pohledy jsou vhodné přesně pro účel, který jsem nastínil. Pro omezení přístupu uživatelům. Pokud totiž vytvoříte pohled pouze na některé řádky (omezíte výpis pomocí WHERE), uživatel může také přes pohled data upravovat v původní tabulce, pokud má práva zapisovat do pohledu. Toto ale neplatí, pokud použijete seskupení apod.

Materializované pohledy, které také MySQL i Adminer umí vytvořit,  jsou už trochu složitější, a při správném použití zvyšují výkon výpisů, protože si ukládají kopie dat. Ale to už by bylo na delší a podrobnější vysvětlení.

Práva a závislosti

Možná vás napadlo, jak uživatel může číst data z tabulky, ke které nemá přístup, i když to dělá přes pohled. Je to jednoduché, pohled vytvořil uživatel, který to právo má. Kdybychom původnímu uživateli na tabulku práva odebrali, pohled by také přestal fungovat.

Zde je trochu problém se závislostmi. Jak zjistíte, co vše se může pokazit, když uživateli odeberete práva, nebo smažete tabulku apod.? No těžko. V Oracle existuje funkce deptree_fill, která vám závislosti zobrazí. V MySQL to ale tak jednoduché není. Prý to umí nástroje jako MySQL Workbench, ale osobní zkušenost nemám.
Tak pořádně vše dokumentovat.


Pokud máte nějaké zkušenosti s pohledy a právy, nebo máte jen doplňující otázky, zeptejte se v komentářích.

Přidat komentář

Právě odpovídáte na existující komentář. Zrušit

Komentáře

Novinky z blogu

Přidání balíčku do Composeru bez Packagist

Composer umožňuje přidat balíček, který není zveřejněn na Packagist. Stačí, aby byl ve veřejném či privátním git repozitáři, dostupný lokálně na serveru v jiné složce nebo...

Další články