GRANT, REVOKE a DENY Databázová oprávnění
Jazyk řízení dat (DCL) je podmnožinou strukturovaného dotazovacího jazyka (SQL) a umožňuje správcům databází konfigurovat bezpečnostní přístup do relačních databází. Doplňuje jazyk pro definici dat (DDL), který slouží k přidávání a odstraňování databázových objektů, a jazyk pro manipulaci s daty (Data Manipulation Language - DML) používaný k načítání, vkládání a úpravě obsahu databáze.
DCL je nejjednodušší z podmnožin SQL , jelikož se skládá pouze ze tří příkazů: GRANT, REVOKE a DENY. Kombinované, tyto tři příkazy poskytují správcům možnost nastavit a odebírat oprávnění databáze extrémně zrnitým způsobem.
Přidání oprávnění pomocí příkazu GRANT
Příkaz GRANT používají správci k přidání nových oprávnění uživateli databáze . Má velmi jednoduchou syntaxi definovanou následovně:
GRANT [oprávnění] ZAPNUTO [objekt] TO [uživatele] [S GRANTOVANOU MOŽNOSTÍ]Zde je přehled všech parametrů, které můžete dodat s tímto příkazem:
- Privilege může být buď klíčové slovo ALL (udělit širokou škálu oprávnění) nebo konkrétní oprávnění databáze nebo soubor oprávnění. Mezi příklady patří CREATE DATABASE, SELECT, INSERT, UPDATE, DELETE, EXECUTE a CREATE VIEW.
- Objektem může být libovolný databázový objekt. Platné volby oprávnění se liší podle typu databázového objektu, který zahrnete do této klauzule. Typicky bude objekt buď databáze, funkce, uložená procedura , tabulka nebo zobrazení.
- Uživatel může být jakýkoli uživatel databáze. Můžete také nahradit roli uživatele v této klauzuli, pokud chcete využít roli-založené zabezpečení databáze.
- Pokud do konce příkazu GRANT přidáte klauzuli s volbou WITH GRANT OPTION , udělíte zadanému uživateli pouze oprávnění definovaná v příkazu SQL, ale také udělujete uživateli možnost udělit stejná oprávnění ostatním uživatelům databáze. Z tohoto důvodu použijte tuto větu opatrně.
Předpokládejme například, že chcete poskytnout uživateli Joe možnost získat informace z tabulky zaměstnanců v databázi s názvem HR. Můžete použít následující příkaz SQL:
GRANT SELECT na HR.employees TO JoeJoe nyní bude mít možnost získat informace ze stolu zaměstnanců. Nebude však moci udělit jiným uživatelům oprávnění k načtení informací z této tabulky, protože jste neobdrželi klauzuli WITH GRANT OPTION v příkazu GRANT.
Zrušení přístupu k databázi
Příkaz REVOKE se používá k odebrání přístupu k databázi od uživatele, kterému byl dříve udělen přístup. Syntaxe tohoto příkazu je definována následovně:
REVOKE [OPTION GRANT FOR] [povolení] ON [objekt] FROM [uživatel] [CASCADE]Zde je přehled o parametrech příkazu REVOKE:
- Oprávnění určuje oprávnění k odebrání od identifikovaného uživatele. Příkaz odvolává oba tvrzení GRANT a DENY, které byly dříve vytvořeny pro toto oprávnění.
- Objektem může být libovolný databázový objekt. Platné volby oprávnění se liší podle typu databázového objektu, který zahrnete do této klauzule. Typicky bude objekt buď databáze, funkce, uložená procedura, tabulka nebo zobrazení.
- Uživatel může být jakýkoli uživatel databáze. Můžete také nahradit roli uživatele v této klauzuli, pokud chcete využít roli-založené zabezpečení databáze.
- Klauzule GRANT OPTION FOR odstraňuje schopnost daného uživatele udělit danému oprávnění jiným uživatelům. Poznámka : Pokud zahrnout klauzuli GRANT OPTION FOR v příkazu REVOKE, primární oprávnění není zrušeno. Toto ustanovení zruší pouze udělení.
- Možnost CASCADE také odvolá zadané oprávnění od uživatelů, které daný uživatel udělila oprávnění.
Například následující příkaz zruší oprávnění udělené Joe v předchozím příkladu:
ZRUŠIT VYBRAT NA HR.zaměstnanců FROM JoeVýslovně zamítnutí přístupu k databázi
Příkaz DENY slouží k výslovnému zabránění tomu, aby uživatel obdržel konkrétní oprávnění. To je užitečné, pokud je uživatel členem role nebo skupiny, kterým je uděleno oprávnění, a chcete-li zabránit tomu, aby daný uživatel zdědil oprávnění vytvořením výjimky. Syntaxe tohoto příkazu je následující:
DENY [oprávnění] ON [objekt] TO [uživatele] Parametry pro příkaz DENY jsou stejné jako parametry použité pro příkaz GRANT.
Pokud jste například chtěli zajistit, aby Matthew nikdy nedostal možnost vymazat informace z tabulky zaměstnanců, zadejte následující příkaz: