602SQL-Úplná dokumentace Index  

Příkaz GRANT (SQL)

příkaz_GRANT ::= příkaz_GRANT_pro_tabulky | příkaz_GRANT_pro_rutiny

příkaz_GRANT_pro_tabulky ::= GRANT výčet_práv ON [schema.]jméno_tabulky TO seznam_subjektů 
    [ WITH GRANT OPTION ] [ WHERE podmínka_where ]
výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…
jednotlivé_právo ::=  DELETE | INSERT | SELECT | UPDATE [( seznam_sloupců )] 
    | REFERENCES [( seznam_sloupců ) | GRANT ]
seznam_sloupců ::= sloupec { , sloupec }…
seznam_subjektů ::= PUBLIC | subjekt {, subjekt }…
subjekt ::= [ USER ] jméno_uživatele | [ GROUP ] jméno_role | ROLE [schéma. ] jméno_role

příkaz_GRANT_pro_rutiny ::= GRANT výčet_práv ON [ PROCEDURE | FUNCTION ] [schema.]jméno_rutiny 
    TO seznam_subjektů [ WITH GRANT OPTION ]
výčet_práv ::= ALL [ PRIVILEGES ] | jednotlivé_právo {, jednotlivé_právo }…
jednotlivé_právo ::= EXECUTE | UPDATE 

Popis

Příkaz GRANT nastaví pro uživatele, skupiny uživatelů a role určené v seznamu_subjektů práva k:

Pro možný konflikt jména tabulky a jména rutiny je rozumné rutiny odlišit slovem PROCEDURE nebo FUNCTION.

Mají-li se nastavovat práva k jednotlivým záznamům (tzv. záznamová práva), musí se použít klauzule WHERE s omezující podmínkou na záznamy tabulky jméno_tabulky a současně tabulka musí mít tato práva povolena (při návrhu tabulky).

Ve výčtu_práv definujete, jaká práva se mají nastavit. Použijete-li slovo ALL, nastaví se všechna možná práva. Chcete-li nastavit pouze některá práva, jednotlivě je vypíšete a oddělíte čárkami. K dispozici jsou pro tabulky tato práva:

Pro záznamová práva není k dispozici právo INSERT.

Pro rutiny je výčet práv jednodušší:

V seznamu_subjektů určujete, koho (jakých subjektů práva) se nastavení práv týká. Použijete-li slovo PUBLIC, práva se nastaví pro skupinu EVERYBODY. V jiném případě se nastaví těm uživatelům, skupinám nebo rolím, kteří jsou uvedeni jmenovitě. Použijte-li jméno skupiny uživatelů (již definované na serveru), nastaví se práva této skupině, tzn. že uživatelé v ní zařazení práva dědí automaticky. Pokud u subjektu práva není uvedeno USER, GROUP ani ROLE, pak se jeho jméno hledá nejprve mezi uživateli, pak mezi skupinami.

Pokud subjekt má již určitá práva, pak práva uvedená v příkazu GRANT se k nim přidají.

Uvede-li se klauzule WITH GRANT OPTION, pak uživatelé a skupiny získají možnost svá práva poskytovat dalším uživatelům (totéž co GRANT ve výčtu_práv).

V současné verzi není možné příkazem GRANT nastavovat práva k objektům (výjimku tvoří procedury).

Příklad použití:

Dejte uživateli PETR právo mazat záznamy a editovat číslo pracovníka a jeho plat, všechna práva k jednomu vybranému záznamu tabulky DocTab a právo spouštět proceduru ZmenaCeniku.

GRANT DELETE, UPDATE (Plat, Cislo)
ON Zamestan
TO Petr
GRANT ALL ON DocTab
TO USER Petr
WHERE id=25
GRANT EXECUTE
ON PROCEDURE ZmenaCeniku
TO Petr

Viz