Image
24.5.2016 0 Comments

Databázy / 9. časť

Späť na úvod >> Späť na seriál

Dnes si spolu prejdeme skutočne najdôležitejšiu vec v každom SQL serveri, teda MySQL nevynímajúc. Sú to prístupové práva. Práve tie robia SQL server tým spoľahlivým systémom. Bez nich by žiadny SQL systém ani nemal zmysel. Pevne verím, že to dnes spolu zvládneme.

Poznámka k práci s touto lekciou:
Nedajte sa odradiť, ak niečomu neporozumiete hneď. Preberte si jednotlivé odstavce postupne a pomaly a snažte si uvedomiť základné pojmy a významy. Pozor na to, kedy hovoríme o tabuľke USER, DB a HOST a kedy o položke user, db a host v týchto tabuľkách. (Môj veľký obdiv Montymu – autorovi MySQL - je trošičku zakalený preto, že – podľa môjho názoru – nevhodne zvolil názvy jednotlivých tabuliek a položiek v nich. No uznajte, mysql je názov SQL systém, ale aj databáze grant tabuliek a zároveň názov klienta, user je tabuľka aj položka v nej a pod.). Pre názornosť budem názvy tabuliek uvádzať veľkými a názvy položiek v jednotlivých tabuľkách malými písmenami. Pri čítaní kapitol sa stále pozerajte do grant tabuliek, aby ste si uvedomili, o ktorej položke alebo privilégiu je reč. Na kúsok papiera si značte ceruzkou väzby medzi jednotlivými tabuľkami a položkami. Aj ja som mal pri štúdiu okolo seba samé tabuľky a papiere s poznámkami a priznávam, dosť dlho som v tom „ležal“. Vyskúšajte si vzorové príklady, nastavte práva, reloadnite tabuľky a skúšajte sa potom konektovať na server. Dopredu si predstavte, aké výsledky by ste mali dostať a potom ich skontrolujte so získanými. Ak súhlasia, tak ste pokročili, ak nie, vráťte sa na začiatok. Skúšať, skúšať, skúšať. (A či učiť sa, učiť sa, učiť sa ?!?)

PRÍSTUPOVÉ PRÁVA. Už sme si raz spomínali, že nie je žiadúce, aby v databázovom systéme mohol robiť každý všetko. Pozrime sa na to opäť z pohľadu našej imaginárnej knižnice. Vieme, že napr. vedúca knižnice potrebuje do centrálnej databáze pridávať novo zakúpené knihy alebo rušiť knihy už veľmi opotrebované. Z titulu funkcie to môže urobiť ona a len ona. Zato ale referentka knižnice, ktorá vedie výpožičku kníh, potrebuje pridávať mená nových zákazníkov, zaznamenávať, aké knihy má kto zapožičané a samozrejme aj po vrátení kníh ich odpisovať z evidencie. Naproti tomu obyčajný čitateľ môže len prezerať, aké knihy sú v knižnici k dostaniu a ktoré sú práve voľné a kde sa nachádzajú. No, a aby sme to mali kompletné, pán riaditeľ – ten môže samozrejme všetko. Teda skoro.

Aby sme mohli v našom systéme zadefinovať tieto pravidlá, musíme ich obecne definovať v akýchsi tabuľkách prístupových práv. 

TABUĽKY PRÍSTUPOVÝCH PRÁV. Aj MySQL má také tabuľky prístupových práv. Hovorí sa im aj grant tabuľky – grant tables. Nachádzajú sa v databáze s názvom mysql. Do tejto databáze sa prepneme v monitore mysql príkazom use mysql (použi mysql databázu), a server hláškou Database changed (Databáza zmenená) potvrdí vykonanú zmenu.

Zadáme príkaz show tables a uvidíme 5 tabuliek s týmito názvami:

  • USER
  • DB
  • HOST
  • TABLES_Priv
  • COLUMNS_Priv

Prvé tri tabuľky USER, DB a HOST sú základné, ostatné dve sú doplnkové tabuľky práv. Dnes sa budeme zaoberať iba základnou skupinou, ktorá vo väčšine projektov plne postačuje. Doplnkové tabuľky si preberieme, keď zvládneme základnú tematiku.

Keby sme na každú tabuľku použili nám už  známy príkaz describe table, napr. describe USER,  dostaneme popis jednotlivých tabuliek. Stručný prehľad položiek v jednotlivých databázach je v tab. 1:

Tabuľka

USER

DB

HOST

Autentifikácia

Host

Host

Host

 

User

Db

Db

 

Password

