640 likes | 841 Vues
BEZPE ČNOSŤ DATABÁZ Bezpečnosť informačných systémov. Peter Erdélyi 4. ročník Škol. rok : 2003/2004. Architektonick é komponenty a bezpečnosť.
E N D
BEZPEČNOSŤ DATABÁZBezpečnosť informačných systémov Peter Erdélyi 4. ročník Škol. rok : 2003/2004
Architektonické komponenty a bezpečnosť • V nasledujúcej diskusii bude používaná terminológia od výrobcu databázového servra Oracle, ale aj ostatní výrobcovia databázových servrov ponúkajú podobnú bezpečnostnú funkcionalitu, ktoré sa však líšia v úrovni úspešnosti ich implementácie. • Bezpečnosť databáz je zvyčajne podporovaná na dvoch miestach: mimo databázy a vo vnútri databázy.
Databázy podporujú funkcie sieťovej bezpečnosti: -integrácia podnikovej bezpečnostnejinfraštruktúry - single-sign on - podpora bezpečných protokolov ako SSL - jednoduchá kryptografia a protokoly • Predchádzajúce technológie sú používané, aby sa dali autentifikovať všetci používatelia usilujúcich sa o komunikáciu s databázou. • Tieto metódy majú veľmi málo spoločné s teóriou relačných databáz a sú implementované len kvôli vytvoreniu dôveryhodnej linke medzi používateľským klientom a databázovým servrom.
Ak už používateľ bol autentifikovaný databázou a bola vytvorená bezpečná komunikácia, tak sa používateľ už nachádza vo vnútri databázy a jeho požiadavky sú zabezpečované vnútornými bezpečnostnými mechanizmami. • Tieto mechanizmy sú nasledovné: • Správa relácií(Session management) - Na úrovni relácií, ak sa používateľ prihlási do databázy, tak databáza nastaví premenné pre danú reláciu, ktoré sú platné počas trvania tejto relácie. Uchovávajú sa stavové informácie, aby mohli byť úspešne vykonané transakcie a na konci úspešne ukončená komunikácia.
Vlastníctvo objektov (Object ownership) - V databázovej schéme je možné zadefinovať vlastníctvo databázových objektov ako tabuľka, index, pohľad, procedúra atď. Používatelia, ktorý vlastnia tieto objekty môžu zadefinovať práva pomocou príkazov GRANT a REVOKE a tak umožniť alebo zakázať ostatným používateľom prácu s týmito objektmi. • Zaobaľovanie objektov (Object encapsulation) - Zaobaľovanie objektov je dosiahnuté pomocou balíčkov a storovaných procedúr. Balíčky obsahujú kolekciu storovaných procedúr, ktoré podporujú jasne definované transakcie, používané aby používateľ mal obmedzené práva pre prácu s databázovými objektmi. Používateľ má právo vykonávať, ale nie modifikovať storované procedúry.
Používateľ je blokovaný proti priamemu prístupu k údajom v databáze, pretože storované procedúry sa vykonávajú s právami vlastníka procedúry a nie s právami používateľa. Používateľ musí mať dostatočné práva, aby mohol pristúpiť k údajom. Od verzie 8.0 a vyššie databázy Oracle dovoľujú administrátorovi nakonfigurovať bezpečnostné práva pre storované procedúry, aby bežali s právami INVOKER namiesto DEFINER. • Triggre (Triggers) - Triggre sú transparentné procedurálne definície pripojené k tabuľkám v databáze. Triggre sú aktivované v čase ak sa uskutoční nejaká udalosť nad danou tabuľkou. Triggre môžu byť spustené pred alebo po snahe modifikovať tabuľku. Triggre môžu byť špecifikované, aby sa vykonali raz nad celou tabuľkou alebo raz pre každý riadok tabuľky.
Predikátové aplikácie (Predicate application) - Databáza je schopná modifikovať požiadavky používateľa za behu, pridávaním predikátov k požiadavke, aby sa zamedzila jej platnosť. • Viacúrovňová označovaná bezpečnosť(Multi-level labeled security) - Údaje v databáze môžu mať prídavné štrukturované atribúty, ktoré môžu kontrolovať prístup k týmto údajom na najnižšej úrovni. Týmto spôsobom databáza môže pristupovať s najjemnejšou bezpečnostnou politikou k jednotlivým riadkom tabuľky pred vykonaním príkazov SELECT, UPDATE, INSERT a DELETE. • Ďalšie výrobcom špecifické mechanizmy (Other vendor-specific features) - Tieto mechanizmy môžu rozšíriť bezpečnostný model o ďalšie dôležité prvky, ale sú väčšinou patentom chránené.
Kontrola prístupu založená na rolách • Databázy implementujú RBAC (Role-Based Access Control) pomocou databázových rolí. Privilégium je právo vykonávať niektoré operácie nad objektom alebo spúšťať nejakú akciu vo vnútri systému. Používateľ môže vlastniť privilégia pomocou, ktorých sa môže pripojiť na databázu, iniciovať reláciu, vytvárať databázové objekty ako tabuľka alebo index, spúšťať niektoré DML(Data Manipulation Language) príkazy nad objektmi vlastnené iným používateľom alebo spúšťať storované procedúry. • Privilégiá môžu byť prideľované používateľom priamo alebo pomocou rolí. Rola je množina prístupových práv spojená s nejakou obecnou funkciou.
Databázy poskytujú kontrolu prístupu založenú na rolách pridelením používateľov k rolám a použitím príkazov GRANT a REVOKE pre povolenie alebo zakázanie prístupupoužívateľov alebo rolí k databázovému objektu. • Oracle podporuje privilégiá na úrovni systému a objektov. Schopnosť prideľovať privilégiá je sama o sebe privilégium a je povolená len administrátorovi databázy alebo používateľom, ktorým bolo toto právo pridelené príkazom GRANT ANY PRIVILEGE. Používateľ automaticky vlastní privilégiá na všetky objekty v jeho schéme a môže prideľovať prístupové práva nad týmito objektmi všetkým používateľom patriacich do iných schém. • Príkazy DML (Data Manipulation Language) môžu byť obmedzené na stĺpce v tabuľkách.
Napríklad, príkazy INSERT a UPDATE v tabuľke môžu byť obmedzené na niektoré stĺpce, aby sa na tieto stĺpce príkazy nevzťahovali.Do týchto stĺpcov je nastavená hodnota NULL, ak používateľ bez dostatočných práv sa ju pokúsi modifikovať. • Používatelia môžu vlastniť aj privilégiá na spúštanie DDL (Data Definition Language) príkazov, ktoré dovoľujú meniť vlastnosti tabuliek, vytvárať triggre, vytvárať indexy atď. • Používatelia môžu byť prideľovaní do rolí založených na funkciách vykonávaných v danej firme a tak vlastniť len privilégiá na prácu nad tabuľkami databázy, ktoré sú nevyhnutné pri vykonávaní činnosti ich funkcie. Role môžu byť dynamicky prideľované alebo odoberané, aby boli privilégiá obmedzené v kontrolovanom spôsobe. Role môžu byť zabezpečené heslom. Používateľ musí poznať heslo, aby bol oprávnený používať danú rolu.
Slovník údajov(The Data Dictionary) • V slovníku údajov sa ukladajú informácie o štruktúre databázových objektov. Metadáta (údaje o údajoch) popisujú ako sú aktuálne údaje štrukturované a ako sú uložené v databáze. Slovník údajov definuje pohľady do metadát, na ktoré sa môžeme dotazovať. • Slovník údajov v Oracle-i je vlastníctvom Oracle používateľa SYS, ktorý nemôže byť menený iným používateľom a je automaticky spravovaný databázou. Pohľady v slovníku údajov organizujú objekty do troch kategórií: objekty vlastnené súčasným používateľom, objekty prístupné súčasným používateľom a všetky objekty.
Oracle Label Security • Viacúrovňové bezpečnostné modely v databázach si vynucujú povinnú kontrolu prístupu, definovaním hierarchie label-ov a priradením rozsahu label-ov používateľom a riadkom v každej bázovej tabuľke. Používateľom sú priradené session label-y z ich rozsahu lebel-ov, keď sa po prvýkrát pripoja na databázu. Používateľ najprv musí prejsť kontrolou, aby sa zistilo či má dostatočné práva pre používanie databázových objektov, pohľadov a storovaných procedúr. Na tomto mieste, predtým ako by používateľ mohol pristúpiť k údajom, prídavná bezpečnostná politika label-ov je použitá. Táto politika dovoľuje používateľom čítať údaje na úrovni ich session label-u a úrovne pod ním a zapisovať údaje na úrovni jeho session label-u.
Predchádzajúci MLS produkt Trusted Oracle implementovala túto politiku pridaním stĺpca ROWLABEL ku každej tabuľke v databáze, zahrňajúc slovník údajov. Všetky prístupy k dátam boli riešené cez tento stĺpec. • Firma Oracle vyvinula aj ďalší prvok pre zvýšenú kontrolu prístupu k údajom v jej databázach, ktorá sa nazýva Oracle Label Security (OLS). Funkcia OLS podporuje komplexný model prístupu k údajom na úrovni riadkov v tabuľkách. Súčasná verzia OLS sa odlišuje od obvyklej povinnej kontrole k prístupu k dátam v niektorých detailoch. • Label-y používajú štruktúru s troma poliamy. Tieto tri polia sa nazývajú: úroveň, oddiel a skupina.
Úroveň (Level) – Úrovne sú organizované hierarchicky a majú sémantiku typicky používanú vo vojenských organizáciách: - verejná (public) úroveň, - súkromná (proprietary) úroveň, - obmedzená (restricted) úroveň, - tajná (secret) úroveň, - prísne tajná (top secret) úroveň atď. • Oddiel (Compartment) – Oddiely v rámci jednotlivých úrovní odpovedajú kategóriám informácií. Kategórie nie sú organizované hierarchicky v rámci úrovní. Povoľujú obmedzenie prístupu k dátam založené na kontexte alebo obchodnej logike (business logic).
Používatelia s prístupom k istej úrovni môžu pristupovať len k im prislúchajúcim kategóriám v rámci danej úrovne.Používateľom sú pridelené oddiely Čítanie a Zápis. Ak používateľ chce pristúpiť k riadku v tabuľke, potom jeho oddiel Čítanie a Zápis je porovnávaný s oddielom Čítanie a Zápis riadku. Ak sú totožné len potom bude daný riadok sprístupnený používateľovi. Údajový element môže prislúchať viacerým oddielom. • Skupina (Group) – Tretie pole label-ov definuje vlastníctvo. Definície vlastníctva môžu byť hierarchické. Toto tretie pole má jednu neobvyklú vlastnosť, ktorá povoľuje definíciu prídavných metód prístupu, založených na voľnom uvážení.
Label-y môžu byť usporiadané ako nezávislé úrovne, úrovne spojené s oddielmi alebo všetky polia spolu. Skupiny reprezentujú prídavný stupeň slobody v definovaní bezpečnostnej politiky. Odporúča sa však, aby skupiny boli používané opatrne, lebo ich chybná konfigurácia by mohla odporovať hlavnej bezpečnostnej politike databázy.
Bezpečnosť z pohľadu SQL • Jazyk SQL (Structured Query Language) je štruktúrovaný dotazovací jazyk, ktorý umožňuje základné operácie s databázou. Jazyk SQL má tri časti: • DDL(Data Definition Language) - poskytuje prostriedky pre zadefinovanie relačnej schémy bázy dát. • DML(Data Manipulation Language) - umožňuje základné operácie s údajmi, ktoré sú uložené v báze dát. • DCL(Data Control/Access Language) - poskytuje prostriedky pre kontrolu údajov s dôrazom na bezpečnosť a integritu. Štandard SQL poskytuje podporu transakciám.
Základné príkazy pre zabezpečenie obnovy a konkurentnosti sú COMMIT pre normálne ukončenie a ROLLBACK pre abnormálne ukončenie. Na zaistenie bezpečnosti a integrity bázy dát slúžia príkazy CREATE VIEW, CREATE ROLE, GRANT a REVOKE. • V SQL sú dva principiálne prístupy k bezpečnosti, mechanizmus pohľadov (View) a operácie GRANT a REVOKE. Pohľady sa používajú na zakrytie senzitívnych dát pre neautorizovaných používateľov. Príkaz CREATE VIEW slúži na výber stĺpcov z databázy, ktoré majú byť používateľovi dostupné. Pohľad sa správa ako tabuľka s názvom meno_pohľadu, ktorá pozostáva z množiny riadkov a stĺpcov vybraných príkazom SELECT. Pohľad odzrkadlí všetky zmeny do zodpovedajúcej základnej tabuľky, ak táto nezmenila štruktúru po vytvorení pohľadu.
Operácia GRANT. Pre vykonanie ľubovoľného SQL príkazu používateľ musí mať priradené vhodné práva pre kombináciu operácií a operandov, inak bude príkaz odmietnutý. Práva sa týkajú príkazov SELECT, INSERT. UPDATE a DELETE. Práva INSERT a UPDATE môžu byť obmedzené na špecifikované stĺpce. Typy prideliteľných práv: • Používateľ, ktorý vytvorí tabuľku, má všetky aplikovateľné práva, ako aj možnosť prideľovať práva iným používateľom. • Používateľ s právom prideľovať práva, môže prideliť a meniť práva iným používateľom.
Používateľovi môže byť pridelené právo na používanie pohľadu, nie základnej tabuľky. • SQL štandard špecifikuje množinu prístupových pravidiel, ktorými sa definujú práva potrebné pre rôzne kombinácie dátových objektov a operácií. Definuje tiež dva príkazy, GRANT a REVOKE, ktoré umožňujú používateľom prideliť alebo odobrať práva. Termín používateľ by mohol byť nahradený vhodnejším - identifikátor autorizácie (authlD).
Identifikátor autorizácie • Podľa SQL štandardu je niekoľko identifikátorov autorizácie : aktuálny authID, modulový authID, authID SQL a authID schémy. Niektoré alebo všetky authID môžu mať tú istú hodnotu, ale všetky sú jedinečné. • Aktuálny authID identifikuje aktuálneho resp. bežného používateľa. Význam tohoto identifikátora spočíva v tom, že systém kontroluje, či používateľ má právo na ním požadovanú operáciu so základnou (bázovou) tabuľkou.
Modulový authID identifikuje majiteľa modulu. Tento identifikátor sa definuje príkazom MODULE s klauzulou AUTHORIZATION. V prípade, že klauzula je vynechaná, modul nemá vlastníka a neexistuje žiadne authID. Štandard nehovorí, aké práva sú potrebné na vytvorenie modulu, pretože celý mechanizmus vytvárania modulov závisí od implementácie. AuthID SQL slúži ako implicitný authlD použitý v kontexte, ak žiadny iný authlD nieje použitý. Na špecifíkovanie tohoto authID sa používa klauzula USER v príkaze CONNECT. V prípade, že klauzula je vynechaná, authID SQL je definovaný v závislosti od implementácie. AuthID schémy identifikuje vlastníka schémy. Na špecifíkovanie tejto identifikácie slúži klauzula AUTHORIZATION príkazu CREATE SCHEMA. V prípade vynechania klauzuly vlastníkom schémy sa stáva používateľ s SQL authlD.
Privilégiá a prístupové práva • Rozlišujeme tri skupiny prístupových práv k databázam: • Connect - používateľovi umožňuje vykonávať nasledovné príkazy nad databázou: SELECT, INSERT, UPDATE, DELETE a pohľady. • Resource - používateľovi umožňuje vykonávať: vytvárať tabuľky, indexy, prístup k diskovému priestoru. • DBA - používateľ: databázový administrátor (správca) môže vykonávať neobmedzené operácie so všetkými databázami v systéme.
Nasledujúci zoznam sumarizuje všetky privilégia, ktoré sú definované v SQL štandarde. Uvedené privilégia s výnimkou práva USAGE majú význam tabuľkových privilégií. • USAGE- právo použiť špecifickú doménu. • SELECT- právo pristupovať na všetky stĺpce špecifikovanej tabuľky, vrátanestĺpcov pridaných do tabuľky neskôr. • INSERT(x)- právo vkladať údaje do špecifikovaného stĺpca x príslušnej tabuľky. • INSERT- právo vkladať údaje do všetkých stĺpcov špecifikovanej tabuľky, vrátanestĺpcov pridaných neskôr.
UPDATE(x)- právo modifikovať špecifikovaný stĺpec príslušnej tabuľky. • UPDATE- právo modifikovať všetky stĺpce špecifikovanej tabuľky, vrátanestĺpcov pridaných neskôr. • DELETE- právo rušiť riadky zo špecifikovanej tabuľky. • REFERENCES(x)- právo referencie na špecifikovaný stĺpec x príslušnej tabuľky v podmienkach integrity. • REFERENCES- právo referencie na všetky stĺpce špecifikovanej tabuľky v podmienkach integrity, vrátaneneskôr pridaných stĺpcov.
Pohľady (VIEW) • „Dynamický pohľad” je forma na riadenie prístupových práv. Je to fiktívna tabuľka založená na stĺpcoch jednej alebo viacerých tabuliek, prípadne ďalších pohľadov. Pri vytváraní pohľadu sa vyberú určité údaje, ktoré bude obsahovať. Pomocou prideľovania prístupových práv umožníme prístup používateľovi iba k zvolenému pohľadu. • Prvý význam majú pohľady v tom, že umožňujú zakryť senzitívne údaje pred neautorizovanými používateľmi. Druhý význam pohľadu sa využíva v rozsiahlych databázach, kde z viacerých tabuliek vyberáme určité stĺpce a príkazom SELECT ich spojíme do jedného pohľadu, ktorý budeme neskôr využívať.
Vytvorením pohľadudefinujeme nový pohľad v databáze. Syntax CREATE VIEW view_name [column_1,…,column_n] AS SELECT statement;
Odobratie pohľadu: odstránenie pohľadu z databázy (nemá žiadny vplyv na tabuľky, ktorých sa pohľad týkal). Syntax: DROP VIEW view_name; Príklad • Nasl.príklad umožní všetkým používateľom pracovať s pohľadom cust_public, ktorý zobrazuje iba časť tabuľky customer. CREATE VIEW cust_public AS SELECT name, address, city FROM customer; GRANT SELECT ON cust_public TO PUBLIC REVOKE ALL ON customer FROM PUBLIC;
Príklad • Pohľad vytvorený nad viacerými tabuľkami: CREATE VIEW invoce_from_john AS SELECT invnr, date, amount, name FROM invoice, customer WHERE customer.name = 'John‘;
Príkaz GRANT v PostgreSQL Syntax GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] TO { username | GROUP groupname | PUBLIC } [, ...] GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE dbname [, ...] TO { username | GROUP groupname | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ([type, ...]) [, ...] TO { username | GROUP groupname | PUBLIC } [, ...] GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] TO { username | GROUP groupname | PUBLIC } [, ...] GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] TO { username | GROUP groupname | PUBLIC } [, ...]
Popis • Príkazom GRANT sa dá nastaviť špecifické práva pre objekt (tabuľka, pohľad, databáza, funkcia, schéma atď.) pre jedného používateľa alebo skupinu používateľov. Tieto práva sú pridané k už existujúcim právam, ak už nejaké boli vytvorené. • Kľúčové slovo PUBLIC indikuje, že práva budú pridelené všetkým používateľom, vrátane tých, ktorí budú vytvorení neskôr. PUBLIC môže byť chápané ako implicitná skupina používateľov, ktorá vždy zahrňa všetkých používateľov. Poznamenajme, že používateľ bude vlastníkom práv pridelených jemu, vlastníkom práv skupiny do ktorej patrí a vlastníkom práv pridelených ako PUBLIC.
Nie je žiadna potreba prideľovať práva používateľovi nad objektom, ktorý sám vytvoril, pretože implicitne vlastní všetky práva. (Pre prípad bezpečnosti je dobrým zvykom, aby sa tento používateľ zriekol niektorých práv nad objektom, ktorý sám vytvoril.) Poznamenajme, že schopnosť prideľovať a odoberať práva nad objektom, ktorý používateľ vytvoril je dedičná (teda automatická) a táto schopnosť nemôže byť stratená. • V závislosti od typu objektu, pôvodné predvolené nastavenie práv môžu zahrňať niektoré práva pridelené PUBLIC. Pri predvolenom nastavení je zamietnutý verejný prístup pre tabuľky a schémy, vytváranie TEMP tabuliek v databázach, právo EXECUTE pre spúštanie funkcií a USAGE pre jazyky. Používateľ, ktorý objekt vytvoril však tieto predvolené práva pridelené PUBLIC môže odobrať.
Aby bola dodržaná najväčšia bezpečnosť, príkaz REVOKE by sa mal použiť v tej istej transakcii ako v ktorej bol objekt vytvorený. V tom prípade neexistuje žiadny spôsob ako pristúpiť k práve vytvorenému objektu iným používateľom. • Nastaviteľné práva sú: • SELECT • INSERT • UPDATE • DELETE
RULE - umožňuje vytvoriť pravidlo nad tabuľkou alebo pohľadom. • REFERENCES - umožňuje vytvoriť cudzí kľúč v tabuľke. Pri vytváraní cudzích kľúčov je nutné, aby toto právo bolo nastavené v referujúcej aj referovanej tabuľke. • TRIGGER - umožňuje vytvoriť trigger nad danou tabuľkou. • CREATE - pre databázy umožňuje vytvoriť nové schémy v rámci databázy a pre schémy umožňuje vytvoriť nové objekty v rámci schémy.
TEMPORARY, TEMP - umožňuje vytvoriť dočasné tabuľky počas používania databázy. • EXECUTE - umožňuje použiť špecifikovanú funkciu a použiť operátory, ktoré sú implementované vo funkcii. • USAGE - pre procedurálne jazyky umožňuje použitie špecifikovaného jazyka pre tvorbu funkcií v danom jazyku. Pre schémy umožňuje prístup k objektom, ktoré sa v schéme nachádzajú. • ALL PRIVILEGES - umožňuje prideliť všetky vyššie uvedené práva naraz.
Poznámky • Poznamenajme, že superpoužívateľ databázy môže pristupovať ku každému objektu bez ohľadu na to aké práva sú pre daný objekt pridelené. Pristupovať k databázovým objektom z konta superpoužívateľa je odporúčané len v nevyhnutných prípadoch, kvôli dodržaniu najväčšej bezpečnosti. • V súčasnej verzii PostgreSQL (verzia 7.3) na to, aby sme pridelili práva len jednotlivým stĺpcom a nie celej tabuľke musí sa vytvoriť pohľad z požadovaných stĺpcov nad tabuľkou a prideliť práva pohľadu. • Poznamenajme, že v štandarde SQL92 existuje možnosť prideľovania práv pre jednotlivé stĺpce tabuľky, podľa syntaxu:
GRANT privilege [, ...] ON object [ ( column [, ...] ) ] [, ...] TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ] • V tomto detaile sa PostgreSQL odkláňa od štandardu SQL92. • Ak v PostgreSQL chceme zistiť už pridelené práva použijeme príkaz \dp v psql nasledovne: lusitania=> \dp mytable Access privileges for database "lusitania" Schema | Table | Access privileges --------+---------+---------------------------------–---- public | mytable | {=r,miriam=arwdRxt,"group todos=arw"} (1 row)
Hodnoty sa interpretujú nasledovne: =xxxx –- práva pridelené PUBLIC uname=xxxx -- práva pridelené používateľovi uname group gname=xxxx -- práva pridelené skupine gname r -- SELECT ("read") w -- UPDATE ("write") a -- INSERT ("append") d -- DELETE R -- RULE x -- REFERENCES t -- TRIGGER X -- EXECUTE U -- USAGE C -- CREATE T -- TEMPORARY arwdRxt -- ALL PRIVILEGES (pre tabuľky)
Predchádzajúci výpis dostaneme po príkazoch GRANT: GRANT SELECT ON mytable TO PUBLIC; GRANT SELECT,UPDATE,INSERT ON mytable TO GROUP todos; • Ak stĺpec "Access privileges" je prázdny pre nejaký objekt, znamená to, že objekt má predvolené nastavenie práv (teda jeho pole práv je NULL). Predvolené práva vždy zahŕňajú všetky práva vlastníka objektu a môžu ešte zahŕňať niektoré práva pridelené PUBLIC v závislosti na type objektu, ako to už bolo vyššie spomenuté. Prvý príkaz GRANT alebo REVOKE pre objekt nastaví predvolené práva (napríklad {=,miriam=arwdRxt}) a potom ich modifikuje podľa príkazu.
Príkaz REVOKE v PostgreSQL Syntax REVOKE { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] REVOKE { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE dbname [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] REVOKE { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ([type, ...]) [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] REVOKE { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...] REVOKE { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] FROM { username | GROUP groupname | PUBLIC } [, ...]
Popis • Príkaz REVOKE umožňuje používateľovi, ktorý objekt vytvoril odobrať pridelené práva od používateľa alebo skupiny používateľov. Kľúčové slovo PUBLIC označuje implicitne definovanú skupiny všetkých používateľov. • Poznamenajme, že používateľ bude vlastníkom práv pridelených jemu, vlastníkom práv skupiny do ktorej patrí a vlastníkom práv pridelených ako PUBLIC. Preto, ak napríklad sa odoberie právo na príkaz SELECT od PUBLIC to ešte neznamená, že všetci používatelia stratia právo na príkaz SELECT. Používatelia, ktorým toto právo bolo pridelené priamo budú ho ešte stále vlastniť. • Práva sú podobné ako pri príkaze GRANT.
Príklady • Odober právo na príkaz INSERT od PUBLIC na tabuľku filmy: REVOKE INSERT ON filmy FROM PUBLIC; • Odober všetky práva od používateľa krokyna tabuľku filmy: REVOKE ALL PRIVILEGES ON filmy FROM kroky;
Poznámky • Ak používateľ A pridelí práva používateľovi B s klauzulou WITH GRANT OPTION a používateľ B tieto práva pridelí používateľovi C, potom používateľ A môže tieto práva kaskádne zrušiť kľúčovým slovom CASCADE. V prípade, že používateľ A sa pokúsi odobrať toto právo a použije kľúčové slovo RESTRICT, potom príkaz zlyhá.
Nastavovanie prístupových práv v MySQL • Hlavným cieľom je zabezpečenie databázy pred nepovolaným a neautorizovaným prístupom. Pre každú tabuľku v databáze môžeme nadefinovať, ktorý použí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 prava ON nazov_tabulky TO meno_pouzivatela;
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 musí nasledovať meno tabuľky, pre ktorú dané oprávnenia nastavujeme. Na záver, za TO, zadáme používateľa na ktorého sa dané nastavenie vzťahuje.
Syntax GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON {tbl_name | * | *.* | db_name.*} TO user_name [IDENTIFIED BY [PASSWORD] 'password'] [, user_name [IDENTIFIED BY [PASSWORD] 'password']] ... [REQUIRE NONE | [{SSL| X509}] [CIPHER cipher [AND]] [ISSUER issuer [AND]] [SUBJECT subject]] [WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # | MAX_UPDATES_PER_HOUR # | MAX_CONNECTIONS_PER_HOUR #]] • Jednotlivé kľúčové slová sú podrobne vysvetlené v rozsiahlom manuáli MySQL.
Nad databázou, ktorú použí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 skript, pomocou ktorého budeme otvárať našu databázu a pracovať s ňou, je výhodnejšie - z bezpečnostného hľadiska vytvoriť nového používateľa a prideliť mu len tie práva, ktoré sú nevyhnutné na jeho prácu s databázou. • Ak teda chceme používateľovi "kroky" povoliť plný prístup k tabuľke "videofilmy", použijeme nasledovný príkaz: GRANT ALL ON videofilmy TO kroky;
Keď budeme chcieť používateľovi "kroky" dať iba prístup na prezeranie tabuľky, použijeme nasledovný zápis: GRANT SELECT ON videofilmy TO kroky; • Ak budeme potrebovať z nejakého dôvodu odobrať určitému používateľovi prístupové práva do nejakej tabuľky, urobíme to jednoducho pomocou príkazu REVOKE: REVOKE prava ON nazov_tabulky TO meno_pouzivatela;
Úplná syntax príkazu REVOKE v MySQL vyzerá nasledovne: REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON {tbl_name | * | *.* | db_name.*} FROM user_name [, user_name] ...