2. blok
Zabezpečení a ochrana dat
Studijní cíl Tento blok je věnován základům zabezpečení a ochrany dat uložených v relačních databázích, tj. uživatelským účtům, systémovým a objektovým oprávněním a rolím. Dále jsou zde uvedeny i příklady pro uložení hesel v tabulkách.
Doba nutná k nastudování
2 - 3 hodiny
Průvodce studiem Při studiu tohoto bloku se předpokládá, že čtenář je obeznámen se základy jazyka SQL a databázovými objekty typu tabulka a pohled.
1. Zabezpečení dat V předchozích lekcích jsme se zabývali zejména prací s daty v tabulkách a vytváření databázových objektů. Stále více se seznamujeme s tím, že databáze není jen úložiště dat, ale ucelené řešení, které se stará nejen o jejich uložení a rychlé zpřístupňování, ale také o jejich konzistenci a to za libovolných okolností. Samozřejmostí pak musí být i řízení přístupu uživatelů k datům v databázi. Typickými požadavky jsou:
Data v konkrétní tabulce by měla být přístupná pouze některým uživatelům. Někteří uživatelé mohou tato data aktualizovat, zatímco jiní je mohou pouze číst. Některým uživatelům chceme zpřístupnit pouze vybrané sloupce tabulky. Některým uživatelům chceme zpřístupnit pouze vybrané řádky tabulky. Před některými uživateli chceme skrýt skutečnou strukturu dat v tabulkách. Jednotlivým uživatelům chceme umožnit vytváření pouze určitých druhů databázových objektů.
Systém řízení báze dat musí být tedy odpovědný za implementaci a kontrolu bezpečnostních omezení. Pro nastavení bezpečnostních omezení jsou využívány příkazy SQL.
David Žák IDAS2/2 – Zabezpečení a ochrana dat
1
Systém zabezpečení je založen na těchto třech prvcích:
Uživatelé – každá činnost v databázi je spojena s konkrétním uživatelem a systém umožňuje nebo zamezuje konkrétní akci v závislosti na tom, který uživatel akci požaduje Databázové objekty – zabezpečení se vztahuje i na konkrétní databázové objekty, tady například tabulky, pohledy, funkce, procedury. Zatímco uživatelé mají většinou plný přístup k objektům jimi vytvořeným, přístupy k objektům ostatních uživatelů jsou defaultně zakázány a musí být explicitně nastaveny. Práva – akce, které může uživatel provádět na konkrétním databázovém objektu.
1.1 Účet uživatele Každý uživatel je identifikován krátkým jménem. Každý příkaz prováděný databázovým systémem se provádí jménem konkrétního uživatele a podle tohoto jména je operace povolena nebo zamítnuta. Maximální délka identifikátoru uživatele (často hovoříme o takzvaném uživatelském účtu) se v jednotlivých implementacích databázových systémů liší a pohybuje se od 8 do 30 znaků. Ve standardu ANSI/ISO se namísto identifikátoru uživatele hovoří o autorizačním identifikátoru. Smyslem identifikátoru je zjistit autorizaci nebo práva v databázi. V provozní databázi se často používají autorizační identifikátory nikoli pro konkrétní osoby, ale pro programy nebo skupiny programů. Vlastní autorizace uživatelů pracujících s těmito programy se řeší v rámci těchto programů samotných. Při vytvoření relace (session) databázový systém vyžaduje identifikátor uživatele a heslo. Databázový systém heslo poté zkontroluje. Uživatelský účet se vytvoří příkazem CREATE USER
IDENTIFIED BY ; Příklad CREATE USER
jnovak IDENTIFIED BY w25sqx;
Příkaz vytvořil v databázi uživatele s identifikátorem JNOVAK, který bude mít heslo "w25sqx".
David Žák IDAS2/2 – Zabezpečení a ochrana dat
2
Uživatel nebo administrátor databáze může změnit heslo příkazem ALTER USER. ALTER USER IDENTIFIED BY ; Příklad ALTER USER JNOVAK IDENTIFIED BY sdf45t;
Odstranění účtu uživatele z databázového systému provedeme příkazem DROP USER ;
Databáze Oracle neodstraní účet uživatele, jehož schéma obsahuje nějaké databázové objekty, pokud nedoplníte kluazuli CASCADE. V takovém případě pak je nezbytné zadat příkaz ve tvaru: DROP USER CASCADE;
1.2 Skupiny uživatelů Dle standardu zabezpečení ANSI/ISO SQL můžeme pracovat se skupinami uživatelů s podobnými potřebami jedním z těchto způsobů:
Všem přiřadíme stejný identifikátor uživatele, bohužel v takovém případě uživatelé nemohou být odlišení jeden od druhého ve zprávách databáze Každému uživateli přiřadíme samostatný identifikátor, práva pro každého uživatele zadáváme individuálně
Jednotlivé databázové systémy nabízí další možnosti, jak zařadit jednotlivé uživatele do skupin a využít práva definovaná pro skupiny nebo role. 1.3 Práva Skupina akcí, které lze provádět na databázovém objektu, se nazývá práva pro daný objekt. Standard SQL1 specifikuje 4 základní práva pro tabulky a pohledy:
SELECT - umožňuje načítání dat z tabulky nebo pohledu INSERT - umožňuje vkládat nové řádky do tabulky nebo pohledu
David Žák IDAS2/2 – Zabezpečení a ochrana dat
3
UPDATE - umožňuje upravovat řádky v tabulce nebo pohledu, právo UPDATE může být omezeno na konkrétní sloupce tabulky nebo pohledu DELETE - umožňuje odstraňovat řádky tabulky nebo pohledu
Standard SQL2 přidal:
právo REFERENCES, které umožňuje vytvářet odkazy na tabulku z cizího klíče v jiné tabulce, dále přidal právo USAGE, které řídí přístup k databázovým strukturám domén, znakových sad, způsobům řazení a překladů u práva INSERT je možné omezit sloupce, které je možné zadávat, ostatní sloupce u nově zadaného řádku budou mít hodnotu NULL, případně defaultní hodnotu dle definice tabulky u práva SELECT připouští (nicméně nedefinuje) možnost omezení na vybrané sloupce, proto to některé databázové systémy mají implementováno
Vlastník tabulky má automaticky práva SELECT, INSERT, UPDATE a DELETE (a případná další práva poskytovaná použitou databází) nad touto tabulkou. Ostatní uživatelé obvykle nemají k této tabulce žádná práva a v případě potřeby jsou jim práva explicitně přidělena pomocí příkazu GRANT. U vytvořeného pohledu má vlastník pohledu automaticky právo SELECT, které vychází z toho, že aby pohled mohl vytvořit, musí mít právo SELECT na všechny zdrojové tabulky pohledu. U ostatních práv (INSERT, UPDATE a DELETE) obdržíte právo pouze v případě, že stejné právo máte na všechny zdrojové tabulky pohledu. Jak již bylo řečeno, jednotlivé databázové systémy mohou nabízet další práva k databázovým objektům. Například Oracle nabízí k tabulkám právo ALTER a INDEX. Jejich smysl je zřejmý z názvů těchto práv. Pro procedury a funkce se používají práva EXECUTE a DEBUG. 1.4 Pohledy Dalším klíčovým prvkem při řízení přístupu uživatelů k datům jsou pohledy. Správnou definicí pohledů a přiřazením práv uživatelů k pohledům a nikoli k jejich zdrojovým tabulkám můžeme omezit přístup uživatele pouze k vybraným sloupcům a řádkům. Pohledy tedy nabízí velmi přesnou kontrolu nad tím, co může vidět konkrétní uživatel. Při bližším přemýšlení je možné dokonce filtrovat zdrojová data na základě identity uživatele, neboli různí uživatelé mohou vidět různý obsah pohledu. David Žák IDAS2/2 – Zabezpečení a ochrana dat
4
Kromě objektových práv SELECT, INSERT, UPDATE a DELETE nabízí pohledy ještě další omezení pro aktualizace dat. Kromě varianty READ ONLY pohledů jde o to, že pomocí klauzule WITH CHECK OPTION mohu vyžadovat, aby aktualizované a vkládané řádky splnily určitou podmínku. Bližší informace o pohledech je možné najít v jedné z předešlých lekcí. 1.5 Přidělování práv Pro přidělování práv slouží příkaz GRANT. Obecnou syntaxi příkazu GRANT nad databázovými objekty můžeme zapsat takto: GRANT <seznam_práv> ON TO [WITH GRANT OPTION]; Příklad GRANT SELECT, INSERT ON PRODUKTY TO JNOVAK; GRANT UPDATE(NAZEV, DODAVATEL_ID) ON PRODUKTY TO KSVOBODA; První příkaz slouží k předání práv SELECT a INSERT tabulky PRODUKTY uživateli JNOVAK, druhý příklad předává práv pro aktualizaci sloupců NAZEV a DODAVATEL_ID uživateli KSVOBODA. Klauzule WITH GRANT OPTION umožňuje předat uživateli také právo přidělovat dalším uživatelům ta práva, která sám k danému databázovému objektu má přidělena. Pokud chceme určitá práva předat všem uživatelům, uvedeme namísto identifikátoru uživatele klíčové slovo PUBLIC. Příklad GRANT SELECT ON DODAVATELE TO PUBLIC;
David Žák IDAS2/2 – Zabezpečení a ochrana dat
5
1.6 Odebírání práv Pro odebírání již přidělených práv slouží příkaz REVOKE. Obecnou syntaxe příkazu REVOKE nad databázovými objekty je velice podobná příkazu GRANT a můžeme ji zapsat takto: REVOKE <seznam_práv> ON FROM ; Příklad pro odebrání dříve přiděleného práva uživateli JNOVAK: REVOKE INSERT ON PRODUKTY FROM JNOVAK; Příklad pro odebrání všech práv k tabulce DODAVATELE všem uživatelům: REVOKE ALL PRIVILEGES ON DODAVATELE FROM PUBLIC; 1.7 Systémová oprávnění V předchozích kapitolách jsme hovořili o objektových oprávněních. Kromě objektových oprávnění existují ještě systémová oprávnění, která definují činnosti, které daný uživatel může v databázi dělat. Databázový administrátor například musí mít tato systémová oprávnění – vytváření a rušení uživatelů, přidělování systémových oprávnění těmto uživatelům, odstraňování tabulek v libovolných schématech a podobně. Například v databázích Oracle jsou desítky systémových oprávnění, která je možné uživatelům přidělovat. Systémová oprávnění přidělujeme obdobně jako oprávnění k databázovým objektům pomocí příkazu GRANT a odebíráme pomocí příkazu REVOKE. GRANT <seznam_oprávnění> TO [WITH GRANT OPTION]; Příklad GRANT CREATE TABLE, CREATE SEQUENCE, CREATE VIEW TO JNOVAK, KSVOBODA; REVOKE CREATE SEQUENCE FROM KSVOBODA; David Žák IDAS2/2 – Zabezpečení a ochrana dat
6
1.8 Role V mnoha případech potřebujeme více uživatelům poskytnout stejná objektová, případně i systémová práva. Role umožňují sdružovat uživatele do skupin. Mezi uživateli a rolemi je vztah M:N, tedy jeden uživatel může mít více rolí a jedna role může být přiřazena více uživatelům. Příklad CREATE ROLE REFERENT; GRANT CREATE TABLE, CREATE VIEW TO REFERENT; GRANT SELECT ON DODAVATELE TO REFERENT; GRANT SELECT ON PRODUKTY TO REFERENT; GRANT REFERENT TO AMALA, BSTASTNA;
V databázi Oracle jsou vytvořeny implicitně role CONNECT pro připojení k databázi a RESOURCE pro vytváření základních databázových objektů. Každý uživatel, který se může k databázi připojit, musí mít minimálně roli CONNECT. Tyto role je třeba po vytvoření nového uživatele tomuto uživateli přiřadit. 1.9 Schéma Schéma je množina databázových objektů, které spolu souvisejí. Databázovými objekty mohou být tabulky, pohledy, indexy, clustery, sekvence, synonyma, uložené procedury, uložené triggery, databázové linky, snapshoty (používané pro repliky vzdálených tabulek). Při vytvoření uživatele správcem se implicitně vytvoří databázové schéma uživatele v definovaném tabulkovém prostoru. Ve svém databázovém schématu vlastní uživatel všechny objekty.
David Žák IDAS2/2 – Zabezpečení a ochrana dat
7
2. Bezpečnostní mechanismy Oracle Databáze Oracle je robustní architektura používaná bankami, pojišťovnami, velkými společnostmi a jinými významnými klienty. Proto je problematika bezpečnosti dat jednou ze základních cílů vývojářů a vznikají různé nástroje na usnadnění správy bezpečnostním pravidel, které rozšiřují vlastnosti implementované dle standardu SQL. Z uplatněných a principů můžeme uvést například:
Zajištění principu minimálních nutných práv Mechanismus řízení přístupu pomocí systémových i objektových práv Řízení přístupu na úrovni záznamů Transparentní šifrování dat Šifrování záloh Šifrování komunikace Detailní audit operací Centrální správa uživatelů - spolupráce s LDAP Bezpečnostní certifikace
V následujících odstavcích budou krátce charakterizovány některé mechanismy, které slouží ke zvýšení bezpečnosti uložených dat a usnadnění řízení přístupu. 2.1 Mechanismus Secure Application Role Uživatel může určité operace provádět, jen pokud přistupuje z dané aplikace a nikoliv, pokud k přístupu použije třeba databázovou konzoli. Tyto role jsou pevně svázány s určitým databázovým balíčkem (knihovnou uložených procedur) a mohou být aktivovány pouze z tohoto balíčku. 2.2 Mechanismus Virtual Private Database (VPD) VPD zajišťuje automatické a transparentní doplnění jakéhokoliv dotazu o bezpečnostní podmínku. Ta pak omezuje data, se kterými uživatel může pracovat. I když tedy dva uživatelé zadají stejný dotaz (například výpis celé tabulky), může každý získat jiná data. Např. uživatelé z různých oddělení mohou pracovat pouze se svými daty, i když jsou data celého podniku ve stejné tabulce.
David Žák IDAS2/2 – Zabezpečení a ochrana dat
8
2.3 Mechanismus Oracle Label Security Option Každý záznam je označen štítkem určujícím jeho citlivost. Každý uživatel má na druhé straně definovány bezpečnostní úrovně, se kterými může pracovat. Databáze Oracle pak zajistí, že uživatel může pracovat pouze s těmi daty, jejichž citlivost odpovídá jeho úrovni. 2.4 Mechanismus Oracle Advanced Security Option (ASO) V rámci ASO je možné využít pokročilé metody ověřování, jako jsou třeba klientské SSL certifikáty, nebo využití různých autentizačních služeb postavených na standardech Kerberos či RADIUS. Pomocí těchto služeb lze například zajistit ověřování pomocí různých elektronických karet nebo biometrických údajů. 2.5 Mechanismus Proxy Authentication Problém s identifikací uživatelů však může nastat u webových aplikací, kdy se aplikace do databáze přihlašuje stále pod stejným jménem a heslem. Databáze totiž neví, kdo s ním skutečně pracuje, což blokuje řadu jejích bezpečnostních funkcí. Mechanismus Proxy Authentication aplikaci sice umožní přistupovat do databáze stále pod stejným jménem a heslem (a ušetřit tak čas na vytvoření spojení), avšak zároveň dovoluje předat informace o skutečném uživateli, který s aplikací pracuje. Databázový systém pak tuto informaci využije při řízení přístupu i auditování. 2.6 Mechanismus Advanced Security Option pro šifrování Šifrování přenosu dat má za cíl zabránit odposlechnutí či dokonce pozměnění komunikace. Šifrování komunikace je přitom transparentní pro samotnou aplikaci – neznamená nutnost zásahu do kódu aplikace. Kromě SSL existují i další techniky. Nástroje pro výběrové programové šifrování a dešifrování dat pomocí standardních algoritmů (DES, 3DES, AES a MD5) umožňují zašifrovat obzvláště citlivá data (rodná čísla, čísla kreditních karet). Možnost šifrování dat v tabulkách, které je transparentní z pohledu aplikace, nastavuje se deklarativně při definici tabulky. Tento mechanismus chrání před unikem dat při přístupu obcházejícím databázový server – např. kopírováním datových souborů, nebo zcizením záložních médií.
David Žák IDAS2/2 – Zabezpečení a ochrana dat
9
2.7 Mechanismus Fine Grained Auditing (FGA) Nedílnou součástí bezpečnostních mechanismů je i možnost auditu operací prováděných jednotlivými uživateli. Základní auditovací mechanismy většinou vytvářejí velký objem záznamů – nepřehledné, těžce zpracovatelné – proto Oracle vyvinul FGA. FGA umožňuje detailně určit jakých dat se má operace týkat specifikací sloupce tabulky a podmínky. Pouze pokud se v rámci uživatelem prováděné operace začne pracovat se záznamem splňujícím podmínku a je vrácena informace z definovaného sloupce, je tato operace zapsána do auditovacího logu. Při takové události je možné spustit i uloženou proceduru, která zajistí patřičnou reakci – například zašle SMS správci databáze. 2.8 Mechanismus Oracle Internet Directory (OID) Standardní správa uživatelů vyžaduje aktualizace uživatelů v mnoha systémech při odchodech či nástupech zaměstnanců do zaměstnání a změnách funkcí zaměstnanců. Častým jevem je neaktuálnost uživatelských účtů a nezrušení jejich účtů v systémech. Řešením je centrální správa uživatelů na jednom místě, ze kterého si jednotlivé aplikace přebírají data pomocí standardu LDAP. V prostředí Oracle funkci tohoto centrálního prvku plní OID. Centrální správu uživatelů v OID lze samozřejmě využít i pro správu databázových uživatelů a rolí. Tato funkcionalita je označena jako Enterprise User Security. Databáze může přebírat nejen seznam uživatelů, ale může z OID získat i seznam rolí přiřazených uživatelům. 3. Správa uživatelů V mnoha společnostech se stále setkáváme se správou uživatelů individuálně v jednotlivých aplikacích. Tento tradiční přístup však kromě vysokých nároků na správu, kdy je nezbytné udržovat uživatelské účty a role v několika systémech, hrozí neaktuálností, nekonzistencí, pomalými reakcemi na změny pracovního zařazení a potřeb zaměstnanců, přístupová oprávnění jsou špatně kontrolovatelná a hlavně hrozí ponechání přístupu neoprávněným osobám. Současným trendem je proto centrální evidence uživatelů ideálně všech informačních systémů společnosti na jediném místě, například formou LDAP služeb. Takové řešení je snáze spravovatelné, přehlednější, jednoduše zařaditelné do procesu přijímání a propouštění pracovníků, což přináší i rychlejší reakce na požadované změny.
David Žák IDAS2/2 – Zabezpečení a ochrana dat
10
Pojmy k zapamatování Příkazy a funkce: GRANT, CREATE ROLE
REVOKE,
CREATE/ALTER/DROP
USER,
Problém: zabezpečení, práva, role, přidělování a odejímání oprávnění, využití pohledů pro zabezpečení, správa uživatelů, bezpečnostní mechanismy Oracle databáze
Shrnutí V této lekci jste se seznámili se zabezpečením a ochranou dat v databázích. Bezpečnost dat v SQL databázích je založena na právech, objektových a systémových oprávněních. Pro dosažení zabezpečení je možno využít projekce a restrikce dat zajišťované pohledy. Pro přidělování práv slouží příkaz GRANT. Příkaz REVOKE slouží pro odebírání dříve přidělených práv. Při přidělování práv je vhodné se řídit principem minimálních nutných objektových i systémových práv, která uživatel potřebuje pro svoji práci. Správu uživatelů ve společnosti je vhodné realizovat centrálně. Otázky na procvičení 1. 2. 3. 4. 5.
K čemu slouží příkazy GRANT a REVOKE? Která práva se pojí s databázovým objektem tabulka? Vyjmenujte příklady systémových práv? K čemu slouží role? K čemu slouží klíčové slovo PUBLIC?
Odkazy a další studijní prameny
http://www.oracle.com/technetwork/database/enterpriseedition/documentation (dokumentace k databázové platformě Oracle) http://www.penguin.cz/noviny/?id=chip/index (seriál Databáze standardu SQL z časopisu CHIP) http://www.techonthenet.com/oracle/grant_revoke.php (Oracle/PLSQL: Grant/Revoke příkazy)
David Žák IDAS2/2 – Zabezpečení a ochrana dat
11
Odkazy a další studijní prameny
GROFF, J.R., WEINBERG, P.N. SQL - kompletní průvodce. Praha: Computer Press, 2005. ISBN 80-251-0369-2. LACKO, L. Oracle – Správa, programování a použití databázového systému. Praha: Computer Press, 2007. ISBN 978-80-251-1490-2. STEPHENS, K.R., PLEW, R.R. Naučte se SQL za 21 dní. Praha: Computer Press, 2004. ISBN 80-7226-870-8.
David Žák IDAS2/2 – Zabezpečení a ochrana dat
12