User

 

 

 

 

 

Databázové a

Select_Priv

Select_Priv

Select_Priv

tabuľkové privilégiá

Insert_Priv

Insert_Priv

Insert_Priv

 

Update_Priv

Update_Priv

Update_Priv

 

Delete_Priv

Delete_Priv

Delete_Priv

 

Create_Priv

Create_Priv

Create_Priv

 

Drop_Priv

Drop_Priv

Drop_Priv

 

 

 

 

Administrátorské

Reload_Priv

 

 

privilégiá

Shutdown_Priv

 

 

 

Process_Priv

 

 

 

File_Priv

 

 

 

Grant_Priv

Grant_Priv

Grant_Priv

 

References_Priv

References_Priv

References_Priv

 

Index_Priv

Index_Priv

Index_Priv

 

Alter_Priv

Alter_Priv

Alter_Priv

Tab. 1 Štruktúra tabuliek USER, DB a HOST

Musím upozorniť, že každá verzia MySQL môže mať inú štruktúru jednotlivých tabuliek. Preto je NUTNÉ použiť príkaz describe, aby sme zistili požadované položky. Ja používam verziu 3.23-27-beta, a preto tieto príkazy budú šité na túto verziu. V iných verziách rádu 3.22 sa počty parametrov môžu líšiť (a spravidla sa aj líšia. A aby to nebolo ešte všetko, tak sa verziu od verzie mení aj poradie parametrov v časti privilégií.).
V priebehu dnešnej kapitoly a samozrejme vždy pri práci s právami  sa budeme do týchto tabuliek pozerať veľmi, veľmi často. Preto je vhodné si ich uložiť niekde poruke.

AUTENTIFIKÁCIA. Už aj z iných bezpečných systémov vieme, že sa každý užívateľ pri vstupe do systému musí autentifikovať. To sa vykonáva spravidla zadaním mena a hesla. Na základe tejto autentifikácie sa každému prihlásenému užívateľovi pridelia príslušné prístupové práva. Tu si musíme uvedomiť jednu vec. Meno a heslo užívateľa v MySQL nie je totožné s užívateľom v danom operačnom systéme, pod ktorým SQL server beží. Dokonca tento užívateľ vôbec nemusí byť v operačnom systéme vôbec definovaný. Táto výhoda sa uplatní práve v tých systémoch, kde sa za každého licencovaného užívateľa operačného systému tvrdo platí, napr. SCO Unix alebo Windows NT. To znamená, že aj keď máme licenciu len na 15 užívateľov SCO, v MySQL môžeme mať nadefinované stovky užívateľov databázovej aplikácie.
Mená a heslá užívateľov sú uložené v tabuľke USER v položke user a password. Heslá sa neukladajú v otvorenom tvare, ale kryptované funkciou password(). Pri autentifikácii sa zadané heslo zakryptuje a porovná s heslom v tabuľke.

Každú z grant tabuliek si môžeme rozdeliť na tri časti:

  • Prvá časť je autentifikačná, kde sa definuje kto (user), pod akým heslom (password), zkadiaľ (host) a kde (db) môže prístúpiť v SQL serveri.
  • Druhú časť tvoria privilégia k databázam a tabuľkám, ktoré určujú, čo môže pripojený a už autentifikovaný užívateľ vykonávať v danej databáze a tabuľkách.
  • Tretiu časť  tvoria administrátorské privilégiá. Tieto určujú, čo môže pripojený užívateľ konať so samotným SQL serverom.

Význam a popis jednotlivých privilégií je v tab. 2:

Privilégium:

Umožňuje:

Select_Priv

prezeranie tabuľky

Insert_Priv

vkladanie do tabuľky

Update_Priv

zmeny v tabuľke

Delete_Priv

vyprázdňovanie - mazenie v tabuľke

Create_Priv

vytvorenie databáz a tabuliek

Drop_Priv

zmazanie databáz a tabuliek

 

 

Reload_Priv

znovunačítanie grant tabuliek

Shutdown_Priv

ukončenie činnosti servera

Process_Priv

výpis procesov

File_Priv

čítanie a zápis do súboru

Grant_Priv

schopnosť odovzdať svoje práva iným

References_Priv

nevyužité

Index_Priv

tvoriť alebo mazať indexy

Alter_Priv

meniť štruktúru tabuliek

Tab. 2  Privilégiá

