602SQL-Úplná dokumentace Index  

Zjišťování práv z jazyka 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