Popis základních principů práce se systémem uživatelských práv v MySQL.
Poslední dobou se stále častěji setkávám s uživateli MySQL, kteří přehlíží anebo vůbec nevědí, že MySQL má svůj vlastní systém uživatelských práv. Do značné míry je to zapříčiněno tím, že webhosting vám již přidělí účet a práva na používání vaší databáze, kde již nemůžete žádné účty vytvářet. Můžete se však lehce dostat do situace, kdy po vás vedení bude chtít, abyste ve firmě realizovali databázový server, který bude určen pro více aplikací. A v tomto případě nemůžete ukládat data z více aplikací do jednoho účtu kvůli přehlednosti. Pro tyto a další situace má MySQL systém uživatelských práv.
Nejdříve si musíme zadefinovat pojem privilegium - je to oprávnění provádět určitou činnost s určitým objektem a je vázána na konkrétního uživatele. Vždy při vytváření uživatele v MySQL mu musíte přidělit privilegia (práva). S vytvářením nových uživatelů se váže pojem princip nejnižšího oprávnění. Tento princip se aplikuje především kvůli zvýšení bezpečnosti databáze. Princip nejnižšího oprávnění říká, že: uživatel nebo procedura by měl mít nejnižší možná oprávnění, která mu umožní provést patřičný úkol. Do praxe převedeno: nebudete přidělovat uživatelům, kteří potřebují data z databáze pouze zobrazit pravomoc DROP, která může databázi nebo tabulku smazat.
Pro přidělování práv máme v MySQL příkaz GRANT. A REVOKE pro odebírání. Tyto příkazy fungují na čtyřech úrovních:
- Global - globální
- Database - pro určitou databázi
- Table - pro určitou tabulku
- Column - pro určitý sloupec
GRANT práva [sloupce]
ON položka
TO uživatel [IDENTIFIED BY 'heslo' ]
[REQUIRE volby_ssl]
[WITH [GRANT OPTION | volby_omezení] ]
Typy a úrovně práv
Každému novému uživateli můžeme přidělit poměrně mnoho práv, ne všechna jsou však vhodná pro běžné uživatele. Abychom zachovali princip nejnižšího oprávnění, je vhodné vytvořit uživatele bez práv a po konzultaci s ním mu potřebná práva nastavit. Toto řešení však nelze aplikovat vždy, proto můžeme rozdělit práva na:
- uživatelská
- administrátorská
- zvláštní
Právo | Vztahuje se na | Popis |
SELECT | tabulky, sloupce | Povoluje vybírat záznamy z tabulek. |
INSERT | tabulky, sloupce | Povoluje vkládat nové řádky do tabulky. |
UPDATE | tabulky, sloupce | Povoluje obnovovat hodnoty záznamů v tabulkách. |
DELETE | tabulky | Povoluje odstraňovat záznamy (řádky) z tabulek. |
INDEX | tabulky | Povoluje vytvářet a odstraňovat indexy z tabulek. |
ALTER | tabulky | Povoluje měnit strukturu stávajících tabulek (přejmenovávat nebo přidávat sloupce, měnit datové typy sloupců). |
CREATE | databáze, tabulky | Povoluje vytvářet nové databáze a tabulky. |
DROP | databáze, tabulky | Povoluje odstranit databáze a tabulky. |
Uživatelská práva
Práva | Popis |
CREATE TEMPORARY TABLES | Povoluje administrátorovi používat v příkazu CREATE TABLE klíčové slovo TEMPORARY. |
FILE | Povoluje načítání dat do tabulky ze souborů a obráceně. |
LOCK TABLES | Povoluje explicitní použití příkazu LOCK TABLES. |
PROCESS | Povoluje administrátorovi zobrazit si procesy serveru patřící libovolnému uživateli. |
RELOAD | Povoluje administrátorovi znovu načíst tabulky práv a synchronizovat práva, hostitele, protokoly a tabulky. |
REPLICATION CLIENT | Povoluje používat na řídicích a podřízených serverech SHOW STATUS. |
REPLICATION SLAVE | Povoluje podřízeným serverům se připojit k řídicímu serveru. |
SHOW DATABASES | Povoluje prohlížet si všechny databáze. Pokud není nastaven, vidí uživatel pouze databáze, ke kterým má práva. |
SHUTDOWN | Povoluje administrátorovi ukončit MySQL server. |
SUPER | Povoluje administrátorovi ukončit vlákna patřící libovolnému uživateli. |
Administrátorská práva
Práva | Popis |
ALL | Přidělí všechna předešlá práva. |
USAGE | Nepřidělí žádná práva, uživatel se může pouze přihlásit. |
Zvláštní práva
Jednoduchý příklad použití:
mysql> grant all
-> on *
-> to Admin identifed by '123456'
-> with grant option ;
Takto vytvoříme uživatele Admin, který má všechny práva. V běžném světě však přidělujete většinou jen určitou množinu práv.
mysql> grant usage
-> on horv_db.*
-> to horv identifed by '123456';
Tímto příkazem jsme vytvořili uživatele horv bez jakýchkoliv práv pro práci s databází horv_db. Po konzultaci s uživatelem horv zjistíte, že potřebuje většinu práv.
mysql> grant select, insert, update, delete, index, alter, create, drop
-> on horv_db.*
-> to horv;
Může se vám stát, že uživatel horv po neuvážené operaci omylem smazal jednu tabulku. Tímto si podepsal ortel a odeberete mu právo DROP na mazání tabulek a databází.
mysql> revoke drop
-> on horv_db.*
-> from horv ;
Problematika systému uživatelských práv je složitější, ale tento úvod by vám měl pro pochopení principu a využítí poskytnout kvalitní základ.