OBSAH POLOŽIEK. V autentifikačnej časti každej tabuľky sa môžu nachádzať rôzne znaky. V položkách user, host a db sa nachádza spravidla text, vyjadrujúci konkrétnu hodnotu, napr: user = ‘balu’, db =’kniznica’ a host=‘server.niekde.sk’, čo značí, že uživateľ s menom balu zo servera server.niekde.sk sa môže pripojiť do databáze knižnica.
Heslo je tiež  typu char, avšak je kryptované funkciou password a pri bežnom selekte sa javí ako skupina hexadecimálnych čísiel.
Okrem bežného textového reťazca sa v týchto položkách môžu nachádzať ešte špeciálne znaky, čo si povieme neskôr.
Pozor! Hodnoty v položkách user, password, db sú case sensitive, teda rozlišujú veľké a malé písmená. Hodnoty v položke host  sú case insensitive, teda nerozlišujú veľkosť písmen.
Toto býva častou chybou, kedy si užívateľ myslí, že zadal všetko správne, ale aj tak sa nepripojil. A ono to bolo práve v malých a veľkých písmenách.
V privilegačnej časti sa používajú iba dva znaky – “Y” a “N” ako yes a no, teda či má konkrétny užívateľ dané privilégium alebo nie.

Prístup na server

Prístup na SQL server a k jednotlivým databázam prebieha v dvoch krokoch:

  • verifikácia spojenia
  • verifikácia požiadaviek

Verifikácia spojenia

Verifikácia – overenie – spojenia vychádza z kontroly identity užívateľa. Identita užívateľa je definovaná v týchto informáciách v tabuľke USER:

  • názov počítača, z ktorého užívateľ pristupuje – položka host
  • meno a heslo užívate¾a – položky user a password

Pri pokuse o spojenie server najprv vykoná overenie totožnosti v týchto položkách. Ak súhlasia, spojenie sa vykoná, ak nie, spojenie sa odoprie.
Jednotlivé položky tabu¾ky USER môžu nadobúdať tieto hodnoty:

host položka:

  • Host hodnota môže byť meno alebo IP adresa počítača - klienta, z ktorého sa uskutočňuje spojenie. Tiež to môže byť reťazec “localhost”, ktorý indikuje lokálny – miestny – počítač. Localhost je taký host, kde na danom operaènom systéme pracuje SQL server aj klient zároveň.
  • môžeme použiť aj tzv. “žolíky” (a to znak % - percento a  _ podtržítko) a prázdny znak “”.
  • V tomto prípade hodnota “%” znamená ľubovoľný počíťač - klient. Prázdny znak, teda prázdne políčko stĺpca host, je ekvivalent „%”. Uvedomme si, čo toto znamená: Každý klient - počítač môže vykonať spojenie na náš server!

user položka:

  • žolíky nemôžeme použiť v položke user, pretože „%” značí užívateľa s menom „%”
  • môžeme použiť prázdny znak, čo indikuje „ľubovoľný (každý) užívateľ“.

Hovorí sa mu aj anonymný užívateľ (anonymous). To znamená, že môžeme zadať ľubovoľné meno. V praxi nie je vhodné definovať anonymného užívateľa, a ak áno, tak len s veľmi obmedzenými právami. Súvisí to s bezpečnostnou politikou, ktorú si teraz nebudeme preberať.

password položka:

  • heslo môže byť kryptované alebo prázdne. Prázdne heslo neznamená, že je možné zadať ľubovoľné heslo, ale značí, že užívateľ sa konektuje bez zadania hesla.

Tabuľka č. 3 obsahuje príklady  niektorých kombinácií hodnôt host a user tabuľky USER:

Položka host

user

Popis

"doma.niekde.sk"

"mior"

užívateľ mior z počítača doma.niekde.sk

"doma.niekde.sk"

""

ľubovoľný užívateľ z počítača doma.niekde.sk

"%"

"mior"

užívateľ mior z ľubovoľného počítača

"%"

""

ľubovoľný užívateľ z ľubovoľného počítača

"%.niekde.sk"

"mior"

užívateľ mior z ľubovoľného počítača v doméne niekde.sk

"192.168.10.153"

"mior"

užívateľ mior z počítača s IP adresou 192.168.10.153

"192.168.10.%"

"mior"

užívateľ mior z ľubovoľného počítača v podsieti 192.168.10.xx

Tab. 3  Príklady položiek host a user

AKO TO FUNGUJE? MySQL server si prečíta tabuľky prístupových práv vtedy, keď štartuje. Preto je potrebné pri každej zmene týchto tabuliek vykonať ich nové načítanie. Nemusíme preto server zastavovať a znova štartovať, stačí, ak vykonáme tzv. reload grant tabuliek. To môžeme vykonať priamo z mysql monitora príkazom:
mysql> flush privileges;

