602SQL-Úplná dokumentace Index  

Kontrola práv při provádění příkazů SQL

Příkazy SQL, které vkládají nebo ruší záznamy nebo přepisují data v záznamech, kontrolují příslušná práva. Pokud přihlášený uživatel nemá potřebná práva, dojde k chybě NO_RIGHTS a příkaz se neprovede.

Při vkládaní záznamů se kontroluje globální právo vkládat záznamy do tabulky, při rušení nebo přepisu uživatel musí mít buď globální právo rušit záznamy resp. přepisovat příslušné sloupce, anebo musí mít toto právo přiděleno k tomu záznamu, s nimž se pokouší pracovat.

Při vytváření, rušení a modifikování objektů tvořících schéma (tabulky, triggery, uložené procedury,...) rozhodují práva k systémovým tabulkám a práva k jednotlivým objektům.

Při práci s SQL dotazy se jinými pravidly řídí výběr dat do odpovědi na dotaz a jinými čtení dat z odpovědi.

Práva potřebná pro konstrukci odpovědi na dotaz

Uživatel musí mít právo číst všechny sloupce, které jsou použité v podmínkách pro výběr záznamů (klauzule WHERE, HAVING). V opačném případě by totiž pokládáním nepřímých dotazů mohl zjistit hodnoty ve sloupcích, které nesmí číst.

V závislosti na nastavení příznaků kompatibility SQLOPT_GLOBAL_REF_RIGHTS SQL server postupuje jedním ze dvou způsobů:

Test záznamových práv je pomalejší, než test hodnoty. Proto nedoporučujeme používat druhou variantu pro vybrání záznamů podle nastavení práv z rozsáhlé množiny.

Práva potřebná pro čtení dat z odpovědi na dotaz

Pro přečtení každé hodnoty se vyžaduje právo číst. Pokud uživatel toto právo nemá, pak v závislosti na nastavení příznaků kompatibility SQLOPT_RD_PRIVIL_VIOL nastane jedna ze dvou možností: