Uživatelé a přístupová práva v MySQL
Zabezpečení dat proti neoprávněnému přístupu patří v MySQL mezi to nejdůležitější. Její nastavení není nejjednodušší, po přečtení následujících řádků by pro vás ale nemělo být problémem.
Po instalaci a provozním nastavení MySQL je třeba přidat uživatele, jejich hesla a přidělit jim přístupová práva. Během provozu můžete systému vznést také požadavek na změnu práv nebo zrušení uživatele. Systém řízení přístupu v MySQL je poněkud odlišný od ostatních SQL serverů.
Řízení přístupu
Základní funkcí řízení přístupu je rozpoznat uživatele přistupujícího z daného počítače a přidělit mu příslušná práva nad databázemi. Informace o uživatelích a právech jsou uloženy v tabulkách „user“, „db“, „host“, „tables_priv“ a „columns_priv“ patřících do databáze „mysql“. Tato databáze byla vytvořena již během instalace. Data z ní se načítají při každém spuštění SQL serveru.
Typy privilegií
V tabulkách databáze „mysql“ se vyskytují následující sloupce. Jednotlivým uživatelům přihlašujícím se z daných počítačů můžete přidělit tato práva:
|
Práva pro definici a manipulaci s daty:
select, insert, update a delete potřebuje uživatel k vykonávání příslušných příkazů;
index je vyžadován pro vytváření a rušení indexů v tabulkách;
alter umožňuje použít ALTER TABLE;
create, drop dovolují vytvářet a rušit databáze a tabulky v nich;
grant dovoluje danému uživateli předat všechna jeho práva i ostatním uživatelům;
file dává svolení číst a zapisovat soubory na serveru pomocí příkazů LOAD DATA INFILE a SELECT INTO OUTFILE.
Práva pro správu serveru (tyto akce můžete vykonávat pomocí aplikace mysqladmin, která je umístěna v podadresáři /bin):
reload dovoluje provést příkazy reload (znovunačtení tabulek uživatelů a práv), refresh (flush všech tabulek a logů), flush-privileges (to samé, co příkaz reload), flush-hosts, flush-logs, flush-tables (příkaz refresh provede flush všeho; tyto se specializují na hosty, logy a tabulky);
shutdown dává právo provést příkaz shutdown (ukončení běhu SQL serveru);
process je nutný pro provedení processlist (seznam vláken běžících na serveru s uživateli, kteří je spustili), kill (ukončení procesů vláken ostatních uživatelů, na vlastní procesy má každý práva automaticky).
Jak pracuje systém řízení přístupu
Nejprve se kontroluje, zda má uživatel dovolen přístup. Je rozdíl, když se „milda“ hlásí z počítače „milda“ nebo z počítače „alfonz“. Kontroluje se platnost celé identifikační trojice (uživatel – heslo – počítač). Nezapomeňte také, že uživatelská jména a hesla v MySQL nemají nic společného s těmi v operačním systému počítače, na kterém SQL server běží. Připojení tedy proběhlo v pořádku a klient posílá požadavky. Při každém z nich se kontroluje oprávnění uživatele k vykonání dané operace.
Struktura tabulek s privilegiemi
MySQL používá tabulky „user“, „db“ a „host“ v obou případech řízení přístupu, tj. jednak při přihlašování, jednak při obsluze požadavků. A jen pro druhý případ jsou určeny další dvě tabulky: „tables_priv“ a „columns_priv“. Pro přesné údaje, co který sloupec privilegií v těchto pěti tabulkách znamená, čtěte výše – Typy privilegií.
Tabulka „user“
V této tabulce jsou uloženi uživatelé se svými hesly a počítači, odkud se mohou k SQL serveru připojovat. Zároveň se jim zde přisuzují práva pro definici a manipulaci s daty a práva pro správu serveru. Práva zde přidělená mají globální platnost nad všemi databázemi na serveru. Následující tabulka ukazuje strukturu tabulky „user“ v databázi „mysql“.
|
Sloupec „Host“ může být název počítače nebo IP adresa nebo „localhost“. Může obsahovat znaky divokých karet – procento („%“) zastupující 0-n znaků a podtržítko („_“) zastupující právě jeden znak. Hodnoda „%“ platí za jakýkoli řetězec, resp. počítač.
Ve sloupci „user“ znaky divokých karet použít nemůžete. Máte možnost nechat políčko prázdné – tzv. anonymní uživatel. S tímto řádkem pak souhlasí kterékoli uživatelské jméno.
„Password“ můžete nechat také prázdný. Neznamená to, že kterékoli heslo je správné, ale uživatel se musí připojovat bez hesla. Neprázdný sloupec obsahuje zakryptované heslo.
Všechny ostatní sloupce nabývají jedné z hodnot „Y“ nebo „N“ podle toho, zda daná práva přidělíte nebo ne.
Tabulka „db“
Nad danou databází (sloupec „Db“) mohou mít jednotliví uživatelé (sloupec „User“), připojující se z různých počítačů (sloupec „Host“), rozdílná práva (všechny zbývající sloupce).
|
Ve sloupcích „Host“ a „Db“ můžete použít znaky divokých karet. Hodnota „%“ ve sloupci „Host“ znamená kterýkoli počítač a hodnota „“ (prázdná) přikazuje, aby se systém řízení přístupu podíval do tabulky „host“.
Tabulka „host“
Nad danou databází (sloupec „Db“) je dovoleno z různých počítačů (sloupec „Host“) provádět rozdílné akce (všechny zbývající sloupce).
|
Hodnota „%“ nebo „“ ve sloupci „Host“ znamená kterýkoli počítač. Hodnota „%“ nebo „“ ve sloupci „Db“ tabulky „db“ a zároveň tabulky „host“ představuje kteroukoli databázi. Prázdná hodnota „User“ v obou tabulkách znamená anonymní uživatel.
Tabulka „tables_priv“
Další zjemnění přístupových práv na úrovni tabulek umožňuje „tables_priv“. Zde opět platí, že při přístupu do dané tabulky (sloupec „Table_name“), příslušející dané databázi (sloupec „Db“) a podle uživatele a počítače („User“, „Host“) systém určí, jaké operace jsou povoleny.
|
Sloupce „Db“, „Table_name“ a „Column_name“ nemohou obsahovat znaky divokých karet nebo zůstat prázdné. Sloupce „Table_priv“ a „Column_priv“ jsou typu set, tzn. že mohou nabývat žádné, jedné, více nebo všech hodnot z dané množiny. Pro „Table_priv“ je množina: „Select“, „Insert“, „Update“, „Delete“, „Create“, „Drop“, „Grant“, „References“, „Index“, „Alter“ a pro „Column_priv“: „Select“, „Insert“, „Update“, „References“.
Tabulka „columns_priv“
Nastavení přístupových práv na úrovni jednotlivých sloupců tabulky umožňuje „columns_priv“. Při přístupu ke sloupci (jeho název je ve sloupci „Column_name“) z tabulky (sloupec „Table_name“), v databázi (sloupec „Db“) a podle uživatele a počítače („User“, „Host“) se určí, jaké operace jsou povoleny.
|
Sloupce „Db“, „Table_name“ a „Column_name“ nemohou obsahovat znaky divokých karet nebo zůstat prázdné. Sloupec „Column_priv“ je typu set. Množina jeho možných hodnot je: „Select“, „Insert“, „Update“, „References“.
Rekapitulace významu tabulek
user určuje všechna povolená připojení (Host – User – Password). Kterákoli práva vyplývající pro danou trojici mají globální působnost na všechny databáze na serveru.
db popisuje, kteří uživatelé mohou přistoupit k jakým databázím z jakých počítačů. Přiřazení práv určují, které operace jsou povoleny.
host se používá jako rozšíření tabulky „db“. Když chcete, aby se daný řádek tabulky „db“ týkal více počítačů. Tedy, když potřebujete zajistit, aby jeden uživatel mohl používat databázi z několika počítačů na síti, nechejte sloupec „Host“ v tabulce „db“ prázdný a pak do tabulky „host“ uveďte všechny počítače.
tables_priv a columns_priv mají podobný význam, jako tabulka „db“. Práva z nich plynoucí mají daleko menší dopad. Jsou zjemněny na úroveň jednotlivých tabulek resp. sloupců. Pomocí tohoto mechanismu docílíte stejného efektu, jako v případě vytvoření pohledu (CREATE VIEW), jehož účelem je zpřístupnění jen některých sloupců tabulky jen některým uživatelům.
Kdy začínají platit změněná práva
Při změnách pomocí k tomu určených SQL příkazů GRANT, REVOKE a SET PASSWORD se změny promítnou ihned. Pokud změníte tabulky privilegií přímo (INSERT, UPDATE), je třeba vykonat flush privileges nebo reload, aby nová nastavení začala platit.
Nastavení počátečních práv
Po instalaci se vytvoří tabulky privilegií a do nich je zaznamenán uživatel root, který má neomezená privilegia na úplně všechno. Jeho heslo je ale prázdné, tzn. kdokoli se může připojit jako root. Tento nebezpečný stav změníte následovně: Na příkazovém řádku (shell) počítače, kde běží MySQL, spustíte konzoli mysql. Spustitelný soubor se nachází v podadresáři /bin a nazývá se mysql.exe na Windows a mysql na Linuxu (tento název jsem použil pro další příklady, ve Windows si připište ještě „.exe“).
|
Přidání nového uživatele a nastavení jeho práv
Po předchozí akci má již superuživatel nastaveno heslo. Připojte se tedy znovu k MySQL pomocí konzole mysql. K přidání uživatele a práv tentokrát použijte příkazu GRANT.
|
Na prvním řádku jste přidali uživatele „milda“ s heslem „mildovo_heslo“. Milda má dovoleno se připojit jen z počítače, na kterém běží SQL server, tj. „@localhost“. Byla mu přidělena veškerá práva „ALL PRIVILEGES“ na všechny databáze a všechny tabulky v nich „*.*“. Druhý řádek zakládá uživatele „alfonz“ s heslem „alfonzovo_heslo“, který se může přihlásit z kteréhokoli počítače na této planetě (@“%“). Na všech tabulkách databáze alfonz („alfonz.*“) má právo select a pro administraci může spustit RELOAD.
V tomto případě není nutný příkaz flush privileges. Nyní to samé provedete pomocí přímého přístupu do tabulek privilegií. Uvedu jen první a druhý řádek.
|
Odebrání práv
Pro odebrání práv je určen příkaz REVOKE. Následující příklad odebere uživateli „milda“ právo „FILE“.
|
A nyní to samé přímým přístupem k tabulkám v databázi „mysql“.
|
Změna hesla
Uživatel „milda“ si chce změnit heslo na „mildovo_nove_heslo“. Nejprve se musí připojit k SQL serveru pod svým uživatelským jménem a pak zadat příkaz pro změnu hesla.
|
Tímto postupem si změní své heslo každý uživatel, který používá při přihlašování k SQL serveru heslo. Root může změnit heslo všem pomocí přímého přístupu do tabulky „user“. Také nastaví heslo pro uživatele s prázdným heslem, kteří pro přihlašování na SQL server heslo nepoužívají. Server jim totiž nedovolí si příkazem SET PASWORD heslo zavést.
Pravidla zabezpečení
Nikdy nedávejte možnost komukoli, kromě uživatele „root“, přistupovat k databázi „mysql“.
Vždy udělujte jen ta práva, která jsou nutná pro daný úkol.
Povolte přístup jen z minima počítačů. Root by měl mít dovoleno přihlásit se jen z „localhost“.
Zrušte anonymní uživatele.
Všem zaveďte heslo pro přihlašování.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Certifikáty Entrust ztratí důvěru Google Chrome
8. července 2024 -
Praktické rady na zabezpečení redakčního systému WordPress
27. února 2023 -
Webový správce souborů Filestash – dojmy a recenze
29. července 2024 -
Vaše pošta může být špatně nastavena – svěřte ji profesionálům
13. července 2023
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024