alebo v operačnom systéme zadaním príkazu:
mysqladmin reload

Pozor! Na vykonanie takejto operácie musíme mať dovolené privilégium reload_priv. Zatiaľ predpokladajme, že sme užívateľ root, ktorému je všetko dovolené.
Keď sa pozrieme do tab. 4, vidíme, že pán riaditeľ sa môže pripájať k MySQL serveru z troch pozícií – buď zo svojho počítača v kancelárii alebo z lokálnej konzoly servera alebo z ľubovoľného počítača v sieti. Ale ktoré práva teda bude mať?

host

user

Select_Priv

Insert_Priv

Update_Priv

Delete_Priv

Create_Priv

Drop_Priv

Reload_Priv

Shutdown_Priv

Process_Priv

File_Priv

Grant_Priv

References_Priv

Index_Priv

Alter_Priv

"%"

" riaditel "

Y

Y

N

N

N

N

N

N

N

N

N

N

N

N

"%"

""

Y

N

N

N

N

N

N

N

N

N

N

N

N

N

"pracovna"

"riaditel"

Y

Y

Y

Y

Y

Y

N

N

N

N

N

N

N

N

"localhost"

"riaditel"

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Tab. 4  Prístup používateľa riaditel

SQL server pri štarte alebo reloade (znovunačítaní tabuliek práv) nielen že tabuľky načíta, ale si ich aj vnútorne striedi od najkonkrétnejšieho k najvšeobecnejšiemu zápisu podľa tohto princípu:

  • ako prvé usporiada záznamy, kde host neobsahuje žolíky
  • nasledujú záznamy v  položke host , kde súv texte žolíky, napr. %.niekde.sk 
  • na konci sú záznamy s “%“ alebo prázdne záznamy. (Už vieme, že prázdny záznam je identický s “%”).
  • ak sú záznamy v host identické, položka user s konkrétnym menom má prednosť pred prázdnou položkou

Takže tabuľku 4 server usporiada tak, ako je to v tabuľke 5:

host

user

Select_Priv

Insert_Priv

Update_Priv

Delete_Priv

Create_Priv

Drop_Priv

Reload_Priv

Shutdown_Priv

Process_Priv

File_Priv

Grant_Priv

References_Priv

Index_Priv

Alter_Priv

"localhost"

"riaditel"

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

"pracovna"

"riaditel"

Y

Y

Y

Y

Y

Y

N

N

N

N

N

N

N

N

"%"

"riaditel"

Y

Y

N

N

N

N

N

N

N

N

N

N

N

N

"%"

""

Y

N

N

N

N

N

N

N

N

N

N

N

N

N

Tab. 5  Prístup používateľa riaditel potriedení

Server potom číta od vrcholu tabuľky, a keď narazí na identitu, ktorá patrí danému užívateľovi, priradí mu aj zodpovedajúce práva, definované pri tejto identite. Ostatné identity toho istého užívateľa, ktoré sú v tabuľke definované nižšie, už ignoruje. Takže, pohľadom do tab.č.9-5 vidíme, že pán riaditeľ, ak bude pracovať na lokálnej konzole – potažmo klávesnici počítača, kde beží MySQL server aj klient, bude mať všetky práva (1.riadok tab. 5), ale ak bude pracovať za svojím počítačom v kancelárii, budú už jeho práva čiastočne obmedzené (2.riadok tab. 5). Keď si však sadne za počítač v čitárni knižnice, bude si môcť iba jednotlivé tabuľky prezerať (Select_priv = “Y”) a vkladať do nich príslušné záznamy (Insert_priv = “Y”), ale veci spojené s administráciou tabuliek už nemôže vykonať (3.riadok tab. 5). Ak si za tento poèítaè sadne ľubovoľný čitateľ knižnice, zadá svoje meno, ktoré nie je definované v tabuľke alebo ho vôbec nevyplní (teda User = “”), je považovaný za anonymného užívateľa a bude môcť záznamy iba prezerať (4.riadok tab. 5).

VERIFIKÁCIA POŽIADAVIEK. Ak je už raz  spojenie etablované, pristúpi server k verifikácii požiadaviek. Teda overí, či na tú operáciu, ktorú sa užívateľ zrovna chystá vykonať, má privilégium. Napr., ak chce užívateľ selektovať nejakú tabuľku, server najprv skontroluje, či má tento užívateľ nastavené privilégium Select_priv. Toto privilégium môže byť nastavené v niektorej z tabuliek USER, DB alebo HOST.

