MySQL časť jedenásta - nastavovanie prístupových práv

Databázu a tabuľky máme hotové, naplnili sme si ich aj údajmi, rôznym spôsobom sme si ich skúšali vyberať, ďalej sme ich modifikovali a mazali, menili štruktúru tabuľky. Dnes našim tabuľkám pridelíme zodpovedajúce prístupové práva.

Hlavným dôvodom je ich zabespečenie pred nepovolaným a neautorizovaným prístupom. Pre každú tabuľku v databáze môžeme nadefinovať, ktorý užívateľ má k nej prístup a na akej úrovni. Čiže aké operácie s ňou môže vykonávať. K nastaveniu týchto prístupových práv slúži príkaz GRANT. Jeho použitie je nasledovné:

GRANT /práva/
ON /nazov_tabulky/
TO /meno_uzivatela/

Položka /práva/ zodpovedá nastaveniu prístupových práv na danú tabuľku. Na tomto mieste môžeme použiť niekoľko príkazov MySQL, na ktoré sa bude pridelenie prístupového práva vzťahovať. Jedná sa o tieto príkazy: SELECT, INSERT, UPDATE a DELETE. Ak chceme prideliť všetky prístupové práva na danú tabuľku, použijeme príkaz ALL.

Za ON v našom príklade musí nasledovať meno tabuľky, pre ktorú dané oprávnenia nastavujeme. Na záver, za TO, zadáme užívateľa na ktorého sa dané nastavenie vzťahuje.

Nad databázou, ktorú úžívateľ vytvoril má väčšinou absolútne práva a je oprávnený na nej vykonávať akékoľvek operácie. Ak však vytvoríme script, pomocou ktorého budeme otvárať našu db a pracovať s ňou, je výhodnejšie - z bespečnostného hľadiska vytvoriť nového užívateľa a prideliť mu len tie práva, ktoré sú nevyhnutné na prácu s db.

Ak teda chceme užívateľovi "nobody" povoliť plný prístup k tabuľke "Videofilmy", použijeme nasledovný príkaz:

GRANT ALL ON Videofilmy TO nobody

Keď budeme chcieť užívateľovi "nobody" dať iba prístup na prezeranie tabuľky, použijeme nasledovný zápis:

GRANT SELECT ON Videofilmy TO nobody

Ak budeme potrebovať z nejakého dôvodu odobrať určitému užívateľovi prístupové práva do nejakej tabuľky, urobíme to jednoducho pomocou príkazu REVOKE:

REVOKE /práva/
ON /nazov_tabulky/
TO /meno_uzivatela/

Nie je však všetko také jednoduché ako na prvý pohľad vypadá. Tento systém prideľovania a odoberania príst. práv nefunguje na všetkých serveroch. Príkaz GRANT totiž všetky serveri nepodporujú. Aj keď sa síce tvária že áno (keď prístupové právo pomocou GRANT pridelíte, všetko vypadá o.k, server neprotestuje až na jednu drobnosť - prístup nefunguje...) Pôjdeme na to teda inak. A síce takto:

Najskôr sa prihlásíme do db ako root:

mysql - u root -p mysql

Teraz pridáme užívateľa "deep" s heslom "214@abc" a predpokladajme že sa bude môcť hlásiť len z lokálného stroja. To znamená, že web server musí bežať na lokálnom počítači, teda tom na ktorom sa bude hlásiť užívateľ "deep". Teraz pridáme užívateľa "deep" do tabuľky užívateľov "user":

INSERT INTO user (host, user, password)
VALUES ('localhost', 'deep', password('214@abc'));

Užívateľa sme pridali, teraz nám už zostáva pridať mu prístupové práva (rozhodneme sa pre čítanie z db-moja_databaza):

INSERT INTO db (host, db, user, select_priv)
VALUES ('%', 'moja_databaza', 'deep', 'Y');

Ak by sme chceli užívateľovi "deep" prideliť aj iné prístupové práva, pomocou príkazu INSERT s príznakom 'Y' nastavíme ďalšie položky: insert_priv, delete_priv, update_priv.

Po zmene prístupových práv je potrebné aby si ich MySQL server znovu načítal. To môžeme uskutočniť pomocou nasledovného príkazu:

mysql -u root -p reload


Developer,
Stiahnuté z Developer.sk