Dnes: 18. ledna 2018    | Registrace | Hledáme | Redakce | Info | Testy | Školení | Ocenění | Nápověda | Čtenář: nepřihlášen

Rychlé odkazy
  • Hlavní stránka
  • Seznam rubrik
  • Ankety
  • Editoriály
  • TOP 15
  • KONFERENCE 2008
  • KONFERENCE 2007
  • KONFERENCE 2006
  • KONFERENCE 2005
  • KONFERENCE 2004
  • Sborník
  • Testy
  • Virtuální školení
  • Personalizace


  • Hledáte práci?
    Hledáme redaktora - pojďte s námi tvořit Databázový svět!

    Vyhledávání

    Hledej
    na Databázovém světě!



    Rozšířené vyhledávání

    Rubriky
    Aktuality
    Bezpečnost
    Business
    Česká scéna
    Datové sklady
    Dokumentace
    Dotazovací jazyky
    Hardware
    Historie
    Komentáře
    Literatura
    Metodologie
    Nondb
    Open Source
    Poradna
    Produkty
    Případové studie
    Redakce
    Rozhovory
    Standardy
    Technologie
    Tipy - triky
    Tiskové zprávy
    Vývoj
    Vývojové nástroje
    Zajímavosti

    Co je to?
    SQL
    (Structured Query Language)

    Jedná se o neprocedurální jazyk, používaný v databázových technologiích. Počátky tohoto jazyka spadají do druhé poloviny minulého století.

    Akce
    Dynamická Datová Centra
    - na semináři se seznámíte s komplexním řešením a koncepcí Dynamických Datových Center od Fujitsu Siemens Computers se speciálním důrazem na řešení FlexFrame.

    Textová inzerce
    IBPhoenix - Vše o InterBase a Firebirdu.

    Smějete se rádi? - Pak je pro vás Vtipník to pravé!

    Prodejce reklamy - Hledáme schopného prodejce reklamního prostoru, možnost i externí spolupráce.

    Přihlášený čtenář
    Nepřihlášený čtenář

    O portálu
    Databázový svět
    ISSN: 1213-5933

    Web je optimalizován pro rozlišení 1024x768, nicméně kromě větších rozlišení podporujeme i 800x600. Podrobnosti najdete zde.

    Chcete-li mít kdykoliv možnost zkontrolovat obsah našeho portálu, můžete využít podporu rss. Podrobnosti najdete zde.
    Vyvíjíme databázový a informační systém XX.


    [Metodologie] - {Začátečníci} Ve dvacátém pokračování našeho rozsáhlého seriálu o základních principech a o vývoji databázových a informačních systémů se podíváme na problematiku zabezpečení databází, mj. si ukážeme, jak nastavit či odejmout daná oprávnění. A není to nic obtížného, současné databázové platformy již nabízí dostatek prostředků pro uplatňování kvalitních bezpečnostních politik.



    Nedílnou součástí každé databáze je způsob zabezpečení uložených dat. Různě odstupňovaná hierarchie zabezpečovacích mechanismů má za úkol ochránit data kupodivu nejenom před prvoplánovými škůdci databáze, ale kupodivu též před samotnými uživateli. U uživatelů samozřejmě nesmí opatření vyznít ve smyslu "když nic nedám, nemůžeš nic pokazit". Jedná se spíše o ochranu dat v okamžicích, kdy uživatel nedomyslí dosah svého jednání a mohl by smazat to, co ve skutečnosti odstranit ani nechtěl. Pak se logicky objevují vrstvy práv (oprávnění) uživatelů, kdy je jim dovoleno mazat záznamy, aktualizovat je či vytvářet záznamy nové. K vlastnímu náhledu na zabezpečení u platformy MySQL se dostaneme za chvíli, nejprve se ale ještě chvíli pozastavíme nad jiným případem problémů existující databáze.

    Důležitou roli hraje zabezpečení také u aplikací, které využívají souběžného připojení více klientů. Prakticky si představme běžnou situaci, kdy jsou k databázi připojeni uživatelé načítající data, provádějící výpočty, zasílající dotazy, zapisující nová nebo aktualizovaná data.Problém nastane v okamžiku, kdy se stejnými daty manipuluje najednou více uživatelů.

    Mějme například následující schéma – v rámci databáze jsou uchovávány informace o aktuálním stavu zásob zboží. V okamžiku, kdy si zákazník objedná určitý druh zboží, aplikace bude ověřovat, zda-li je na skladu dostatečné množství kusů objednávaného druhu. Je-li tomu tak, zákazníkovi přislíbí zboží a odpovídajícím způsobem sníží stav zásob. Během tohoto procesu však může probíhat souběžná komunikace s jiným zákazníkem. Kód aplikace může samozřejmě obsluhovat i jiného zákazníka – díky samostatnému podprocesu (vláknu). Pokud by nebyla tato situace ošetřena, mohl by s velkou pravděpodobností nastat krizový stav, kdy si oba běžící podprocesy naruší své výpočty.

    Pro řešení obdobných situací jsou přichystány tzv. zámky. Smyslem uzamknutí tabulek je možnost poskytnutí vláknům jedinečného přístupu ke zdrojovým tabulkám. Data, která pak upravujeme nemůže ve stejný okamžik měnit souběžně pracující jedinec. Po ukončení úprav našeho podprocesu je zámek automaticky uvolňován pro využití dalšími vlákny. Příkaz požadovaného typu pak vypadá následovně:

    LOCK TABLES nazev_tabulky WRITE;
    

    Při jeho využití pak musí jeden podproces vyčkat na dokončení zpracování prvního požadavku. Pokud by dotaz či posloupnost dotazů vyžadovala výhradní přístup k více tabulkám, je to též možné. Před úpravami je ale nutné uzamknout všechny podkladové tabulky. Sejde-li se více požadavků najednou, jsou řazena podle pořadí a privilegií do front, které zajistí postupné vyřízení. Řazení ve frontách je taktéž možné ovlivnit nastavením priority pro čtení, zápis apod. V zájmu objektivity ale uveďme, že zámky jsou jen jedním ze způsobů řešení podobných problémů.

    A co tedy se zabezpečením?
    Veškerá oprávnění databázové platformy MySQL jsou ukládána do stejnojmenné databáze mysql. Jediná osoba, která by měla mít k takto cenné databázi neomezený přístup, je samotný správce systému. Prakticky je to ale databáze jako každá jiná. Pokud jste doposud neprohlíželi obsah databáze, zbývá vám vykonat nezávaznou prohlídku pro alespoň minimální seznámení s možnostmi administrace v databázovém systému.

    Datové soubory databáze mysql jsou uloženy v adresáři data základního adresáře. Pro všechny dále postupně rozebírané tabulky platí, že na ně můžeme odesílat stejné dotazy jako na všechny jiné. Jedná se ale o systémové tabulky, pro něž se užívá souhrnného pojmu tabulky uživatelských účtů, neboť obsahují všechna oprávnění postupně přidělovaná jednotlivým uživatelům. U většiny polí těchto tabulek je potřebným obsahem pouze jedna ze dvou logických hodnot - zde značených Y, tj. uživateli je specifická operace povolena, popř. N pro zákaz této konkrétní činnosti. Zabezpečovací "štít" databázového systému je pak tvořen těmito tabulkami:

    • user – obsahuje oprávnění uživatelů pro práci s daty. Tabulka user se skládá z velkého množství dále uvedených polí: Host obsahuje název hostitelského počítače, User uživatelské jméno, password heslo uživatele, Select_priv možnost spouštění výběrových dotazů SQL, Insert_priv umožnění přidávacích dotazů SQL, Update_priv umožňující aktualizaci existujících dat, Delete_priv možnost užití odstraňovacích dotazů SQL, Create_priv umožňuje vytvářet nové databáze a tabulky, Drop_priv odstraňování databází a tabulek, Reload_priv umožňuje aktualizaci tabulky uživatelských účtů příkazem FLUSH PRIVILEGES, Shutdown_priv umožňující vypínání MySQL, Process_priv sledování a odstraňování jednotlivých procesů, File_priv čtení a zápis do souborů na serveru , Grant_priv umožňuje udělovat privilegia jiným uživatelům, References_priv se nevyužívá, Index_priv umožňuje vytváření nebo odstraňování indexů, Alter_priv možnost měnit strukturu tabulek. Privilegia nastavená na této úrovni jsou globálními privilegii.
    • db – tato tabulka obsahuje téměř shodná pole jako tabulka user. Obsahuje privilegia, která se vztahují na operace uvnitř databáze, neboť se zabývá udělením práv pro jednotlivé databáze na serveru MySQL. Nové pole Db určuje konkrétní databázi.
    • host – tabulka obsahuje shodná pole s tabulkou db. Řídí přístup k databázím ze směru hostitelů, kteří se k nim mohou přihlašovat.
    • columns_priv – tabulka řídí přístup k jednotlivým sloupcům tabulek. Obsahuje následující sloupce: Host - název hostitele, Db - určení databáze s tabulkami, na které se privilegia vztahují, User - uživatel s přidělovanými privilegii, Table_name - název tabulky, Timestamp - poslední změna, Column_priv - typ privilegií pro vybrané tabulky.
    • tables_priv – řídí přístup k tabulkám a obsahuje obdobné sloupce jako přecházející tabulka.

    Nyní si uveďme alespoň jeden příklad na užití popsaných tabulek. Zkusíme si přidat nový záznam do tabulky uživatelských účtů:

    INSERT INTO user (Host,User,password)
      VALUES ('localhost','xxx',password('heslo'));
     

    Příkazem jsme přidali nového uživatele xxx, který má jediné oprávnění – pro připojení k databázovému serveru MySQL, ale může se připojit jen z místního hostitele. Pro vložení hesla heslo je užita funkce password, která heslo zašifruje a uloží jej v této podobě. Pro okamžité přihlášení nového uživatele je ještě zapotřebí aktualizovat tabulku uživatelských účtů příkazem FLUSH PRIVILEGES.

    Nastavení a odejmutí oprávnění
    Popisovali jsme možnost nastavení přístupových práv pomocí přímých úprav tabulek s účty uživatelů. Jestli vám tento postup není příliš nesedí, máte možnost využít k témuž účelu příkazu GRANT – podporuje-li to vaše databáze. Pokud se podíváte do dokumentace, jedná se na první pohled o příkaz dosti složitý, ale ve skutečnosti se s ním pracuje poměrně pohodlně. Základem nastavení přístupových práv pomocí GRANT je tvar:

    GRANT práva
      ON jméno tabulky
      TO jméno uživatele
    

    V části práva můžeme použít seznam ze slov SELECT, INSERT, UPDATE a DELETE. Tato slova pak odpovídají právům pro daný SQL příkaz. Následujícím příkazem přidělíme uživateli xxx práva na "spouštění" výběrových dotazů do všech tabulek databáze db. Uživatel xxx se navíc může připojovat z jakéhokoli počítače a jeho přístupovým heslem bude heslo.

    GRANT SELECT
      ON db.*
      TO xxx@% IDENTIFIED BY "heslo"; 
    

    Pro přidělení všech dostupných práv najednou můžeme využít slovo ALL:

    GRANT ALL
      ON db.*
      TO xxx@% IDENTIFIED BY "heslo";
    

    Pokud bychom chtěli naopak práva odebírat, máme k dispozici "opačný" příkaz – REVOKE, který má obdobné parametry jako příkaz GRANT:

    REVOKE práva
      ON jméno tabulky
      FROM jméno uživatele
    



    Související články:
    Vyvíjíme databázový a informační systém XXV. (28.12.2004)
    Vyvíjíme databázový a informační systém XXIV. (27.12.2004)
    Vyvíjíme databázový a informační systém XXIII. (16.12.2004)
    Vyvíjíme databázový a informační systém XXII. (07.12.2004)
    Vyvíjíme databázový a informační systém XXI. (16.11.2004)
    Vyvíjíme databázový a informační systém XIX. (25.10.2004)
    Vyvíjíme databázový a informační systém XVIII. (13.10.2004)
    Vyvíjíme databázový a informační systém XVII. (04.10.2004)
    Vyvíjíme databázový a informační systém XVI. (21.09.2004)
    Vyvíjíme databázový a informační systém XV. (13.09.2004)
    Vyvíjíme databázový a informační systém XIV. (25.08.2004)
    Vyvíjíme databázový a informační systém XIII. (18.08.2004)
    Vyvíjíme databázový a informační systém XII. (02.08.2004)
    Vyvíjíme databázový a informační systém XI. (14.07.2004)
    Vyvíjíme databázový a informační systém X. (07.07.2004)
    Vyvíjíme databázový a informační systém IX. (01.07.2004)
    Vyvíjíme databázový a informační systém VIII. (23.06.2004)
    Vyvíjíme databázový a informační systém VII. (16.06.2004)
    Vyvíjíme databázový a informační systém VI. (09.06.2004)
    Vyvíjíme databázový a informační systém V. (02.06.2004)
    Vyvíjíme databázový a informační systém IV. (26.05.2004)
    Vyvíjíme databázový a informační systém III. (19.05.2004)
    Vyvíjíme databázový a informační systém II. (12.05.2004)
    Vyvíjíme databázový a informační systém I. (05.05.2004)

    ( Celý článek! | Autor: Martin Pokorný | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

    Anketa
    Kolik ročně utratíte za dovolené?

    Nic 
     (1548 hl.)
    Do 1 000,- Kč 
     (1068 hl.)
    Do 10 000,- Kč 
     (999 hl.)
    Do 25 000,- Kč 
     (1378 hl.)
    Do 50 000,- Kč 
     (1016 hl.)
    Do 75 000,- Kč 
     (1178 hl.)
    Více než 75 000,- Kč 
     (1019 hl.)

    Celkem hlasovalo: 8206


    Poslední komentáře
    frontierd@126.com
    frontierd@126.com
    frontierd@126.com
    c
    http://www.coachoutl

    Newsletter
    Přihlaste si nezávazně - i bez registrace - odběr informačního newsletteru. Podrobné informace najdete zde.

    Emailová adresa:


    Kalendář
    <<  Leden  >>
    PoÚtStČtSoNe
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    

    Redakci připojuje


    Nejčtenější

    Databáze je prázdná!


    Nejvíce komentářů

    Databáze je prázdná!


    Reklama






    Nenechte si ujít články na dalších webech




    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.

    Databázový svět | dfKlub - digitální fotografie | Vtipník - vtipy přímo k Vám | Reminder - přestaňte zapomínat | Databázový svět

    Copyright (c) 2004 AVRE Publishing, spol. s r.o. Všechna práva vyhrazena