Databázové systémy II Přednáška č. 9
Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska zotavení se z chyb SQL transakce automaticky začíná SQL inicializačním příkazem (SELECT, INSERT) Změny, které realizuje jedna transakce, nejsou viditelné pro ostatní konkurenčně probíhající transakce, pokud daná transakce neskončí
Transakce Transakce může skončit jedním ze čtyř způsobů: – COMMIT končí transakci úspěšně a změny jsou trvale zaznamenány – ROLLBACK přeruší transakci a všechny změny se anulují, databáze se vrátí do stavu před transakcí – v rámci programu - skončí-li program úspěšně, končí úspěšně i SQL transakce – v rámci programu - končí-li program chybou, zruší se transakce SQL
Řízení přístupu do databáze SQL definuje dva příkazy na řízení přístupu k tabulkám: GRANT a REVOKE Bezpečnostní mechanizmus je založený na – autorizačních identifikátorech – vlastnictví – privilegiích
Řízení přístupu do databáze Autorizační identifikátor je normální SQL identifikátor použitý na určení identity uživatele. Administrátor databáze obvykle každému uživateli databáze přidělí autorizační identifikátor s příslušným heslem. Každý SQL příkaz se vykoná na základě požadavku určitého uživatele používá se na určení toho, které objekty uživatel může používat a jaké operace může s danými objekty provádět
Řízení přístupu do databáze Vlastnictví Každý objekt vytvořený v SQL má vlastníka definovaného v AUTHORIZATION klauzuli schématu, ke kterému patří daný objekt. Vlastník je na začátku jediný, kdo může vědět o existenci objektu a může realizovat všechny operace nad objektem
Řízení přístupu do databáze Privilegia Privilegia jsou akce, které uživatel může realizovat nad základní tabulkou nebo pohledem: – SELECT – INSERT – UPDATE – DELETE – REFERENCES – USAGE – privilegium používat DOMAINS
Řízení přístupu do databáze Privilegia INSERT / UPDATE / REFERENCES může být omezeno na vyjmenované sloupce Vlastník tabulky musí udělit ostatním uživatelům potřebná privilegia použitím GRANT Na vytvoření pohledu musí uživatel mít SELECT privilegium na všechny tabulky nad kterými vytváří pohled a REFERENCES privilegium na jmenované sloupce
Udělení privilegií ostatním uživatelům GRANT {seznam_privilegií | ALL PRIVILEGES} ON jméno_objektu TO {seznam_autorizačních_id| PUBLIC} [WITH GRANT OPTION] ALL PRIVILEGES udělí všechna privilegia PUBLIC umožňuje přístup všem jméno_objektu může být základní tabulka, pohled, doména WITH GRANT OPTION umožňuje odevzdat privilegia dalším uživatelům
Příklad: GRANT ALL PRIVILEGES ON zamestnanec TO manager WITH GRANT OPTION GRANT SELECT, UPDATE (salary) ON zamestnanec TO admin GRANT SELECT ON pobocka TO PUBLIC
Odebrání privilegií ostatním uživatelům REVOKE odebere privilegia udělená příkazem GRANT REVOKE [GRANT OPTION FOR] {seznam_privilegií | ALL PRIVILEGES} ON jméno_objektu FROM {seznam_autoriz_id | PUBLIC} [RESTRICT | CASCADE]
Příklad REVOKE SELECT ON pobočka FROM PUBLIC REVOKE ALL PRIVILEGES ON zamestnanec FROM zástupce