Pri verifikácii požiadaviek server prezerá nastavené privilégia na tomto princípe:

Veľmi záleží na poradí tabuliek. SQL server filtruje tabuľky v tomto poradí:

  • USER tabuľku
  • DB tabuľku
  • HOST tabuľku

Teda ako prvé sa server pozrie na privilégiá do grant tabuľky USER.
USER tabuľka prisudzuje privilégiá v globálnom merítku na celý SQL server. Napr. ak má určitý užívateľ  nastavené privilégium Delete_priv (teda Delete_priv =“Y“) v tejto grant tabuľke, môže mazať záznamy vo všetkých databázach na MySQL serveri!
Inými slovami – privilégiá v USER tabuľke sú superužívateľské privilégiá. Preto tieto privilégiá prideľujme len superužívateľom, ako je serverový alebo databázový administrátor. Takému superužívateľovi sa v MySQL hovorí root. Samozrejme, ten môže tieto práva preniesť aj na iného dôveryhodného užívateľa, ktorý ho bude v  neprítomnosti zastupovať. Avšak nemusia to byť úplné práva, to však súvisí s už spomínanou bezpečnostnou politikou. (Tak teda len na okraj: každý dobrý projekt musí mať vypracovanú bezpečnostnú politiku. Tá definuje, kto, čo, kedy, ako, skadiaľ, prečo ..., a samozrejme aj spôsob archivácie dát, obnovu dát po krachu servera, ako aj ochranu proti hackerom a iné. Čert NIKDY nespí! Ale o tom možno inokedy.)
Ostatným užívateľom necháme v tabuľke USER nenastavené globálne privilégiá (teda “N”) a na definovanie ich lokálnych prístupových práv k jednotlivým databázam a tabu¾kám použijeme tabuľky DB a HOST.   

TABUĽKY DB A HOST. Tabuľky DB a HOST poskytujú privilégiá špecifické ku konkrétnym databázam. Hodnoty v jednotlivých autentifikačných poliach môžu byť špecifikované takto:

  • žolíky (“%” a “_”) môžu byť definované v host a db poliach obidvoch tabuliek
  • “%“  v položke host v tabuľke DB znamená  „ľubovoľný klientský počítač“
  • prázdny znak  “” v položke host v tabuľke DB, (teda je prázdna), znamená : Pozri sa do tabuľky HOST pre ďaľšie informácie.
  • “%“ alebo prázdny znak v položke host v tabuľke HOST znamená „ľubovoľný klientský počítač“
  • “%“ alebo prázdny znak v položke db v obidvoch tabuľkách DB a HOST znamená „ľubovoľná databáza“.
  • prázdny znak v položke user v obidvoch tabuľkách značí anonymného užívateľa

Obidve tabuľky DB aj HOST sú čítané a triedené vtedy,  keď server štartuje, teda v ten istý čas, keď USER tabuľka.
DB tabuľka je triedená podľa host, db a user položiek, HOST tabuľka je triedená podľa host a db položiek. Tak ako USER tabuľka, aj tieto sú triedené princípom od najkonkrétnejšieho po najobecnejší záznam. Samozrejme, platí prvý nájdený a zodpovedajúci triedený záznam.
Pre administratívne požiadavky (shutdown, reload a pod.) SQL server skontroluje len tabuľku USER, pretože sa inde tieto privilégiá nenachádzajú. Napr. ak užívateľ chce vykonať príkaz mysqladmin shutdown, ale v USER tabuľke nemá nastavené Shutdown_priv, príkaz sa odoprie.
Ak sa požadujú operácie s databázou alebo tabuľkou (select, insert, update a pod.), server najprv pozrie do tabuľky USER na globálne superužívateľské práva. Ak privilégium v USER tabuľke umožňuje požadovanú operáciu, tak sa prístup zabezpečí.
Ak sú privilégia v USER tabuľke nedostatoèné, server sa pozrie do tabuliek DB a prípadne HOST, kde sa podľa nastavených lokálnych práv rozhodne o umožnení alebo zamietnutí prístupu.

Najprv sa pozrie do tabuľky DB a rozhoduje sa takto:

  • pozrie na položky host, db a user. Položka db obsahuje názov databáze, kde chce užívateľ pristúpiť. Ak nie je žiadny zodpovedajúci záznam v položke host a user alebo db, prístup sa odmietne.
  • ak existuje zodpovedajúci záznam v položke user (teda meno užívateľa platí) a host nie je prázdny, ale konkrétny a správny, tak sa priznajú stanovené lokálne privilégiá.
  • ak existuje zodpovedajúci záznam v položke user a položka host je prázdna, server sa pozrie do tabuľky HOST a prehľadá tam položky host a db v tejto tabuľke. Ak v nich nie sú zodpovedajúce záznamy, prístup sa odmietne. Ak sa tu nachádzajú zodpovedajúce záznamy, privilégiá sa počítajú v intersekcii s privilégiami v DB a HOST tabuľke. Teda obidve privilégiá musia byť „Y“.

