|
Příkaz RENAME | SQL příkazy | Příkaz REVOKE |
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
Příkaz RENAME | SQL příkazy | Příkaz REVOKE |