Máte právo nevypovídat, aneb jak fungují v MySQL oprávnění.
3.3.2006 06:00 | Petr Zajíc | přečteno 21640×
Právě se v seriálu dostáváme k poměrně rozsáhlé oblasti správy
databáze, a tou je oprávnění jednotlivých uživatelů. MySQL obsahuje
poměrně silný koncept oprávnění, a proto jej v několika dalších dílech
podrobně prozkoumáme. Kvalitně nastavená oprávnění mohou samozřejmě
zvýšit bezpečnost serveru a naopak - při špatně nastavených oprávněních
můžete přijít o data nebo se - což je mnohdy ještě horší - údaje z
databáze mohou dostat do nepovolaných rukou.
Základní princip oprávnění, který MySQL používá je v zásadě totožný
s většinou jiných databázových systémů. Funguje tak, že pokud chcete s
databází pracovat, je třeba se nejprve identifikovat pomocí
uživatelského jména. Toto uživatelské jméno je samozřejmě unikátní,
takže se nemůže stát, že by dva uživatelé na jednom databázovém serveru
měli stejné uživatelské jméno.
Pozn.: Na druhou stranu je možné,
že se pod jedním uživatelským účtem vytvoří několik připojení k
databázi. Ty mají potom z hlediska oprávnění rovnocenné podmínky.
Dalším bezpečnostním prvkem je heslo. Tady už teoreticky je možné,
aby dva různí uživatelé měli heslo stejné; i když v praxi to nastane
zřídkakdy. Je rovněž teoreticky možné heslo nepoužívat, ale to
podstatně snižuje bezpečnost systému. Na základě kombinace
uživatelského jména a hesla je rozumným způsobem zajištěno, že se
přihlašuje opravdu ten, kdo heslo obdržel. I když s jistotou se to
tvrdit nedá, heslo moho být zcizeno.
Následně se přihlášený uživatel pokusí vykonat na databázi nějaký
příkaz - vybrat data, manipulovat s daty nebo spravovat databázi. Před
každým takovým příkazem jsou zkontrolována oprávnění a buď je akce
povolena, nebo je zakázána.
Uvedený přístup funguje obdobně u naprosté většiny databází. MySQL
má ještě rozšíření v tom smyslu, že jako součást přihlašovacích
informací může DBMS brát v úvahu počítač, z něhož se k databázi
připojujete. Tak tedy například uživatel "franta" může se svým
heslem přistupovat k serveru z adresy 192.168.0.1, ale tentýž uživatel
nemůže přistupovat ze stroje 192.168.0.2. Tím se možnosti zabezpečení
dosti rozšiřují - lze například zakázat nebo povolit přístup k databázi
z místní sítě nebo z internetu.
Na druhou stranu je dobré zmínit se o tom, že MySQL nepoužívá
integrovaný systém přihlašování známý uživatelům Windows. Integrovaný
(trusted) systém zjednodušeně funguje tak, že "když tě ověří systém,
smíš i do databáze". MySQL pochopitelně nic takového nepodporuje,
protože je multiplatformní a uvedený princip by fungoval pouze na
Windows NT (2000, XP).
V moderních databázových systémech samozřejmě nejde jen o to
uživateli něco povolit nebo zakázat, ale jde i o to, jak jemné může
takové nastavení být. Proto se dají oprávnění vymezit nejen pro celý
server, ale i pro jednotlivé drobnější celky. MySQL nezůstává v tomto
trendu pozadu, takže pro uživatele lze zajistit následující věci:
O jaká práva se konkrétně jedná? Pokud jde o data, lze povolit nebo
zakázat, že uživatel může:
V případě databází existují práva vytvářet či měnit tabulky, měnit
sloupce v tabulkách či vytvářet dočasné tabulky. Existují práva pro
správu, umožňující měnit práva ostatním uživatelům nebo měnit nastavení
systému. Je toho hodně, ale je v tom systém. Idea je ta, že
prostřednictvím kombinace práv by mělo být možné povolit nebo zakázat
prakticky cokoli.
Databáze MySQL ukládá oprávnění - jak asi tušíte - do zvláštní,
systémové databáze. Ta se jmenuje mysql
a je vytvořena při instalaci serveru. Tato databáze obsahuje několik
tabulek, které ukládají oprávnění uživatelů pro globání přístup, pro
jednotlivé databáze, tabulky a sloupce. Jak uvidíme v příštím díle,
oprávnění jsou z tabulek načítána jako klasická data, což znamená, že
přímou změnou těchto tabulek pomocí akčních dotazů můžeme oprávnění
spravovat. Uvidíme ale také, že existuje sada příkazů SQL, která to
udělá za nás s mnohem větším komfortem.
Protože ve správě systému by měla vládnout tvrdá totalitní ruka
administrátora, bude se nejspíš při přidělování práv pro databázi
používat následující zásada: Co není povoleno, je zakázáno. Většina
správců si tedy bude přát použít postup "povolit všem co nejméně" a
"povolit více, jen pokud to nezbytně potřebují". Zní to tvrdě, ale
účinně se tak dá udržet v databázi pořádek.
V provozu tedy není časté, aby jednotlivý uživatel mohl dělat
všechno. Existují spíše uživatelské účty pro práci s daty, uživatelské
účty pro nastavování serveru a třeba uživatelské účty pro zálohování
dat. Rovněž nebývá časté, že by se více lidí přihlašovalo pod jedním
uživatelským účtem. Naopak, každý má typicky svůj účet a svoje heslo.
Běžný uživatel při práci s MySQL přiliš nenarazí na oprávnění.
Důvodem je fakt, že v typické situaci bude mít (třeba na hostingu) k
dispozici jednu databázi, a v ní bude moci provozovat jakoukoli
myslitenou akci (obvykle kromě smazání databáze samotné). Uživatelé
jsou tedy omezeni na "svoji" databázi a mohou v ní vytvářet a měnit
tabulky, pracovat s daty a vytvářet pohledy, funkce a procedury.
Zároveň většinou nemají přístup ke konfiguraci systému.
Tento přístup je léty ověřený a obvykle postačí pro webhosting. Spokojen bude jak uživatel, tak správce. Zcela jiná situace však nastane, když bude třeba používat více databází, více uživatelů pracujících se stejnými daty nebo připojovat se z různých míst. Pak přijdou na řadu oprávnění - a leckdy bude pěkný hlavolam nastavit je tak, aby odpovídaly skutečným potřebám praxe.
Jinými slovy - pokud používáte MySQL pouze na webu a jako uživatelé, pravděpodobně se nemusíte záležitostmi kolem oprávnění příliš vzrušovat. Pokud jste správci nebo pokud potřebujete nastavit konkrétní systém, pak se Vám bude líbit následující díl, který se bude nastavováním oprávnění zabývat prakticky.