Skip to content

Data Control Language (DCL)

18 de Červenec de 2021
GettyImages 174616627 5769ec8e5f9b58346a84bfbf

The Jazyk pro kontrolu dat je podmnožinou jazyka strukturovaných dotazů. Správci databází používají DCL ke konfiguraci zabezpečeného přístupu k relačním databázím. Doplňuje Jazyk definice dat, který přidává a odstraňuje databázové objekty, a Jazyk pro manipulaci s daty, který načítá, vkládá a upravuje obsah databáze. DCL je nejjednodušší z podmnožin SQL, protože se skládá pouze ze tří příkazů: GRANT, REVOKE a DENY. V kombinaci tyto tři příkazy poskytují správcům flexibilitu pro granulární nastavení a odebrání oprávnění k databázi.

Přidávání oprávnění pomocí příkazu GRANT

Příkaz GRANT přidává uživateli databáze nová oprávnění. Má velmi jednoduchou syntaxi, která je definována takto: GRANT [privilege]
NA [object]
NA [user]
[WITH GRANT OPTION]

Zde je shrnutí každého z parametrů, které můžete zadat pomocí tohoto příkazu:

  • Privilegium – může to být buď klíčové slovo VŠE (pro udělení široké škály oprávnění), nebo konkrétní oprávnění databáze nebo sada oprávnění. Mezi příklady patří CREATE DATABASE, SELECT, INSERT, UPDATE, DELETE, EXECUTE and CREATE VIEW.
  • Objekt – může to být jakýkoli databázový objekt. Možnosti platných oprávnění se liší v závislosti na typu databázového objektu, který do této klauzule zahrnete. Objektem bude obvykle databáze, funkce, uložená procedura, tabulka nebo zobrazení.
  • Uživatel – může to být jakýkoli uživatel databáze. Můžete také v tomto článku nahradit roli uživatele, pokud chcete použít zabezpečení databáze založené na rolích.
  • Pokud uvedete volitelné S MOŽNOSTÍ GRANTU klauzule na konci příkazu GRANT, udělíte nejen zadanému uživateli oprávnění definovaná v příkazu SQL, ale také mu dáte oprávnění k dalšímu přidělení stejných oprávnění jiný uživatelé databáze. Z tohoto důvodu používejte tuto klauzuli opatrně.

Předpokládejme například, že chcete uživateli udělit oprávnění Joe schopnost získávat informace z zaměstnanec tabulka v databázi s názvem HR. Použijte následující příkaz SQL: GRANT SELECT
NA HR. Zaměstnanci
TO Joe

Joe může načíst informace z tabulky zaměstnanců. Nebude však moci udělit ostatním uživatelům oprávnění k načtení informací z této tabulky, protože skript DCL neobsahoval klauzuli WITH GRANT OPTION.

Odvolání přístupu k databázi

Příkaz REVOKE odebere přístup k databázi uživateli, kterému byl dříve udělen tento přístup. Syntaxe tohoto příkazu je definována takto: REVOKE [GRANT OPTION FOR] [permission]
NA [object]
Z [user]
[CASCADE]

Zde je shrnutí parametrů příkazu REVOKE:

  • Povolení – určuje oprávnění databáze k odebrání z identifikovaného uživatele. Příkaz odvolá tvrzení GRANT i DENY, která byla dříve provedena pro identifikované oprávnění.
  • Objekt – může to být jakýkoli databázový objekt. Možnosti platných oprávnění se liší v závislosti na typu databázového objektu, který do této klauzule zahrnete. Typicky bude objekt buď databáze, funkce, uložená procedura, tabulka nebo zobrazení.
  • Uživatel – může to být jakýkoli uživatel databáze. Můžete také v tomto článku nahradit roli uživatele, pokud chcete použít zabezpečení databáze založené na rolích.
  • The GRANTOVÁ MOŽNOST PRO klauzule odstraní schopnost zadaného uživatele udělit zadané oprávnění ostatním uživatelům. Pokud zahrnete GRANTOVÁ MOŽNOST PRO klauzule v příkazu REVOKE, primární oprávnění není odvoláno. Tato klauzule odvolává pouze schopnost udělení.
  • The KASKÁDA Možnost také odvolá zadané oprávnění od všech uživatelů, kterým daný uživatel udělil oprávnění.

Následující příkaz odvolá oprávnění udělené Joeovi v předchozím příkladu: REVOKE SELECT
NA HR. Zaměstnanci
OD Joe

Výslovné odepření přístupu k databázi

Příkaz DENY výslovně brání uživateli v přijetí konkrétního oprávnění. Tato funkce je užitečná, když je uživatel členem role nebo skupiny, které je uděleno oprávnění, a chcete 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 [permission]
NA [object]
NA [user]

Parametry příkazu DENY jsou totožné s parametry použitými pro příkaz GRANT. Například pokud chcete zajistit, aby Matthew nikdy nedostal možnost odstranit informace z tabulky zaměstnanců, zadejte následující příkaz: DENY DELETE
NA HR. Zaměstnanci
TO Matthew