Zložité, však. A na čo je to dobré? My totiž môžeme priradiť všeobecné lokálne (pozor! nie administrátorské!!!) privilégiá v DB tabuľke a potom ich obmedzovať pre jednotlivých klientov v tabuľke HOST. Vyjadrené logicky, užívateľové privilégiá sú kalkulované takto:
privilégiá v USER tabuľke ALEBO privilégiá v DB tabuľke A ZÁROVEŇ privilégiá v HOST tabuľke,
alebo matematicky
USER OR (DB AND HOST).

Po zmene nastavení nesmieme zabudnúť tabuľky reloadnúť.
A TROCHA PRÍKLADOV. Nastal čas, aby sme si vyššie uvedenú teóriu objasnili v praxi. A ako sa vlastne s grant tabuľkami narába? No predsa presne tak, ako s ľubovoľnou tabuľkou , teda použijeme nám dobre známe príkazy select, insert, update, delete a iné. Tak ideme na to!
Začneme tým, že si vyprázdnime všetky grant tabuľky v databáze mysql. Užívateľ root je od inštalácie MySQL nastavený ako superuser, teda má všetky globálne práva na všetky databázy a ich tabuľky. Ak sme si v prvých lekciách zmenili jeho heslo, spustíme mysql monitor s parametrom mysql, aby sme sa vnorili do databáze mysql takto:
mysql –u root –pheslo_pre_roota  mysql

alebo ak nemáme nadefinované heslo pre roota, tak iba:
mysql –u root mysql

Sme pripojení na server a sme nastavení v databáze mysql.
Teraz vyprázdnime tabuľku USER príkazom:
mysql> delete from USER;

Potom vložíme prvého užívateľa root s príslušným heslom a všetkými globálnymi právami:
mysql> insert into USER values(‘localhost’,’root’,password(‘heslo’),
      ‘Y’,’Y’,’Y’, ‘Y’,’Y’,’Y’, ‘Y’,’Y’,’Y’, ‘Y’,’Y’,’Y’, ‘Y’,’Y’);

Za heslo si doplníme každý to svoje heslo!
Skontrolujeme pomocou:
mysql> select * from USER;

či sú práva nastavené tak, ako sme chceli.
Podobne vymažeme tabuľky DB, HOST a aj zatiaľ nepreberané tabuľky TABLES_Priv a COLUMNS_Priv (to aby nás nemýlili).
Keď sme tak učinili,  zadáme:
mysql> flush privileges;

čím znova načítame grant tabuľky.
Ukončíme mysql monitor príkazom exit alebo quit a pokúsime sa znova konektovať na server. Skúsime to najprv bez mena alebo s použitím iného, ľubovoľného mena, napr. monty:
mysql  (bez parametrov)

alebo

mysql –u monty

Server sa pozrie do tabuľky USER, a keďže tam nie je definovaný monty ani iný anonymous, prístup odoprie – pozri obr. 1:

Teraz zadáme správne parametre, čiže:
mysql –u root –pstanovené_heslo

a sme tam (obr. 2):

Nastavíme sa do databáze mysql použitím
mysql> use mysql;

(Mohli sme to urobiť aj ako parameter príkazu mysql priamo na príkazovom riadku operačného systému, teda mysql –u root –pstanovené_heslo mysql).
Vložíme nových užívateľov takto:
mysql> insert into USER values(‘localhost’,’riaditel’,password(‘direktor’),
      ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’);

