|
![]() | Práva a subjekty práva v SQL | ![]() | Práva a subjekty práva v SQL |
Pro zjištění práv zadaného subjektu práva k zadané tabulce nebo záznamům tabulky se využívá pětice predikátů has_select_privil
(pro právo číst), has_update_privil
(pro právo přepisovat), has_delete_privil
(pro právo mazat záznamy), has_insert_privil
(pro právo vkládat záznamy) a has_grant_privil
(pro právo poskytovat své právo dalším subjektům).
Právo číst a právo přepisovat se zjišťuje pro každý sloupec zvlášť, ostatní práva pro celou tabulku najednou.
Predikáty se užívají jako součást dotazového výrazu SELECT: výběr tabulky ve FROM určuje, pro jakou tabulku se práva zjišťují, podmínka ve WHERE stanoví, u jakých záznamů se práva zjišťují (má-li tabulka povolena záznamová práva).
Predikáty mají následující formát:
privil_predikáty ::= predikáty_pro_sloupce | predikáty pro tabulku
predikáty_pro_sloupce ::= { has_select_privil | has_update_privil }
( sloupec, druh [, jméno_subjektu, kategorie_subjektu ] )
predikáty_pro_tabulku ::= { has_delete_privil | has_insert_privil | has_grant_privil }
( druh [, jméno_subjektu, kategorie_subjektu ] )
druh ::= {0 | 1 | 2}
kategorie_subjektu ::= { CATEG_USER | CATEG_GROUP | CATEG_ROLE }
Popis
U predikátů_pro_sloupce se musí určit vždy jeden sloupec uvedený v části SELECT dotazového výrazu, pro nějž se právo zjišťuje. U ostatních predikátů (delete, insert a grant) se neuvádí, protože tato práva se definují pro tabulku jako celek.
Podle hodnoty druh se rozlišuje, jaké právo se zjišťuje:
druh | význam |
0 | práva přidělená záznamu (nejde pro insert a pro tabulky bez záznamových práv) |
1 | práva přidělená tabulce |
2 | efektivní práva |
U predikátů je možné uvést dvojici parametrů jméno_subjektu a kategorie_subjektu. Je-li tato dvojice uvedena, zjišťuje se právo tohoto subjektu, není-li uvedena, uvažuje se přihlášený uživatel kladoucí dotaz. Při vyhodnocování se nekontroluje existence zadaného subjektu práva - neexistující subjekt práva nemá přidělena.
Efektivní práva v sobě zahrnují práva získaná náležením uživatele do skupin a obsazením do rolí. Nejsou zde zahrnuta zvláštní práva, která uživatel má při provádění procedur a vyhodnocování dotazů, pro něž je nastaven administrátorský režim provozování.
Použití:
vždy jako součást dotazového výrazu SELECT:
SELECT has_select_privil(a,2,'anonymous',CATEG_USER, has_select_privil(b,2,'anonymous',CATEG_USER)
FROM PrivTab
Vypsat práva ke čtení anonymního uživatele ke dvěma sloupcům tabulky
SELECT has_delete_privil(2,'everybody', CATEG_GROUP) INTO lze_smazat
FROM PrivTab
WHERE a=1;
Předat do proměnné typu BIT příznak, má-li každý právo smazat vybraný záznam
SELECT *
FROM PrivTab
WHERE has_select_privil(b,2,'junior_user',CATEG_ROLE)
Vypsat jen ty záznamy, u kterých má role JUNIOR_USER právo číst sloupec B
Editace práv
K nastavení práv (přidání nebo odebrání) pro zadaný subjekt k tabulce nebo k záznamům tabulky se používá dvojice SQL příkazů GRANT
a REVOKE
.
Viz
![]() | Práva a subjekty práva v SQL | ![]() | Práva a subjekty práva v SQL |