SQL - DCL: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 2: Riadok 2:
 
Data Control Language (DCL) je podskupina príkazov SQL, ktoré riadia prístup do databázy, objektov a dát.
 
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 databáz. Stupeň ochrany je v závislý od samotného nastavenia používateľských práv a prístupov. Patri sem štyri príkazy: GRANT, REVOKE, ROLLBACK a COMMIT.  
+
DCL poskytuje ochranu databázy pred poškodením. Poskytuje možnosť zabezpečenia a ochrany integrity dát databáz. Stupeň ochrany je v závislý od samotného nastavenia používateľských práv a prístupov. Patria sem štyri príkazy: GRANT, REVOKE, ROLLBACK a COMMIT.  
  
 
==Prideľovanie oprávnení==
 
==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
 
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
# používateľ s úplnými oprávneniami
+
# používateľ s úplnými oprávneniami,
# používateľ s obmedzenými oprávneniami
+
# 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 sa myslí samotné databázy, tabuľky, ale aj používatelia.
 
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 sa myslí samotné databázy, tabuľky, ale aj používatelia.
  
Riadok 13: Riadok 13:
  
 
Jednou z možností ako správne nastaviť používateľské oprávnenia je pravidlo:
 
Jednou z možností ako správne nastaviť používateľské oprávnenia je pravidlo:
*novému používateľovi zakážem všetko
+
*novému používateľovi zakázať všetko,
* a povolím mu prístup len k nevyhnutným databázam (resp. k jeho databáze).
+
*povoliť mu prístup len k nevyhnutným databázam (resp. k jeho databáze).
  
  
Riadok 29: Riadok 29:
 
     [WITH with_option ...]
 
     [WITH with_option ...]
  
object_type:
+
object_type::=
 
     TABLE
 
     TABLE
 
   | FUNCTION
 
   | FUNCTION
 
   | PROCEDURE
 
   | PROCEDURE
  
priv_level:
+
priv_level::=
 
     *
 
     *
 
   | *.*
 
   | *.*
Riadok 42: Riadok 42:
 
   | db_name.routine_name
 
   | db_name.routine_name
  
user_specification:
+
user_specification::=
 
     user [IDENTIFIED BY [PASSWORD] 'password']
 
     user [IDENTIFIED BY [PASSWORD] 'password']
  
 
</source>
 
</source>
 
kde:
 
kde:
*column_list - doplniť
+
*''priv_type'' - Typ oprávnenia (pozri nasledujúcu tabuľku).
*object_type - doplniť
+
*''column_list'' - zoznam atribútov, ktorých sa týka aktuálne delegovanie oprávnení,
*priv_level - doplniť
+
*''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_type - Typ oprávnenia (pozri nasledujúcu tabuľku).
+
*''priv_level'' - úroveň oprávenia
 +
** <nowiki>*</nowiki> - 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''.
 +
 
 
{|class="wikitable"
 
{|class="wikitable"
 
|+ Zoznam najpoužívanejších oprávnení v databáze MySQL  
 
|+ Zoznam najpoužívanejších oprávnení v databáze MySQL  
Riadok 114: Riadok 120:
 
|-
 
|-
 
|SUPER
 
|SUPER
|Povolí použitie ďalších administrtívnych operácií ako CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, a programu mysqladmin.
+
|Povolí použitie ďalších administratívnych operácií ako CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, a programu mysqladmin.
  
 
|-
 
|-
Riadok 126: Riadok 132:
 
|-
 
|-
 
|USAGE
 
|USAGE
|Synonymum pre Synonym "no privileges"
+
|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.
 
|}
 
|}
  
Riadok 142: Riadok 150:
 
   REQUIRE SSL;
 
   REQUIRE SSL;
 
</source>
 
</source>
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
+
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===
 
===REVOKE===
Príkaz REVOKE odstráni nastavených prístupových práv alebo oprávnenie k databáze objektov.
+
Príkaz REVOKE slúži na odstránenie nastavených prístupových práv.
 
<source lang="sql">
 
<source lang="sql">
 
REVOKE
 
REVOKE
Riadok 156: Riadok 164:
  
 
Kde:
 
Kde:
* priv_type - určuje privilégiá, ktoré sa majú odstrániť.
+
* ''priv_type'' - určuje privilégiá, ktoré sa majú odstrániť,
* ON - určuje na ktorých objektoch sa mujú privilégiá 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
+
** ''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
+
* FROM user - určenie používateľa, ktorému sa odoberajú oprávnenia.
  
 
Príklad:
 
Príklad:
Riadok 165: Riadok 173:
 
   REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
 
   REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
 
</source>
 
</source>
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).
+
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).
  
 
<source lang="sql">
 
<source lang="sql">
 
   REVOKE ALL PRIVILEGES ON widgets.* FROM widgetAdmin@localhost;
 
   REVOKE ALL PRIVILEGES ON widgets.* FROM widgetAdmin@localhost;
 
</source>
 
</source>
Odoberú sa všetky privilégiá používateľovi widgetAdmin. Obmedzenia platia len pre localhost.
+
Odoberú sa všetky privilégiá používateľovi ''widgetAdmin''. Obmedzenia platia len pre localhost.
 
==Zdroje a odkazy==
 
==Zdroje a odkazy==
 
<references/>
 
<references/>

Verzia zo dňa a času 20:56, 11. január 2011

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 databáz. Stupeň ochrany je v závislý od samotného nastavenia používateľských práv a prístupov. Patria sem štyri príkazy: GRANT, REVOKE, ROLLBACK a COMMIT.

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 sa myslí 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