SQL - DCL

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání

Data Control Language (DCL) je podskupina príkazov SQL, ktoré riadia prístup do databázy, objektov a dát.

DCL poskytuje ochranu databázy pred poškodením. Poskytuje možnosť zabezpečenia a ochrany integrity dát v databáze. Stupeň ochrany je v závislý od samotného nastavenia používateľských práv a prístupov. Patria sem príkazy GRANT a REVOKE.

Prideľovanie oprávnení

Databázový systém MySQL je viacpoužívateľský, čo znamená že sú vňom definovaní používatelia, ktorí majú určité oprávnenia nad databázovými objektami. MySQL definuje 2 základné skupiny používateľov

  1. používateľ s úplnými oprávneniami,
  2. používateľ s obmedzenými oprávneniami.

Ad 1: Po inštalácii servera MySQL je vytvorený používateľ root, ktorému sú pridelené všetky oprávnenia. Teda vytvárať, modifikovať a mazať databázové objekty. Pod databázovými objektami rozumieme samotné databázy, tabuľky, ale aj používatelia.

Ad 2: Používateľovi s obmedzenými oprávneniami sú odopreté niektoré akcie, ako napríklad vytváranie nových databáz, používateľov, ďalej jednotlivé databázy môžu byť pridelené len na čítanie, aj na zapisovanie, alebo žiaden prístup k databáze.

Jednou z možností ako správne nastaviť používateľské oprávnenia je pravidlo:

  • novému používateľovi zakázať všetko,
  • povoliť mu prístup len k nevyhnutným databázam (resp. k jeho databáze).


GRANT

Príkaz GRANT udeľuje oprávnenia (práva, ktoré majú byť pridelené) existujúcim používateľom v databázovom systéme. Syntax je príkazu GRANT [1]nasledujúca:

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]

object_type::=
    TABLE
  | FUNCTION
  | PROCEDURE

priv_level::=
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name

user_specification::=
    user [IDENTIFIED BY [PASSWORD] 'password']

kde:

  • priv_type - Typ oprávnenia (pozri nasledujúcu tabuľku).
  • column_list - zoznam atribútov, ktorých sa týka aktuálne delegovanie oprávnení,
  • object_type - typ databázového objektu, pre ktorý sa definuje privilégium. Môže to byť tabuľka (TABLE), funkcia (FUNCTION) alebo procedúra (PROCEDURE),
  • priv_level - úroveň oprávenia
    • * - pre všetky objekty,
    • db_name.* - pre všetky objekty databázy db_name,
    • db_name.tbl_name - pre tabuľky tbl_name v databáze db_name,
    • tbl_name - pre tabuľku tbl_name,
    • db_name.routine_name - pre procedúru routine_name v databáze db_name.
Zoznam najpoužívanejších oprávnení v databáze MySQL
Oprávnenie Vysvetlenie
ALL [PRIVILEGES] Pridelí všetky oprávnenia.
ALTER Povolí použitie príkazu ALTER TABLE
ALTER ROUTINE Povolí zmenu a zmazanie uložených procedúr.
CREATE Povolí vytváranie nových databáz a tabuliek.
CREATE ROUTINE Povolí vytváranie uložených procedúr.
CREATE USER Povolí použitie príkazu CREATE USER, DROP USER, RENAME USER, a REVOKE ALL PRIVILEGES
CREATE VIEW Povolí vytvorenie a modifikovanie pohľadov.
DELETE Povolí použitie príkazu DELETE
DROP Povoľuje mazanie databáz, tabuliek a pohľadov.
EXECUTE Povoľuje spúšťanie uložených procedúr.
INSERT Povolí použitie príkazu INSERT
SELECT Povolí použitie príkazu SELECT
SHOW DATABASES Povolí použitie príkazu SHOW DATABASES pre zobrazenie všetkých databáz.
SHOW VIEW Povolí použitie príkazu SHOW CREATE VIEW, ktorý zobrazí SQL príkaz ktorým bol pohľad vytvorený.
SUPER Povolí použitie ďalších administratívnych operácií ako CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, a programu mysqladmin.
TRIGGER Povolí operácie súvisiace s automatickým spúšťaním procedúr (triggery).
UPDATE Povolí použitie príkazu UPDATE
USAGE Synonymum pre 'NO PRIVILEGES'
NO PRIVILEGES Synonymum pre 'USAGE'. Používa sa na globálnej úrovni pridelovaní práv nad všetkými databázami.

Príklady:

   GRANT ALL PRIVILEGES ON myDatabase.* TO newuser@192.168.0.2

Pridelia sa všetky privilégiá používateľovi newuser pre databázu myDatabase z IP adresy 192.168.0.2.

   GRANT SELECT, UPDATE (Title, Start_date)
   ON test.Employee TO 'user1'@'domain1.com' 
   REQUIRE SSL;

Pridelia sa privilégiá SELECT, UPDATE len pre atribúty Title a Start_date nad tabuľkou Employee v databáze test používateľovi user1 pristupujúceho z domény domain1.com. Je vyžadované zabezpečené spojenie pomocou SSL


REVOKE

Príkaz REVOKE slúži na odstránenie nastavených prístupových práv.

REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user [, user] ...

Kde:

  • priv_type - určuje privilégiá, ktoré sa majú odstrániť,
  • ON - určuje na ktorých objektoch sa mujú privilégiá odstrániť,
    • object_type - určuje sa datáza, resp. tabuľka pre odstránenie privilégií danému používateľovi,
  • FROM user - určenie používateľa, ktorému sa odoberajú oprávnenia.

Príklad:

   REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';

Odoberieme privilégium INSERT používateľovi jeffrey zo všetkých databáz a tabuliek. Toto obmedzenie je platné len pri prihlásení z lokálneho počítača (localhostu).

   REVOKE ALL PRIVILEGES ON widgets.* FROM widgetAdmin@localhost;

Odoberú sa všetky privilégiá používateľovi widgetAdmin. Obmedzenia platia len pre localhost.

Zdroje a odkazy