PHP část XXIII. - MySQL - přístupová práva - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



PHP

PHP část XXIII. - MySQL - přístupová práva

15. prosince 2000, 00.00 | správně nastavená práva v SQL jsou základem úspěchu. Jak na to v mysql vám poradí tento článek.

V této části se budeme zabývat bezpečnostními otázkami databází. Jelikož většinou databáze obsahují osobní data, jako např. uživatelské jméno a heslo, adresu, telefon atd., je třeba tato data chránit před nechtěnými zraky. Proto většina databázových serverů vyžaduje před začátkem práce s databází přihlášení daného uživatele. Pokud přistupujeme k databázi v PHP skriptech, k databázi se za nás přihlašuje PHP funkce, která jako parametry obsahuje rovněž přihlašovací údaje k databázi (MySQL_Connect();). Ani touto cestou se tedy do databází bez prověření přístupových práv nedostaneme. Pro nastavení přístupových práv k databázi existuje v jazyce SQL funkce GRANT. Samotná MySQL databáze sice tento SQL standard podporuje (nevypisuje chybné hlášky při použití této funkce), ale práva takto nastavená absolutně ignoruje, protože používá vlastní bezpečnostní systém pro řízení přístupů k databázím, založený na databázi se jménem 'mysql' a třech tabulkách v ní obsažených, které se jmenují 'user', 'db' a 'host'. Pro zachování standardu jazyka SQL se tedy nyní podíváme na nastavování přístupových práv pomocí funkcí SQL.

Nastavování přístupových práv pomocí SQL příkazů

K přidělení přístupových práv k tabulce slouží SQL příkaz GRANT. Tento příkaz nastavuje přístupová práva k jednotlivým tabulkám !!! (ne k celé databázi). Syntaxe tohoto příkazu:

GRANT práva
ON tabulka
TO uživatel

Jako práva se zde uvádějí SQL příkazy pro manipulaci s daty v databázi, které může v této tabulce daný uživatel provádět. Př.:

GRANT SELECT, UPDATE ON zamestnanci TO franta;

Tímto SQL příkazem bychom uživateli franta udělili práva pro provádění SQL příkazů SELECT a UPDATE v tabulce zamestnanci.

Pokud bychom některému uživateli chtěli přidělit všechna práva, můžeme místo výpisu povolených SQL příkazů použít slovo ALL, které zajistí nastavení práv pro provádění všech operací.

Na stejném principu rovněž funguje odebírání práv. V tomto případě se SQL příkaz jmenuje REVOKE. Má velmi podobnou syntaxi příkazu GRANT:

REVOKE práva
ON tabulka
FROM uživatel

V podstatě je příkaz stejný, až na název klíčových slov REVOKE a FROM, není tedy třeba vysvětlovat jeho použití.

Nastavování přístupových práv v MySQL

Jak jsem uvedl již na začátku článku, MySQL používá vlastní mechanismus pro nastavování přístupových práv. Hlavní rozdíl spočívá v tom, že pomocí SQL se nastavují přístupová práva pro jednotlivé tabulky, kdežto v MySQL se práva nastavují pro celou databázi. Abychom mohli práva nastavit, musíme se nejdříve přihlásit jako správce databáze, tedy uživatel root:

mysql -u root -p mysql

Nyní se přístupová práva nastavují již standardními SQL příkazy pro manipulaci s daty. Data se však ukládají do speciální databáze s názvem 'mysql', která obsahuje tabulky 'user', 'db' a 'host'. Pokud tedy chceme přidat uživatele franta, provedeme to následujícím SQL příkazem:

INSERT INTO user (host, user, password)
VALUES ('localhost', 'franta', password('maminka'));

Tímto jsme uživateli franta přidělili heslo maminka a také jsme zadali, že k databázi může přistupovat pouze z lokálního počítače (localhost). To pro nás v PHP znamená, že PHP skripty, které chtějí přistupovat k databázi, musí být umístěny na stejném počítači jako MySQL. Jinak by místo localhost musela být uvedena jiná adresa, ze které by bylo možné přistupovat k databázi.

Uživatel franta ale ještě nemá přidělena práva k žádné databázi. To napravíme pomocí dalšího SQL příkazu:

INSERT INTO db (host, db, user, insert_priv, select_priv, update_priv, delete_priv)
VALUES ('%', 'zamestnanci', 'franta', 'Y');

Tímto jsme tomuto uživateli přidělili práva provádět v databázi zamestnanci tyto SQL příkazy: INSERT, SELECT, UPDATE a DELETE. Vidíte, že položky jednotlivých práv odpovídají názvům SQL příkazů.

Také jste si určitě všimli, že v tomto případě mají SQL příkazy poněkud nestandardní syntaxi.

Po změně přístupových práv je nutné restartovat MySQL, aby se načetla nová přístupová práva.

Příště se jen lehce podíváme do světa PostgreSQL...

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: