SQL - DCL: Rozdiel medzi revíziami
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. | + | 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 | + | *novému používateľovi zakázať všetko, |
− | * | + | *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 - | + | *''priv_type'' - Typ oprávnenia (pozri nasledujúcu tabuľku). |
− | *object_type - | + | *''column_list'' - zoznam atribútov, ktorých sa týka aktuálne delegovanie oprávnení, |
− | *priv_level - | + | *''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 |
+ | ** <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 | + | |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 | + | |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 | + | 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
- používateľ s úplný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 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.
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
- ↑ GRANT (mysql) http://dev.mysql.com/doc/refman/5.5/en/grant.html