Administrace Oracle Práva a role, audit Kukhar Maria 29.10.2012
• Ve výchozím nastavení, uživatel Oracle nemůže nic dělat, ani připojit se k databázi.
• Aby uživatele měli přistup k DB, je třeba vytvořit uživatelské účty, při vytvoření kterých, kromě přidělení – uživatelského jména – Hesla – Implicitního tabulkového prostoru
je třeba také přidělit účtu odpovídající: – systémová práva, – práva na objekty – roli
Uživatelská práva • Uživatelská práva poskytují základní úroveň bezpečnosti databáze. • Jsou navrženy tak, aby řídit přístup uživatele k datům a omezit druhy příkazů SQL, které mohou uživatelé spustit. • Při vytváření uživatele, možno přidělit mu práva pro – – – – –
připojení k databázi spuštění dotazů provedění updatů vytvoření objektů schématy a další...
Typy uživatelských práv Rozlišujou následující typy uživatelských práv: • Systémová práva (System privileges) – poskytují uživateli možnost provádět určité akce, nebo provést akci na jakýkolich objektéch schématu daného typu. Dovoluje operace na úrovni databáze, jako je například připojení k databázi, vytváření uživatelů, provádění změn v konfiguraci databáze. (Např. CREATE TABLE , CREATE USER…) • Práva na objekty (Object privileges) – poskytují uživateli možnost provádět určité akce na konkrétním objektu schématu (jako jsou tabulky, pohledy, sekvence). Různé práva na objekty jsou dostupné pro různé typy objektů schématu. Pro použití objektu schématy, které patří jinému uživateli, je třebá mít práva na tento objekt. Příklad: právo vybrat řádky z tabulky EMPLOYEES nebo odstranit řádky z tabulky DEPARTMENTS.
Práva na objekty (Object privileges) • Práv na objekty je malý počet, proto je lze shrnout do jednoduché tabulky tabulky
pohledy
SELECT
X
X
UPDATE
X
X
INSERT
X
X
DELETE
X
X
ALTER
X
INDEX
X
REFERENCES
X
EXECUTE
sekvence
procedury
X
X
X
Systémová práva (System privileges) • Existuje téměř 200 systémových práv a používají se pro umožnění nějaké činnosti globálně na všech objektech daného typu. • Např. právo SELECT ANY TABLE umožní uživateli provést příkaz SELECT na libovolné tabulce či pohledu v databázi kromě těch ve schématu SYS. • Získat seznam dostupných systémových práv, lze pomoci dotazu k tabulce SYSTEM_PRIVILEGE_MAP SELECT * FROM SYSTEM_PRIVILEGE_MAP;
Některé z nejvíce používaných systémových práv • CREATE SESSION – Umožňuje uživateli připojit se k databázi. Bez ní není možné se připojit k databázi a zaregistrovat se. • RESTRICTED SESSION – Pokud je databáze spuštěna se STARTUP RESTRICT nebo ALTER SYSTEM ENABLE RESTRICTED SESSION, pouze uživateli s tímto právem mohou se připojit k databázi. • ALTER DATABASE – Umožňuje přístup k řadě příkazů potřebných pro změnu fyzických struktur. • ALTER SYSTEM – Poskytuje přístup ke změně parametrů instance a struktur paměti. • CREATE TABLESPACE, ALTER TABLESPACE и DROP TABLESPACE – práva umožňující spravovat tabulkové prostory. • CREATE TABLE - Umožňuje vytvořit tabulku ve vašem schématu. Kromě toho právo umožňuje jí upravit nebo smazat. • EXECUTE ANY PROCEDURE – výkon procedury a funkce v libovolném schématu kromě SYS.
Role • Role je pojmenovaná množina práv • Správa práv je jednodušší pomocí rolí • Lze vytvořit role, přidělit systémová práva a práva na objekty těmto rolím a pak přidělit role uživatelům. • Lze také přidělit role jíným rolům • Pro vytvoření role používá CREATE ROLE CREATE ROLE ALL_ORACLE_DBA;
• Volitelné lze používat klíčové slovo INDENTIFIED BY, které vyžaduje, aby uživatel se autentizoval do toho jak role stáné aktivní. Pro aktivací role se provádí klauzule SET ROLE: SET ROLE ALL_ORACLE_DBA IDENTIFIED BY qwerty;
Tři široce používáných rolí, předdefinovaných v databázi Oracle • CONNECT Umožňuje uživateli se připojit k databázi. • RESOURCE Umožňuje uživateli vytvářet, upravovat a mazat určité typy objektů schématu ve schématu souvisejícím s tímto uživatelem. Tato role je pro vývojáře a ostatní uživatele, kteří musí vytvořit objekty schématu.
• DBA Umožňuje uživateli provádět většinu administrativních funkcí, včetně – vytváření uživatelů a poskytování práv – vytváření a poskytování rolí – vytváření, modifikaci a mazání objektů schémat v libovolném schématu, a další.
Poskytuje všechna systémová práva, ale nezahrnuje práva ke spouštění nebo vypnutí instanci databáze. To je standardně poskytované uživatelům SYS a SYSTEM.
SYS a SYSTEM uživateli • SYS - Tento účet může provádět všechny funkce pro správu. Všechny základní tabulky a pohledy pro slovníky databáze jsou uloženy ve schématu SYS. Tyto základní tabulky a pohledy jsou kritické pro fungování databáze Oracle. Pro zachovaní integrity datového slovníku, tabulky ve schématu SYS manipulovany pouze databází. Oni neměly by být nikdy měněny žadným uživatelem nebo správcem databáze. Je zakázáno vytvářet žadnou tabulky ve schématu SYS
• SYSTEM - Tento účet může provádět všechny administrativní funkce kromě: – Zálohování a obnovení (Backup and recovery) – Upgradu databáze (Database upgrade)
SYSDBA a SYSOPER systémová práva • SYSDBA a SYSOPER jsou administratorské práva, potřebné k provádení správních činností na vysoké úrovni. • Systémové právo SYSDBA je pro plně zmocněných databázových administrátorů
• SYSOPER je systémové právo, které umožňuje uživateli provádět základní operační úkoly, ale bez možnosti se dívat na uživatelská data. • SYSDBA a SYSOPER systémová práva umožňují přístup k instanci databáze, i když databáze není otevřena. • Uživateli SYS je automaticky opřiděleno právo SYSDBA při instalaci. Když se přihlásíte jako uživatel SYS, musíte se připojit k databázi jako SYSDBA nebo SYSOPER.
Přidělování práv a rolí • Práva lze přidělit přímo konkrétním uživatelům či roli. • Uživatel může přidělovat systémová práva a role, pokud mu byly přiděleny s nastaveným parametrem ADMIN OPTION • může přidělovat práva na objekty ve svém schématu či na objekty, na které mu byla přidělena práva s nastaveným parametrem GRANT OPTION • K přidělování práv slouží SQL příkaz GRANT. • Přidělená práva lze zrušit SQL příkazem REVOKE
Přidělování práv •
•
Práva na objekty mohou být přiděleny individuálně, skupinově, nebo s klíčovym slovem ALL, pro implicitní nastavení všech dostupných práv na objekty pro určené schéma. Obecná syntaxe příkazu GRANT :
GRANT právo ON schéma.objekt TO uživatel [WITH GRANT OPTION];
•
příklad přidělení práva GRANT SELECT ON HR.EMPLOYEES TO ALL_ORACLE; GRANT UPDATE (SALARY) ON HR.EMPLOYEES TO ALL_ORACLE; GRANT ALL ON HR.REGIONS TO ALL_ORACLE;
•
Obecná syntaxe příkazu GRANT pro přidělení systémového práva : GRANT právo [, právo...] TO uživatel [WITH ADMIN OPTION];
•
příklad přidělení práva GRANT SYSADM TO usera;
Přidělování rolí • K přidělování rolí uživateli nebo roli také slouží SQL příkaz GRANT. Také lze používat klíčové slovo WITH ADMIN OPTION pro předání práva jinému uživateli nebo roli GRANT ALL_ORACLE_DBA TO ALL_ORACLE; • Stejně jako ostatní práva, lze přiřadit role speciálnímu uživateli PUBLIC. Přidělení práv pro PUBLIC umožňuje přidělit teto práva všem, kdo má účet v databázi . • Například, lze přiřadit role all_oracle_debug všem uživatelům, které už existují v databázi a také budoucím uživatelům: GRANT ALL_ORACLE_DEBUG TO PUBLIC;
Povolení rolí (1) • Role mohou být povolený nebo zakázaný selektivně pro každou relaci s databází. Pokud máte dvě paralelní relace,pak sada rolí pro každou se může lišit. •
Pro povoléní jedné nebo více rolí použijte konstrukci
SET ROLE [role1, role2…]. • Tento seznam může obsahovat klíčové slovo ALL, které umožní
povolit veškeré role přiřazené k uživateli.
• Volitelně lze specifikovat seznam ALL bez určitých rolí. Pro to se používá konstrukce: ALL EXCEPT [role1, role2…].
Povolení rolí (2) •
Pokud role je chráněna heslem, za názvem role by měla sledovat konstrukce IDENTIFIED BY password. například: SET ROLE ALL_ORACLE_DBA IDENTIFIED BY "all_oracle.ru", ALL_ORACLE;
•
Povolení všech rolí mimo ALL_ORACLE_DBA SET ROLE ALL EXCEPT ALL_ORACLE_DBA;
•
•
Role, které jsou přiřazeny aktuální relaci jsou uvedeny ve slovníku SESSION_ROLES. Pro získaní seznamu, spusťte: SELECT ROLE FROM SESSION_ROLES; Tento seznam obsahuje role přiřazené vám, uživateli PUBLIC a role které dědí od jiných rolí.
Zákaz role • V rámci DB relace lze zakázát všechny role nebo všechny kromě určitých •
Aby zakázat všechny role, lze použít SET ROLE NONE.
• Pro zakázání všech rolí kromě určitých je třeba spoustit SET ROLE ALL EXCEPT [role1, role2…]. • Jiných způsobů, jak selektivně povolit nebo zakázat roli neexistuje. •
Aby zákazat role, které jsou zděděny od jiných rolí, je třeba zákazat rodičovskou roli.
Přidělení výchozíh role • Role, které jsou povoleny při přihlášení se nazývají výchozí role. Pro nich není třeba uvádět heslo nebo provádět konstrukci SET ROLE. • Změnit výchozí role pro účet, lze pomoci ALTER USER DEFAULT ROLE [role1, role2 ...].Seznam rolí může obsahovat ALL, NONE a EXCEPT. CREATE ROLE ALL_ORACLE_DBA; GRANT ALL_ORACLE_DBA TO ALL_ORACLE; ALTER USER ALL_ORACLE DEFAULT ROLE ALL EXCEPT ALL_ORACLE_USER;
Audit činnosti uživatelů v DBMS Oracle • Přístupová práva uživatelů neodstraňuje potřebu kontroly (audita) jejich činnosti v databázi • Audit databáze je monitorování a zaznamenávání vybraných akcí uživatele databáze. • K důvodům použití auditu patří: – Umožnění budoucí odpovědnost za aktuální akce – Odrazovat uživatelů (nebo jiné útočníky) od nevhodných jednání na základě jejich odpovědnosti – Zjišťování, sledování a nahrávání podezřelé aktivity – Adresování požadavků na audit pro dodržování • standardní audit vs. fine-grained audit
Standardní audit • Ve standardním auditu, lze použít inicializační parametry a příkazy SQL AUDIT i NOAUDIT pro audit SQL příkazů, práv, schémat objektů, síťí a vícevrstvných činností. • Povinný audit - audit činnosti: – připojení k instanci s administrátorskými právy – spuštění databáze – vypnutí databáze To zahrnuje akce každého uživatele, který je přihlášen s právami SYSDBA nebo SYSOPER. Pro této činnosti Oracle Database vždy provádí audity, bez ohledu na to, zda povoleno auditování.
• Oracle Database vždy píše povinné záznamy do souboru operačního systému (který se implicitně nachází $ORACLE_BASE/admin/$ORACLE_SID/adump).
AUDIT a NOAUDIT • Každý uživatel může nastavit auditování pro objekty v jeho vlastním schématu, pomocí příkazu AUDIT. • Pro zrušení auditu pro tento objekt, lze použít příkaz NOAUDIT. • Není třeba žádné další práva pro provedení tohoto úkolu. • Uživatelé mohou spouštět příkazy AUDIT aby nastavit auditování bez ohledu na nastavení parametrů AUDIT_TRAIL. • Pro audit objektů v jiném schématu, uživatel musí mít právo AUDIT ANY • Pro audit systémových práv, uživatel musí mít právo AUDIT SYSTEM.
Záznamy auditu (audit records) • Oracle Database zapsuje auditorské činnosti do záznamů auditu. Záznamy o auditu poskytují informace o operaci, která byla předmětem auditu, uživateli který provel operace, a datě i času operace. • Auditní záznamy mohou být uloženy – do tzv. audit trail databáze DBA_AUDIT_TRAIL (tabulka SYS.AUD$), – do souborech operačního systému, tzv. audit trail operačního systému – do pohledu DBA_COMMON_AUDIT_TRAIL, který kombinuje standardní a fine-grained protokol záznamů auditu.
• Oracle Database také poskytuje sadu pohledů slovníku dat, které lze použít ke sledování podezřelé aktivity.
AUDIT_TRAIL • Lze povolit standardní audit trail nastavením inicializačních parametrů AUDIT_TRAIL. Tato nastavení určuje, zda vytvořit záznamy auditu v audit trail databáze, v souborech operačního systému, nebo audit zakázat.
• Aby povolit nebo zakázat standardní audit trail, přihlaste se do SQL * Plus s právami administratoru, a použijte příkaz ALTER SYSTEM. Pak, musíte restartovat instanci databáze. • Aby zjistit aktuální hodnotu parametru AUDIT_TRAIL, použijte příkaz SQL * Plus UKÁZAT PARAMETER.
Seznam nastavení pro AUDIT_TRAIL • DB - Směruje záznamy auditu do audit trail databáze (tabulka SYS.AUD$), mimo povinných a SYS záznamů auditu, které jsou vždy zapsány do audit trial operačního systému. • DB,EXTENDED - Chová se stejně jako AUDIT_TRAIL = DB, ale umožňuje zachytit SQL příkaz používaný v akci, která byla auditována. Můžete zachytit jak příkaz SQL, tak i veškeré související vázby proměných. • OS - adresuje všechny záznamy auditu do souboru operačního systému. • XML - Píše audit záznam do souboru operačního systému ve formátu XML. • XML, EXTENDED - Chová se stejně jako AUDIT_TRAIL = XML, ale také zahrňuje informaci o SQL příkazech a vazbách • NONE - Zakáz standardního auditu.
AUDIT_FILE_DEST • Aby specifikovat adresář operačního systému, do kterého se zapíše audit trail, použijte inicializační parametr AUDIT_FILE_DEST.
• Je třeba nastavit AUDIT_FILE_DEST na platný povolený adresář. • Informace povinného auditu také se píše do tohoto adresáře, stejně jako záznamy o auditu, pro uživatele SYS, když zadán inicializační parametr AUDIT_SYS_OPERATIONS.
Nastavení AUDIT_FILE_DEST • Parametr AUDIT_FILE_DEST lze změnit pomocí příkazu ALTER SYSTEM ALTER SYSTEM SET AUDIT_FILE_DEST = directory_path DEFERRED; • Aby zjistit aktuální nastavení parametru AUDIT_FILE_DEST, zadejte následující příkaz: SHOW PARAMETER AUDIT_FILE_DEST
Audit připojení • Lze provést audit všech požadavků na připojení k databázi. Audit pokusů přihlášení lze nastavit pomoci AUDIT SESSION • Aby bylo možné provádět audit pouze těch pokusy o přihlášení, které jsou úspěšný nebo neúspěšný, použijte jeden z následujících příkazu: AUDIT SESSION WHENEVER SUCCESSFUL AUDIT SESSION WHENEVER NOT SUCCESSFUL • Pokud záznamy auditu jsou uloženy v tabulce SYS.AUD$, jejích lze prohlížet pomocí pohledu slovniku dat DBAAUDITSESSION této tabulky. • Pro zákaz auditu relace platí příkaz NO AUDIT NOAUDIT SESSION
Audit operací • Každý příkaz DDL, který má dopad na některý objekt databáze, jako jsou například tabulka, pohled nebo index, může být předmětem auditu. • Lze snadné seskupovat operací CREATE, ALTER a DROP, působící na objekt. Seskupení příkazů snižuje množství správní činnosti potřebné k nastavení a údržbě parametrů auditu. • Tak, pro audit všech příkazů, které mají dopad na role, musíte zadat příkaz AUDIT ROLE • Pro zrušení daného nastavení, je třeba zadat NOAUDIT ROLE • Existují skupiny auditu SQL-příkazů. Každá skupina může být použita ke kontrole všech SQL příkazů, které ona obsahuje. Například, s použitím příkazu AUDIT ROLE, budou se plnit audit příkazy CREATE ROLE, ALTER ROLE, a DROP ROLE
Audit objektů • Lze také provádět audit operací SELECT, INSERT, UPDATE a DELETE • Příkazy pro audit objektů – BY SESSION (podle relace) – BY ACCESS (podle přístupu) • Například, v případě, že uživatel provedl na stejné tabulcě čtyři různých příkazů UPDATE, – výsledek auditu podle přístupu (BY ACCESS) - zápis čtyřech záznamu auditu. – výsledek auditu podle relace (BY SESSION) - jeden záznam auditu.
Audit práv (1) • K auditu práva nedojde, pokud je akce povolena vlastníkem a právem na objekt. Audit práva je spuštěn pouze v případě, že práva jsou nedostatečné , to je pouze v případě že akci umožnuje systémové právo. • Uživatel SCOTT má právo SELECT ANY TABLE • SELECT ANY TABLE je předmětem auditu. • SCOTT vybere svou vlastní tabulku (například SCOTT.EMP) => žádný záznam auditu není generován • SCOTT vybere z jiného schématu (například tabulku HR.EMPLOYEES ) => záznam auditu bude generován
Audit Práv (2) • Audit práva DELETE ANY TABLE. AUDIT DELETE ANY TABLE BY ACCESS WHENEVER NOT SUCCESSFUL; • Následující příkaz odstraní všechny možnosti auditu práva : NOAUDIT ALL PRIVILEGES;
Fine-grained audit • pomoci FGA, lze např. auditovat konkrétní sloupec tabulky a zjistit, kdy a kdo se pokusil o přístup to během stanovené doby. • Kromě toho lze vytvořit upozornění, které bude spouštěno při porušení politiky, a zapisovat tato data do samostatného souboru auditu. • Záznamy fine-grained auditu jsou uloženy v tabulce SYS.FGA_LOG$.
Zdroje • http://docs.oracle.com/cd/E11882_01/server.112/e10897/users_se cure.htm#ADMQS12001 • http://tmd.havit.cz/Papers/Oracle/Oracle.htm • http://docs.oracle.com/cd/E11882_01/network.112/e16543/auditi ng.htm#DBSEG006 • http://all-oracle.ru/content/view/?part=1&id=83 • http://bd-sql-xml.org.ua/index.php/subd/52-oracle/78-auditdejstvij-polzovatelej-v-subd-oracle