[Grafika] [WebTip] [Fotografování] [Galerie] [MujMac] [Printing]
  Redakce: info (at) builder.cz   Inzerce: reklama (at) grafika.cz
Diskuzní fóra
.Net (68472)
ASP (1591)
ActiveX (168)
Allegro (136)
Assembler (3926)
C++ Builder (23160)
C/C++ (44499)
Databáze (30680)
Delphi (78808)
DelphiX (1655)
DirectX (1464)
Java (39508)
JavaScript (12598)
Matematické programy (2178)
OOP a UML (732)
OpenGL (6920)
Php (65225)
PowerBuilder (464)
Problémy a algoritmy (10473)
Programování v Linuxu (2000)
Právo a programování (3384)
Python (1353)
Ruby (136)
Visual Basic (12078)
Visual C++ (12956)
Wap (56)
Web (10895)
Web servery (5549)
Win32 (13553)
Windows CE (865)
XML/XSL (1860)
Textová inzerce
Služby Builder.cz
  • Bazar - koupím(0)
  • Bazar - prodám(0)
  • Hledám práci(0)
  • Nabízíme práci(0)
  • Projekty(0)
  • PHP část XXIII. - MySQL - přístupová práva
    správně nastavená práva v SQL jsou základem úspěchu. Jak na to v mysql vám poradí tento článek.
    Php krok za krokem
    Předchozí díl: PHP - Část XXII. (MySQL - modifikace a mazání dat v tabulce)

    Následující díl: PHP část XXIV. - PostgreSQL
    Autor: Marek Bražina
    Rubrika: PHP
    Publikováno: 15.12. 2000
     Tisk článku
    Poslat odkaz emailem
     

    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...


    Zpět na začátek stránky

    Autor: Marek Bražina
    Klikni pro další články autora

    Hodnocení článku
    1 | 2 | 3 | 4 | 5
    Aktuální známka: 2.67
    (Počet známek: 6381)

    Komentáře k článku
    marian bubenik15.06.12:44doplnit
    Tichacek :o)))20.12.13:59MySQL - pristupova prava - par drobnosti ....
         





    info@builder.cz
    Vydává Grafika Publishing, s.r.o.
    Copyright (c) 1997-2002 Všechna práva vyhrazena