Keďže vieme, že v privilégiách sú defaultne nastavené hodnoty “N”, nemusíme zadávať všetkých štrnásť “N”, ale stačí, ak zápis zjednodušíme
mysql> insert into USER (host, user, password) values(‘localhost’,’riaditel’,password(‘direktor’); 

[

(Kto má možnosť práce na sieti, môže si skúsiť pripojenie z rôznych počítačov, len si zmení meno počítača v položke host podľa potreby:
mysql> insert into USER values(‘pracovna’,’riaditel’,password(‘direktor’),
      ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’);

mysql> insert into USER values(‘citaren’,’riaditel’,password(‘direktor’),
      ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’);

Takto sme definovali pána riaditeľa, ktorý môže pristúpiť k SQL serveru z troch rôznych počítačov, tak ako sme si to prezentovali v teoretickej časti. Všimnime si, že aj keď to je pán riaditeľ, neudelili sme mu globálne, teda superuserské práva. Avšak jeho najvyšie postavenie v knižnici budeme definovať práve v tabuľke DB.
Väčšina ale nemá možnosť práce na sieti, teda my budeme pokračovať skúšaním na „lokále“.

]

Vložíme ďaľších troch užívateľov, veduca, referent a anonymous:
mysql> insert into USER values(‘localhost’,’veduca’,password(‘sefka’),
      ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’);

mysql> insert into USER values(‘localhost’,’referent’,password(‘pracant’),
      ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’);

mysql> insert into USER values(‘localhost’,’’,‘’),
      ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’);

Ani týmto dámam a knihomoľovi - anonymousovi sme nepridelili superuserské práva.
Vykonáme flush privileges a ukončíme mysql monitor.
Znova vyskúšame spojenie k SQL serveru, trebárs ako pán riaditeľ takto:
mysql –u riaditel –pdirektor

Čo sa stane? Server skontroluje, či v tabuľke USER existuje užívateľ riaditel s heslom direktor. Keďže áno, spojenie uskutoční. Ale: Skúsme teraz meniť nejakú databázu, napr.:
mysql> use mysql;

a vidíme, že server odmietol túto požiadavku, tak ako je to vidieť na výpise č. 3:

A je to správne, pretože pán riaditeľ nemá žiadne globálne ani lokálne práva, teda zatiaľ. Vyskúšajme zmeniť aj iné databázy, napr. kniznica. Výsledok je rovnaký.
Podobné výsledky dostaneme, ak sa bude konektovať užívateľ veduca , referent či citatel.
No, globálne práva sme zakázali, ale teraz musíme nastaviť lokálne práva.
Ako sme si v teórii povedali, lokálne práva nastavujeme v datábáze DB a HOST.
Znovu sa pripojíme k databázi mysql ako root príkazom:
mysql –u root –pstanovené_heslo

a príkazom:
mysql> insert into DB (host, db, user, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_priv, grant_priv, references_priv, index_priv, alter_priv)
VALUES (‘localhost’,’kniznica’, ’riaditel’, ‘Y’,’Y’,’Y’, ‘Y’,’Y’,’Y’, ‘Y’,’Y’,’Y’,’Y’);

definujeme, že pán riaditeľ môže z lokálneho počítača pristupovať k databazi kniznica a má plné (lokálne) databázové privilégiá.
Znova “flušneme” privilégiá a ukončíme mysql monitor. Opätovne sa pripojíme k serveru, teraz ako užívateľ riaditel. Ide to. Skúsime použiť databázu, napr. mysql. Server odmietne a my už vieme, prečo.
Ale teraz použijeme databázu kniznica. Čo sa stane? Server skontroluje identitu v tabuľke USER. Zistí, že pripojovaný užívateľ je definovaný, meno a heslo je platné. Keďže nemá stanovené žiadne globálne privilégiá, nazrie do databáze DB, či tam nie je užívateľ s menom riaditel definovaný pre databázu kniznica. Zistí, že áno a že sa môže pripojovať z lokálu. Vzhľadom k tomu, že aj toto je splnené, server umožní užívateľovi pracovať v tejto databáze s definovanými lokálnymi privilégiami. Riaditeľovi boli definované plné lokálne práva k databázi KNIZNICA (a ku všetkým tabuľkám v nej). Takže server príkaz use kniznica vykoná. Vyskúšame ľubovoľný príkaz v tejto databázi, napr.
mysql> select * from zaner;

a dostaneme očakávaný výsledok, ktorý je vidieť na obr. 4:

Presvedčíme sa, že užívateľ riaditel môže vykonávať ten SQL príkaz, ktorý je definovaný v privilégiách, môže teda vytvárať a mazať tabuľky, napĺňať alebo vyprázdňovať a pod. Vyskúšajme!
Obdobným spôsobom zadefinujeme aj pani vedúcu, slečnu referentku a čitateľa. Ale každému nastavíme iné práva, tak ako sú definované v tab. 6:

host

user

Select_Priv

Insert_Priv

Update_Priv

Delete_Priv

Create_Priv

Drop_Priv

Reload_Priv

Shutdown_Priv

Process_Priv

File_Priv

Grant_Priv

References_Priv

Index_Priv

Alter_Priv

"localhost"

"veduca"

Y

Y

Y

Y

N

N

N

N

N

N

N

N

N

N

"localhost"

"referent"

Y

Y

N

N

N

N

N

N

N

N

N

N

N

N

"localhost"

""

Y

N

N

N

N

N

N

N

N

N

N

N

N

N

Tab. 6  Prístup ostatných používateľov

Zase sa konektneme ako root (lebo len root môže pridávať užívateľov!) a zadáme:
ysql> insert into DB (host, db, user, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_priv, grant_priv, references_priv, index_priv, alter_priv)
VALUES (‘localhost’,’kniznica’, ’veduca’, ‘Y’,’Y’,’Y’, ‘Y’,’N’,’N’, ‘N’,’N’,’N’,’N’);

mysql> insert into DB (host, db, user, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_priv, grant_priv, references_priv, index_priv, alter_priv)
VALUES (‘localhost’,’kniznica’, ’referent’, ‘Y’,’Y’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’,’N’);

mysql> insert into DB (host, db, user, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_priv, grant_priv, references_priv, index_priv, alter_priv)
VALUES (‘localhost’,’kniznica’, ‘’, ‘Y’,’N’,’N’, ‘N’,’N’,’N’, ‘N’,’N’,’N’,’N’);

Už azda nemusím pripomínať potrebu „flušu“. Na skušku sa pripojíme ako anonymous. Ako? No predsa príkazom bez parametrov. Taktiež si môžeme zvoliť ľubovoľné meno, napr.
mysql -u billy

Po konektovaní použijeme databázu kniznica. Keďže aj anonymous je definovaný v tabuľke DB, zmenu databáze umožní. Zadáme príkaz select, a aj ten sa vykoná. Ale teraz skúsime pridať záznam do tabuľky ZANER. Čo sa stane? V tabuľke DB je pri userovi ““ (anonymous) právo na zápis do tabuľky (Insert_Priv=“N“) zakázané! Takže server túto požiadavku odmietne, čo potvrdzuje aj obr. 5:

Podobne si môžeme overiť práva užívateľov veduca a referent. Ich možnosti sú prene definované v tab. 6.
KONTROLA PRIVILÉGIÍ. Ako jednoducho overiť, kto má aké privilégiá? No administrátori pod Linuxom dostali do vienka veľmi užitočnú utilitku - mysqlaccess. Je to perlovský skript a bohužiaľ, neexistuje na platforme WinXX.
Silu tohoto skriptu si ukážeme inokedy.
TAJOMSTVO. Tááák, konečne sme sa prehrýzli skutočne najťažšou časťou administrácie MySQL serveru. Bez úplného pochopenia činnosti grant tabuliek sa nedá seriózne pokračovať v tvorbe aplikácií, postavených na SQL serveri.
Po dlhých hodinách, čo sme si skúšali rôzne varianty práv, prezradím sladké tajomstvo – dá sa to aj jednoduchšie! A to pomocou SQL príkazu GRANT a REVOKE. Ale aby sme ich mohli skutočne efektívne používať, musíme dokonale porozumieť činnosti grant tabuliek.  No a to vďaka dnešnej kapitole už vieme!
Nabudúce si ukážeme príkazy GRANT a REVOKE. Tým administrátorská časť seriálu skončí a pustíme sa do omnoho príjemnejšej činnosti - tvorbe aplikácií. Krásnych, oknoidných, nad ktorými aj srdce obyčajného užívateľa zaplesá radosťou. No, veď skúste donútiť vašu účtovníčku pracovať v príkazovom riadku!

Apropó, čo vám hovoria pojmy Apache, PHP, ODBC?

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Ako zbaviť fotky hmly

08.12.2016 11:59

Hmla alebo dym sú často veľmi kreatívne nástroje. No všetkého veľa škodí. Fotka potom stráca kontrast a v podstate na nej nič nevidieť. Hmlu môžete neraz následnými úpravami odstrániť alebo zredukovať ...

Ako na to

Užitočné SW nástroje

08.12.2016 11:53

AllDup v4.0.3 Určenie: program na vyhľadávanie a odstraňovanie duplicitných súborov Vlastnosti: duplicitné súbory sa vyhľadávajú len na zvolených diskových jednotkách alebo len v rámci vybraných ...

Ako na to

Fotografovanie s bleskom

08.12.2016 11:47

Ak máte moderný fotoaparát so vstavaným alebo externým bleskom, zdá sa vám téma článku triviálna. Jednoducho nastavíte vhodný režim, vyberiete najlepšiu kompozíciu záberu, exponujete a o zvyšok sa už ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá