| |
[ 24. July 2000]
- Martin_Nemecek
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
|
|
| |
|
"MySQL časť jedenásta - nastavovanie prístupových práv" | Login / vytvor konto | 3 Komentárov |
|
Za obsah komentárov je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok. |
chyba (Skóre: 0) kým: Anonym dňa 26. April 2001 | posledni prikaz by podle mne mel znit mysqladmin -u root -p reload. honza p. |
[ Odpoveď ] Re: MySQL časť jedenásta - nastavovanie prístupových práv (Skóre: 0) kým: Anonym dňa 19. May 2001 | Uz je to nejaky dlouhy cas, co jsem tu cetl takovyto clanek ohledne pridelovani prav, a ze je nutne MySQL reloadnout a pote take uplne vypnout a zapnout. Literatury sice uvadeji, ze to staci jen reloadnout, ale zkusenost je takova, ze je potreba server po reloadu vypnout a zapnout. Opravdu mi to podle toho navodu fungovalo. Ale pokud to zkousim nyni, tak mi to nefunguje a nevim, kde delam chybu. pokud napisu: myslq -u root -p reload, tak se rpesi prihlasuju do DB reload a nasledne me to vyzve k zapsani hesla. Rozhodne tim nereloadnu server. Nejak si nyni nemohu vzpomenout, jak je prikaz pro reload, a proto sem vlastne pisi. Nemohu najit totiz ten clanek, co zde byl uveden a opravdu mi to podle neho fungovalo.
Diky.
debak@hkcz.cz |
[ Odpoveď ] |