phpRS            

Dnešní datum: 23. 06. 2017   | Hlavní stránka | Seznam rubrik | Kniha návštěv |  
  Hlavní menu
Hlavní stránka
Seznam rubrik
Fotogalerie
Kniha návštěv
Stáhněte si
Odkazy
Ankety
TOP 15Boží dar

  Reklama


  Rubriky

  Poslouchám na síti


Spusť přehrávač


Spusť přehrávač


  Informace o webu
Všehochuť aneb od každého trochu

Content © 1991-2010 Slávek Rydval

View Slávek Rydval's profile on LinkedIn

Vytvořeno pomocí phpRS a Texy!

RSS kanál

Oracle

* Databázová bezpečnost

Vydáno dne 27. 08. 2006 (20027 přečtení)

Pro bezpečnost databáze je nutné udělat několik dílčích kroků: nastavení uživatelů, kvót, rolí a dalšího.

Tento text je součástí mých výpisků z dokumentace k Oracle. Před dalším čtením se prosím seznamte s tímto článkem. Děkuji.

Při vytváření uživatele je nutné znát tyto základní věci:

  • Zda autentizační informace spravuje databáze, operační systém nebo síťová autentizační služba.
  • Výchozí a dočasný tabulkový prostor.
  • Seznam tabulkových prostorů dostupných uživateli a případné kvóty.
  • Omezení na množství zdrojů dostupných uživateli.
  • Oprávnění, role a bezpečnostní politika na databázové operace.

Poznámka: Kapitoly týkající se řízení přístupu k databázi (tj. oddíl nazvaný Uživatelská autentizace a oddíl nazvaný Nastavení tabulkových prostorů a kvót) a oddíl nazvaná Omezení zdrojů uživatele a profily) se vztahují na všechny uživatelsky definované databázové uživatele. Nevztahují se však na uživatele SYS a SYSTEM.

Uživatelská autentizace

Validace uživatele, který se snaží přistoupit k databázi, může probíhat různými způsoby: přes operační systém, síťovou službu, asociovanou Oracle databázi, databázi střední vrstvy či přes SSL protokol.

Heslo uživatele je při předávání k ověření zakódováno.

Pro DBA je vyžadována speciální autentizace.

Pro autentizaci pomocí síťové služby je potřeba edice Oracle 9i Enterprise s volbou Oracle Advanced Security.

Autentizace databází Oracle

Pro autentizaci se používají informace uložené v databázi. Při použití této autentizace je uživatel vytvořen s asociovaným heslem. To je pak uloženo zakódované v datovém slovníku. Své heslo si takový uživatel může změnit kdykoliv.

Pro ochranu hesla šifrováním je nutné toto nastavit jak na straně serveru, tak i na straně klienta (??? jak – admin guide???). Při šifrování se používá modifikovaný DES algoritmus.

Oracle umožňuje zamknout přístup uživatele, pokud se mu nepodaří na určený počet pokusů přihlásit. Odemčení může být provedeno automaticky po nějaké době nebo explicitně administrátorem. Toto lze nastavit příkazem CREATE PROFILE.

Účet také může administrátor zamknout ručně, odemčení pak může provést pouze on.

Heslu lze nastavit nějaké životnost, po níž jej musí uživatel změnit. K tomu má vymezen určitý čas (grace period) a pokud heslo není po tuto dobu změněno, účet je zamknut. DBA také může nechat heslo propadnout (expired state) a uživatel si jej musí před přihlášením změnit.

Při změně hesla je možné vyžadovat, aby nebo stejné jako určitý počet předchozích hesel nebo aby heslo nebylo stejně jako některé za určité období. Dále lze vyžadovat určité vlastnosti hesla. Výchozí nastavení verifikačního procesu vyžaduje, aby každé heslo:

  • Mělo alespoň 4 znaky.
  • Nesmí být shodné s název uživatele.
  • Obsahuje alespoň jedno písmeno, jednu cifru a jedno interpunkční znaménko.
  • Neobsahuje žádná jednoduchá slova typu welcome, account, database, user a další.
  • Liší se od předchozího alespoň ve třech znacích.

Autentizace DBAs

DBAs se autentizují pomocí souboru hesel nebo pomocí operačního systému. Pomocí operačního systému se lze autentizovat pouze v případě lokálního uživatele nebo vzdáleného, ale připojeného zabezpečeným kanálem.

Na mnoha operačních systémech je vytvořena speciální skupina, do které se přiřadí uživatelé, kteří se mohou autentizovat prostředky operačního systému.

Soubor hesel pak udržuje jména uživatelů, kterým bylo přiděleno oprávnění SYSDBA a SYSOPER. Uživatel s oprávněním SYSOPER má následující možnosti: STARTUP, SHUTDOWN, ALTER DATABASE OPEN/MOUNT, ALTER DATABASE BACKUP, ARCHIVE LOG a RECOVER a obsahuje oprávnění RESTRICTED SESSION. SYSDBA má všechna systémová oprávnění s ADMIN OPTION a dále oprávnění shodná s oprávněním SYSOPER. Dále může použít příkaz CREATE DATABASE a udělat časovou obnovu (time-based recovery).

Oracle Internet Directory

Oracle Internet Directory je adresářová služba implementovaná jako aplikace nad databází Oracle. Poskytuje informace o uživatelých a zdrojích umístěných na různých místech.

Uživatelská skupina PUBLIC

Každá databáze obsahuje uživatelskou skupinu PUBLIC. Ta poskytuje přístup k vybraným objektům jako jsou tabulky či pohledy. Každý uživatel patří do skupiny PUBLIC. Může tak přistupovat i k pohledům systémového katalogu s prefixem ALL a USER.

Každý uživatel může udělit objektové oprávnění skupině PUBLIC. Stejně tak jí lze přidělit systémové oprávnění či roli (přidělení některého systémového či objektového práva může způsobit nutnost překompilovat všechny pohledy, procedury. funkce, balíčky a triggery).

PUBLIC má následující omezení:

  • Nelze jí přidělit kvótu na tabulkový prostor, ačkoliv jí lze přidělit systémové oprávnění UNLIMIT TABLESPACE.
  • Skupinou PUBLIC lze vlastnit pouze synonyma a databázové linky.

Nastavení tabulkových prostorů a kvót

Pro každého uživatele se nastavuje výchozí a dočasný tabulkový prostor a případně kvóty. Ve výchozím se vytvářejí objekty (není-li ve vytvářecím příkazu řečeno jinak), v došasném se vytvářejí dočasné segmenty.

Uživateli lze nastavit na každý tabulkový prostor kvótu, která vymezí prostor, ve kterém se mohou ukladat uživatelská objekty. Ve výchozím případě není nastavena žádná kvóta.

Kvóta se nastavuje hodnotou prostoru v bytech, kilobytech či megabytech nebo se nastaví jako neomezená (unlimited). Kvóta tabulkového prostoru a dočasný segment na sebe nemají žádný vliv — dočasné segmenty nekonzumují místo vyhrazené pro uživatele, protože jsou vytvářeny pod uživatelem SYS.

Možnost vytvářet objekty v tabulkovém prostoru se uživateli zamení tak, že se kvóta nastaví na nulu. Stávající objekty v prostoru zůstanou, ale již nemohou použít další místo.

Omezení zdrojů uživatele a profily

Množství systémových zdrojů dostupných každému uživateli v rámci uživatelské bezpečnostní domény lze omezit. Toho se dosahuje pomocí profilů.

Profil je pojmenovaná skupina omezení zdrojů, kterou lze uživateli přiřadit. Počet profilů v databázi není omezen. Pokud se uživateli přiřadí profil, dojde k menšímu poklesu výkonu při přihlášení uživatele, protože Oracle načítá všechny limity pro uživatele.

Typy systémových zdrojů a limitů

Každý typ zdroje lze řídit na úrovni session, na úrovni volání nebo na obouch úrovních.

Úroveň session

Při každém přihlášení uživatele k databázi se vytvoří session. Každá session spotřebovává čas CPU a paměť. Jakmile uživatel přesáhne limit zdroje na úrovni session, Oracle provede navrácení příkazu (rollback on statement level) a vrátí chybovou zprávu. Jediné, co uživatel nyní může, je provést ROLLBACK, COMMIT nebo se odpojit (a provede se COMMIT). Ani po potvrzení či vrácení transakce nelze nic jiného provádět.

Úroveň volání

Při každém spuštění příkazu jsou prováděny konkrétní kroky pro jeho vykonání. Během nich je provedeno několik volání do databáze. Pro omezení těchto volání se nastavují limity zdrojů na úrovni volání.

Pokud uživatel takový limit překročí, Oracle zastaví vykonávání příkazu, provede jeho odvolání a vrátí chybovou zprávu. Předchozí příkazy v transakci zůstávají nedotčené a uživatelská session je stále připojená.

Typ zdroje: Čas CPU

Pro zamezení neřízenému použití CPU lze omezit čas CPU pro každé volání a celkové množství času CPU použitého pro volání během session (CPU_PER_SESSION a CPU_PER_CALL). Omezení se nastavuje a měří v setinách sekund.

Typ zdroje: Logická čtení

I/O operace jsou jedny z nejdražších. Lze omezit logické čtení datového bloku pro každé volání nebo session (LOGICAL_READ­S_PER_SESSION a LOGICAL_READS_PER_CAL­L). Čtení logických datových bloků zahrnuje datové bloky čtené jak z disku, tak i z paměti. Omezení se nastavuje a čte v jednotkách bloků.

Ostatní typy zdrojů

Dalšími omezeními platí pouze pro úroveň session. Jsou to:

  • Množství současných sessions jedno uživatele (SESSIONS_PER_U­SER).
  • Idle time pro session (IDLE_TIME). Pokud je dosažen, je aktuální transakce odvolána a session zrušena.
  • Maximální délka připojení (CONNECT_TIME). Pokud připojení trvá déle než zadaný čas, aktuální transakce je odvolána a session zrušena (Oracle to nezjišťuje na minutu přesně, ale např. co pět minut).
  • Množství soukromé SGA oblasti pro session (PRIVATE_SGA; platí pouze pro sdílený server, protože jinak jsou soukromé oblasti v PGA).

Řízení zdrojů pomocí profilů

Profil je pojmenovaná množina omezení zdrojů. Každému uživateli lze přidělit jiný profil. Pokud se profil nepřiřadí, má výchozí. Aby profily fungovaly, je nutné je zapnout v rámci databáze.

Zapnutí a vypnutí limit zdrojů

Zapnutí a vypnutí používání profilů lze provést dvěma cestami. První spočívá v nastavení inicializačního parametru RESOURCE_LIMIT na hodnotu TRUE resp. FALSE. FALSE je výchozí hodnota.

Za běhu databáze lze použít příkaz ALTER SYSTEM:

ALTER SYSTEM
  SET RESOURCE_LIMIT = TRUE;

Tento příkaz nemá vliv na změnu hodnoty v souboru inicializačních parametrů a na hodnoty parametrů pro hesla.

Vytvoření profilu

Pro vytvoření profilu se používá příkaz CREATE PROFILE. Pro jeho spuštění je zapotřebí mít systémové oprávnění CREATE PROFILE.

CREATE PROFILE profile LIMIT {resource_parameters|password_parameters};

resource_parameters ::=

  {PRIVATE_SGA {integer [K|M]}|UNLIMITED|DEFAULT}
  |
  {SESSIONS_PER_USER|CPU_PER_SESSION|CPU_PER_CALL|CONNECT_TIME|IDLE_TIME|
   LOGICAL_READS_PER_SESSION|LOGICAL_READS_PER_CALL|COMPOSITE_LIMIT
   integer|UNLIMITED|DEFAULT}

password_parameters ::=
  {PASSWORD_VERIFY_FUNCTION function|NULL|DEFAULT}
  |
  {FAILED_LOGIN_ATTEMPTS|PASSWORD_LIFE_TIME|PASSWORD_REUSE_TIME|
   PASSWORD_REUSE_MAX|PASSWORD_LOCK_TIME|PASSWORD_GRACE_TIME
   expr|UNLIMITED|DEFAULT}

Všechny nespecifikované limity pro nový profil mají hodnotu DEFAULT a jejich hodnota je přebrána z výchozího (DEFAULT) profilu. Na začátku jsou všechny hodnoty profilu DEFAULT nastaveny na UNLIMITED.

Pokud uživatel překročí hranici CONNECT_TIME nebo IDLE_TIME, aktuální transakce se odvolá a session se ukončí. Pokud uživatel překročí další limit session, pak je aktuální příkaz odvolán, Oracle vrátí chybu a uživatel může provést pouze potvrzení či odvolání transakce a odhlášení. Pokud uživatel překročí limit pro volání, pak je aktuální příkaz odvolán, Oracle vrátí chybu a aktuální transakce zůstane nedotčena.

FAILED_LOGIN_AT­TEMPTS je počet nepovedených pokusů o přihlášení k účtu. Poté je účet zamknut.

PASSWORD_LIFE_TIME počet dní, po které je možné heslo používat.

PASSWORD_REUSE_TIME říká, že heslo nesmí být shodné s žádným předchozím za zadaný počet posledních dní. Pokud se nastaví číselná hodnota, pak PASSWORD_REUSE_MAX musí být UNLIMITED.

PASSWORD_REUSE_MAX říká, že heslo nesmí být stejné jako zadaný počet předchozích. Pokud se nastaví číselná hodnota, pak PASSWORD_REUSE_TIME musí být UNLIMITED.

PASSWORD_LOCK_TIME je počet dní, po které bude účet zamknut po zadaném počtu selhání při přihlášení.

PASSWORD_GRACE_TIME nastavuje dobu odkladu, viz oddíl nazvaná Stáří hesla a doba vypršení.

Další omezení na parametry hesla: pokud jsou oba parametry PASSWORD_REUSE_MAX a PASSWORD_REUSE_TIME nastaveny na hodnotu UNLIMITED, pak Oracle nepoužije ani jeden tento parametr.

K heslům dále viz oddíl nazvaná Správa hesel pomocí profilů.

Přiřazení profilu uživateli

Po vytvoření profilu může být přiřazen uživateli příkazem CREATE USER případně ALTER USER. Každý uživatel může mít v danou dobu pouze jeden profil. Profil nelze přiřadit roli.

Změna profilu

Pro změnu profilu se používá příkaz ALTER PROFILE. K jeho spuštění je zapotřebí systémové oprávnění ALTER PROFILE. Provedené změny se nedotknout aktuální session, ale mají vliv až na nové přihlášení.

ALTER PROFILE profile LIMIT {resource_parameters|password_parameters};

Význam parametrů je shodný s příkazem CREATE PROFILE;

Používání složených limitů

Podobně jako jednotlivé limity lze omezit souhrně několik limitů session najednou. Složený limit je vyjádřen jako výhový součet měřený v servisních jednotkách (service unit).

Složený limit se specifikuje klauzulí COMPOSITE_LIMITS klauzule CREATE PROFILE resp. ALTER PROFILE.

CREATE PROFILE clerk LIMIT
  COMPOSITE_LIMIT 20000
  SESSIONS_PER_USER 2
  CPU_PER_CALL 1000;

Složený limit i limit jednotlivých zdrojů mohou koexistovat společně. Limit, kterého je dosaženo jako prvního zastaví činnost session. Hodnotu kompozitního limitu je nutné vysledovat experimentálně.

Pro jednotlivé limity uvedeny níže je možné stanovit váhu důležitosti, s jakou vystupují ve výpočtu kompozitního limitu. Jsou to tyto limity:

  • CPU_PER_SESSION
  • LOGICAL_READS_PER_SES­SION
  • CONNECT_TIME
  • PRIVATE_SGA

Pokud se nějaká váha nenastaví, má hodnotu 0. Celková cena zdroje se pak počítá jako součit váhy a hodnoty zdroje.

Pro nastavení váhy je určen příkaz ALTER RESOURCE COST. Pro jeho běh musí být k dispozici systémové oprávnění ALTER RESOURCE.

ALTER RESOURCE COST
  {CPU_PER_SESSION|CONNECT_TIME|LOGICAL_READS_PER_SESSION|PRIVATE_SGA integer}*;

Příklad:

ALTER RESOURCE COST
  CPU_PER_SESSION 1
  LOGICAL_READS_PER_SESSION 50;

Váha je pak vypočítána dle vzorce:

cost = (1 * CPU_PER_SESSION) + (50 * LOGICAL_READS_PER_SESSION)

CPU_PER_SESSION a LOGICAL_READS_PER_SES­SION je hodnota limitu z přiřazeného profilu uživatele.

Smazání profilu

Profil lze smazat pomocí příkazu DROP PROFILE. K tomu musí být dostupné oprávnění DROP PROFILE. Pokud je profil přiřazen nějakému uživateli, musí se specifikovat klauzule CASCADE. Takovému uživateli se přiřadí profil DEFAULT, který nelze smazat. Smazaní profilu nemá vliv na právě přihlášené uživatele.

DROP PROFILE name CASCADE;

Oprávnění, role a bezpečnostní politiky

Oprávnění (privilege) je právo pro spuštění konkrétního typu SQL příkazu nebo právo pro přístup k cizím uživatelským objektům. Existují dva druhy oprávnění: systémová (system privileges) a objektová (schema object privileges).

Systémová oprávnění

Systémové oprávnění je právo pro vykonání konrkétní akce nebo pro vykonání akce na libovolném objektu konkrétního typu na libovolném schématu. Existuje přes 60 různých systémových oprávnění.

Systémová oprávnění lze přidělit či odebrat uživateli i roli. Přidělovat a odebírat oprávnění mohou uživatelé, kterým bylo přiděleno konkrétní oprávnění s ADMIN OPTION nebo uživatelé se systémovými opraváněními GRANT ANY PRIVILEGE a GRANT ANY OBJECT PRIVILEGE.

Objektová oprávnění

Systémové oprávnění (a schema object privilege) je oprávnění nebo právo pro vykonání konrkétní akce na specifikovaném objektu schématu: tabulce, pohledu, sekvenci, proceduře, funkci či balíčku.

Pro každý typ objektu je určena jiná sada práv. Některým objektům nelze přiřadit žádné objektové oprávnění: např. indexům, klastrům, triggerům či databázovým linkům. Ty jsou spravovány pomocí systémových oprávnění.

Objekt a jeho synonymum jsou z pohledu oprávnění shodná. Tedy objektové oprávnění přidělené synonymu je ekvivalentní přidělení objektového oprávnění objektu, pro které je synonymum vytvořeno. Objetové oprávnění pro objekty zůstávají v platnosti i po smazání synonyma, byť byla práva udělena tomuto synonymu.

Každý uživatel má automaticky všechna práva na objekty ve svém schématu. Uživatel dále může udělit či odebrát objektové oprávnění uživateli či roli na libovolný objekt, který vlastní. Pokud má uživatel systémové oprávnění GRANT ANY OBJECT PRIVILEGE, může udělit či odebrat libovolné objektové oprávnění jiným uživatelům s nebo bez GRANT OPTION. Příjemce může použít toto oprávnění, ale již ho nesmí udělit někomu jinému. ??? i v případě GRANT OPTION???

Zabezpečení tabulky

Objektová oprávnění pro tabulku jsou rozděleny do dvou skupin. První je na DML operace a druhá pro DDL operace.

DML operace

Udělit lze objektová oprávnění SELECT, DELETE, INSERT a UPDATE. INSERT a UPDATE lze omezit na vybrané sloupce (při insertu nepovoleným sloupcům je dodána hodnota NULL ??? co když to změní trigger???).

Omezení sloupců v oprávnění SELECT nelze provést, ale lze jej obejít pomocí pohledů.

DDL operace

Objektová oprávnění pro tabulku jsou ALTER, INDEX a REFERENCES. Některé operace vyžadují ještě dodatečná oprávnění. Např. vytvoření triggeru pro tabulku je potřeba objektového oprávnění ALTER a systémového oprávnění CREATE TRIGGER.

Objektové oprávnění REFERENCES je možné omezit pouze na vybrané sloupce. Toto oprávnění dovoluje příjemci použit tabulku, pro kterou se oprávnění vydává, použít jako rodičovskou v cizím klíči.

Zabezpečení pohledu

Objektová oprávnění pro pohledy umožňují různé DML operace, které ovlivňují podkladové tabulky. Objektová oprávnění pro DML operace nad tabulkou mohou být podobným způsobem aplikována na pohledy.

Pro vytvoření pohledu je zapotřebí splnit následující podmínky:

  • Uživatel musí mít explicitně nebo zkrz roli jedno z následujících systémových oprávnění:
    • CREATE VIEW pro vytvoření pohledu ve vlastním schématu.
    • CREATE ANY VIEW pro vytvoření pohledu i v cizím schématu.
  • Uživatel musí mít explicitně jedno z následujích oprávnění:
    • Objektové oprávnění SELECT, INSERT, UPDATE nebo DELETE na všechny základní podkladové objekty.
    • Systémové oprávnění SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE nebo DELETE ANY TABLE.

Dále, pokud se bude poskytovat oprávnění na vytvářený pohled, musí uživatel mít právo s ???ADMIN??? OPTION na základní podkladové objekty nebo systémové oprávnění s ADMIN OPTION.

Zabezpečení procedur

Jediné objektové oprávnění na procedury (tedy i funkce a balíčky) je EXECUTE. Při běhu procedury (a dále i triggeru) je tato spuštěna v doméně zabezpečení vlastníka. Některé procedury mohou běžet i v bezpečnostní doméně volajícího.

Pro vytvoření procedury musí mít uživatel systémové oprávnění CREATE (ANY) PROCEDURE. Pro změnu (rekompilaci) je nutné proceduru vlastni nebp mít systémové oprávnění ALTER ANY PROCEDURE.

Uživatel vlastnící proceduru musí mít dále oprávnění na odkazované objekty. Tato oprávnění (systémová i objektová) musí být přidělena uživateli přímo, nikoliv přes role. To platí i pro oprávnění EXECUTE na procedury, které se z vytvářené procedury volají. To samé platí i pro triggery. V případně anonymního bloku je jedno, kterým způsobem uživatel oprávnění získal.

Pokud se udělí právo EXECUTE na balíček, pak příjemce oprávnění může volat libovolnou metodu z balíčku. Oprávnění nelze udělit pouze na jednu metodu z balíčku.

Role

Role je pojmenovaná skupina oprávnění, které lze udělit uživateli nebo jiné roli. Role nejsou zamýšleny pro vývojáře, protože oprávnění na objekty uvnitř procedur je potřeba získat přímo.

Roli může být přiděleno heslo, takže uživatel, který má oprávnění roli použít a chce ji použít, musí toto heslo zadat.

Role se typicky vytváří pro uživatele nebo pro aplikaci.

Roli může být uděleno systémové i objektové oprávnění. Pokud se roli přiřazuje oprávnění na další roli, nesmí dojít k cyklu. Libovolná role může být přidělena uživateli. Každá role přidělená uživateli může být v danou chvíli povolená nebo zakázána.

Udělovat či odebírat oprávnění na roli může uživatel s oprávněním GRANT ANY ROLE (toto neplatí pro globální role ??? co to je???). Pokud má uživatel oprávnění na roli s ADMIN OPTION, může udělit oprávnění na ní dalšímu uživateli.

Názvy rolí a uživatelů musí být vzájemně jedinečné.

Každý uživatel má svojí vlastní bezpečnostní doménu. Do té spadají oprávnění na jeho objekty, oprávnění jemu přidělená a oprávnění všech rolí, na které má oprávnění a současně jsou povolena. Dále to jsou oprávnění přidělená uživatelské skupině PUBLIC.

V pohledu SESSION_ROLES je seznam všech aktuálně povolených rolí. V pojmenovaném PL/SQL bloku vrací prázdnou množinu. V anonymním PL/SQL bloku a v pojemonvaném bloku běžícím v oprávnění volajícího se povolené role používají.

Příkazy DDL a role

Všechna systémová a objektová oprávnění, které dovolují uživateli provádět DDL operace jsou při získání přes roli použitelná. Výjimkou je objektové oprávnění REFERENCES, které musí být přiděleno přímo (??? i tak, lze jej přidělit roli???).

Všechna systémová a objektová oprávnění umožňující uživateli provádět DML operace a jsoucí nutná pro DDL operace musí být přidělena přímo (např. oprávnění SELECT při vytváření pohledů).

Předdefinované role

Existují předdefinované role CONNECT, RESOURCE, DBA, EXP_FULL_DATABSE a IMP_FULL_DATABASE, která jsou pouze pro zpětnou kompatibilitu.

Správa hesel pomocí profilů

Správa hesel se provádí pomocí příkazu CREATE PROFILE resp. ALTER PROFILE. Profil se následně přidělí uživateli pomocí příkazu CREATE USER nebo ALTER USER.

Zamykání účtu

Pokud se uživateli nepodaří na specifikovaný počet pokusů o přihlášení úspěšně přihlásit, účet se na určenou domu zamkne.

CREATE PROFILE prof
  LIMIT
    FAILED_LOGIN_ATTEMPS 4
    PASSWORD_LOCK_TIME 30;

ALTER USER madofako PROFILE prof;

Pokud se nespecifikuje PASSWORD_LOCK_TIME, zamkne se účet na dobu specifikovanou ve výchozím profilu. Pokud se nastaví hodnota na UNLIMITED, účet musí být odemknut pomocí příkazu ALTER USER.

Stáří hesla a doba vypršení

Profil udržuje i informace o životnosti hesla. Pokud doba životnosti vyprší, pak uživatel nebo DBA musí heslo změnit.

CREATE PROFILE prof
  LIMIT
    FAILED_LOGIN_ATTEMPS 4
    PASSWORD_LOCK_TIME 30
    PASSWORD_LIFE_TIME 90;

Hodnota PASSWORD_LIFE_TIME říká, že uživatel může jedno heslo používat až 90 dnů. Dále je možné definovat dobu odkladu (grace time), po kterou má uživatel možnost heslo změnit. Tato doba začíná běžet od prvního přihlášení do vypršení platnosti hesla. Při každém přihlášení pak dostává varování. Pokud si heslo během doby odkladu nezmění, je při dalším přihlášení vyzván k jeho změně. Přihlášení není možné, dokud není heslo změněno.

CREATE PROFILE prof
  LIMIT
    FAILED_LOGIN_ATTEMPS 4
    PASSWORD_LOCK_TIME 30
    PASSWORD_LIFE_TIME 90
    PASSWORD_GRACE_TIME 4;

Administátor může nastavit heslo jako vypršené i explicitně:

CREATE USER joe
  IDENTIFIED BY jr54R
  …
  PASSWORD EXPIRE;

Historie hesel

Lze nastavit buďto počet dnů, po které nelze použít v té době platné heslo nebo počet změn hesla, po kterých nelze použít v té době platné heslo.

CREATE PROFILE prof
  LIMIT
    PASSWORD_REUSE_TIME 60
    PASSWORD_REUSE_MAX UNLIMITED;

Po dobu 60 dnů nelze změnit heslo na takové, které za posledních 60 dnů bylo platné.

CREATE PROFILE prof
  LIMIT
    PASSWORD_REUSE_TIME UNLIMITED
    PASSWORD_REUSE_MAX 5;

Při změně hesla nesmí být zvoleno takové, které bylo platné v době posledních pěti změn.

Pokud se specifikuje jeden parametr, druhý musí být nastaven na UNLIMITED nebo se nesmí použít vůbec.

Verifikace složitosti hesla

Obslužná procedura, která verifikuje složitost hesla může být specifikována pomocí PL/SQL skriptu UTLPWDMG.SQL, který nastavuje výchozí parametry profilu.

Uvedená procedura zajišťuje, že heslo:

  • má minimálně 4 znaky,
  • není shodné s přihlašovacím jménem,
  • má alespoň jedno písmeno, jednu cifru a jedno interpunkční znaménko,
  • neobsahuje žádná jednoduchá slova typu welcome, account, database, user a další,
  • liší se od předchozího alespoň o 3 znaky.

Oracle doporučuje, aby se heslo neměnilo pomocí ALTER USER, protože plně nepodporuje verifikační funkci, ale pomocí LNOCIPasswordChan­ge().

Funkce musí mít hlavičku uvedenou níže a musí být vlastněna uživatelem SYS:

routine_name
(
  userid_parameter IN VARCHAR(30),
  password_parameter IN VARCHAR (30),
  old_password_parameter IN VARCHAR (30)
)
RETURN BOOLEAN

Zvolení verifikační funkce se provádí podle následujícího příkladu:

CREATE/ALTER PROFILE profile_name LIMIT
  PASSWORD_VERIFY_FUNCTION routine_name

Řízení uživatelů

Vytvoření uživatele

Pro vytvoření uživatele pomocí příkazu CREATE USER je nutné mít systémové oprávnění CREATE USER. Jméno uživatele musí být jednoznačné a nesmí být shodné ani se jménem žádné role.

CREATE USER user
  IDENTIFIED {BY password}|EXTERNALLY|{GLOBALLY AS 'external_name'}
  [DEFAULT TABLESPACE tablespace]
  [TEMPORARY TABLESPACE tablespace]
  [QUOTA {integer [K|M]}|UNLIMITED ON tablespace] -- lze opakovat pro různé ts
  [PROFILE profile]
  [PASSWORD EXPIRE]
  [ACCOUNT LOCK|UNLOCK]

Znaky jména uživatele mohou být pouze z databázové znakové sady a musí splňovat jmenné konvence (viz Schema object naming rules, SQL Reference 2–110). Doporučuje se používat pouze jednobajtové znaky.

IDENTIFIED — určuje autentizaci uživatele (viz oddíl nazvaná Metody autentizace uživatelů).

Pokud se neuvede výchozí tabulkový prostor, použije se SYSTEM. Pokud se neuvede limit na tabulkový prostor (ne nutně výchozí), pak není stanovena žádná kvóta.

Pokud se později kvóta změní, pak pokud bude menší než zabírají uživatelova data, nesmí uživatel provádět změny (??? a co když je pouze v rámci jednoho bloku???). Je-li potřeba umožnit uživateli alokovat libovolné množství místa v tabulkových prostorech, může se mu udělit systémové oprávnění UNLIMITED TABLESPACE. To přepíše veškeré nastavené kvót nad tabulkovými prostory. Pokud se oprávnění odebere, kvóty opět začnou platit. Uvedené oprávnění lze přidělit pouze uživateli, nikoliv roli a platí pro všechny tabulkové prostory.

Dočasný tabulkový prostor slouží k vytváření pomocných segmentů pro třídící operace. Tyto segmenty vlastní uživatel SYS, nikoliv ten, od kterého požadavek na třídění vzešlo. Pokud není dočasný tabulkový prostor v příkazu CREATE USER uveden, použije se výchozí, který je definován při vytvoření databáze (případně později změněn pomocí ALTER DATABASE). Pokud žádný dočasný tabulkový prostor neexistuje, zvolí se SYSTEM. Pokud je však tabulkový prostor SYSTEM spravován lokálně, musí se jako dočasný tabulkový prostor zvolit jiný.

Uživatelský dočasný tabulkový prostor musí být temporary a musí mít standardní velikost bloku. Nesmí jít o undo tabulkový prostor nebo tabulkový prostor s automatickou správou místa v segmentech.

Pokud se nespecifikuje profil, použije se výchozí.

PASSWORD EXPIRE — heslo musí být změněno před loginem (umí např. SQL*Plus).

ACCOUNT — umožní zamknout či odemknout účet, výchozí nastavení je UNLOCK.

Při vytváření uživatele nelze specifikovat výchozí roli. Pokud se uživatel vytvoří, pak výchozí nastavení role je ALL. Změnu lze provést pomocí příkazu ALTER USER.

Každý uživatel má systémové oprávnění ALTER USER pro změnu hesla.

Změna uživatele

Pro změnu uživatele je nutné systémové oprávnění ALTER USER.

ALTER USER user
  [IDENTIFIED {BY password [REPLACE old_password]}|
              EXTERNALLY|{GLOBALLY AS 'external_name'}]
  [DEFAULT TABLESPACE tablespace]
  [TEMPORARY TABLESPACE tablespace]
  [QUOTA {integer [K|M]}|UNLIMITED ON tablespace]  -- lze opakovat pro různé ts
  [PROFILE profile]
  [PASSWORD EXPIRE]
  [ACCOUNT LOCK|UNLOCK]
  [PASSWORD EXPIRE]
  [DEFAULT ROLE {role [, role [, ...]]}|NONE|
                {ALL [EXCEPT role [, role [, ...]]]}]

Proxy users:

ALTER USER user [, user, [,...]]
  GRANT|REVOKE CONNECT THROUGH proxy
  [WITH {NO ROLE}|{ROLE {role [, role [, ...]]}|
        {ALL EXCEPT role [, role [, ...]]}}]
  [AUTHENTICATED USING PASSWORD|{DISTINGUISHED NAME}|
                 CERTIFICATE [TYPE 'type'] [VERSION 'version']}]

Klauzule nepopsané dále mají stejný význam jako v případě příkazu CREATE USER.

IDENTIFED BY — pokud se použije REPLACE, Oracle netestuje správnost starého hesla, pokud se nemění vlastní existující heslo. REPLACE se musí použít v případě verifikace složitosti hesla (viz oddíl nazvaná Verifikace složitosti hesla).

DEFAULT ROLE — může obsahovat pouze role, na které jsou udělena oprávnění přímo uživateli. Nelze tedy použít roli, která je přiděla zkrz jinou roli a dále nelze použít role spravované externí službou (např. Internet Oracle Directory).

Proxy users — používá se pro střední vrstvu. Popis klauzulí vynechán.

Smazání uživatele

Pro smazání uživatele je zapotřebí systémové oprávnění DROP USER.

DROP USER user [CASCADE];

CASCADE je nutné specifikovat, pokud uživatelské schéma obsahuje objekty. Pokud existuje na tyto tabulky reference z jiného schématu, jsou smazány i tyto reference. Dále jsou zneplatněny pohledy, synonyma a procedury z jiných schémat, které se odkazovali na mazané objekty. Materializovaná view odkazující se na mazané objekty se nemažou, ale již nemohou být aktualizována.

Uživatel, který je přihlášen k databázi, nesmí být smazán (ALTER SYSTEM … KILL SESSION).

Metody autentizace uživatelů

Oracle poskytuje několik způsobů uživatelské autentizace. Jsou to:

  • IDENTIFIED BY — databázová (databáze řídí identifikaci i autentizaci uživatele)
  • EXTERNALLY — externí (autentizace je prováděna operačním systémem nebo síťovou službou)
  • GLOBALLY AS — globálně (autentizace je prováděna pomocí SSL)
  • proxy (autentizace přes střední vrstvu) — viz (oddíl nazvaná Proxy autentizace).

Databázová autentizace

Pro zavedení této autentizace se při vytvoření/aktu­alizaci uživatele specifikuje heslo. Heslo, které je v systémovém katalogu uchováváno zašifrovaně, si uživatel může pak kdykoliv změnit. Každé heslo musí být z jednobajtových znaků databázové znakové sady bez ohledu to, zda uvedená sada má i vícebaktové znaky. Heslo musí splňovat pravidla pojmenování objektů (viz Schema object naming rules, SQL Reference 2–110), pokud se nepoužívá verifikační rutina (viz oddíl nazvaná Verifikace složitosti hesla).

Databázová autentizace má tyto výhody:

  • Uživatelské účty i autetizace jsou řízeny databází.
  • Oracle poskytuje silnou ochranu hesel.
  • Je jednoduše spravovatelná s malým počtem uživatelů.

Externí autentizace

Pokud se zvolí externí autentizace, pak Oracle spravuje účet, ale autentizace je prováděna externí službou. Tou může být operační systém nebo síťová služba (např Oracle Net). Protože Oracle v tomto případě spoléhá na externí službu, přihlášení k databázi je možné bez hesla.

Tato autentizace není doporučena na operačních systémech se slabou ochranou uživatelských účtů.

S tímto způsobem autentizace souvisí inicializační parametr OS_AUTHENT_PREFIX. Pokud se uživatel s externí autentizací přihlašuje, Oracle se podívá, zda existuje uživatel stejnémo jména, ale navíc s daným prefixem (pokud je např. hodnota parametru OPS$ a přihlašuje se uživatem smith, hledá se uživatelské jméno OPS$smith). Výchozí hodnota parametru je OPS$.

Pokud je autentizace prováděna operačním systémem, musí být uživatel k němu přihlášen zabezpečeným kanálem. Pokud není, nemůže se k databázi připojit. Toto lze potlačit nastavením inicializačního parametru REMOTE_OS_AUTHENT na TRUE (výchozí hodnota je FALSE).

Autentizaci pomocí síťové služby spravuje Oracle Advanced Security, která může být nakonfigurována pro používání služeb třetích stran (např. Kerberos).

Globální autentizace

Vytváří globálního uživatele. Ten je autentizován pomocí enterprise directory service. external_name může být ve dvou podobách — X.509 (forma ‚CN=username,ot­her_attributes‘) nebo prázdný řetězec.

Proxy autentizace

Oracle poskytuje tři možnosti autentizace přes proxy:

  • Střední vrstva se autentizuje s databází a klient (v tomto případě aplikace nebo aplikační uživatel) se autentizuje se střední vrstvou.
  • Klient (v tomto případě databázový uživatel) není autentizován střední vrstvou, ale pomocí databázového hesla poslaného přes střední vrstvu.
  • Klient (v tomto případě globální uživatel) je autentizován střední vrstvou, přes kterou pošle jednoznačné jméno (distinguished name — DN) nebo certifikát. Na základě toho získá clientské uživatelské jméno.

Ve všech případech střední vrstva musí být autorizována pro jednání jménem uživatele. Pohled PROXY_USERS obsahuje uživatelé, kteří jsou právě autorizováni k připojení přes střední vrstvu.

Autorizace střední vrstvy pro autentizaci uživatele

Následující příklad autorizuje aplikační server appserve pro připojení jako uživatel bill. Příklad je uveden i s klauzulí WITH ROLE, kde se zadávají role, které se mají při připojení povolit.

ALTER USER bill
  GRANT CONNECT THROUGH appserve
  WITH ROLE ALL EXCEPT payroll;

Odebrání možnosti autorizace se provede stejným příkazem:

ALTER USER bill
  REVOKE CONNECT THROUGH appserve;

Autorizace střední vrstvy pro autentizaci jiným způsobem

Pokud má střední vrstva sloužit pouze jako prostředník pro autentizaci (pošle jméno a heslo dál do databáze), pak se použije následující příklad:

ALTER USER mary
  GRANT CONNECT THROUGH midtier
  AUTHENTICATED USING PASSWORD;

Autorizace střední vrstvy použitím jednoznačným jménem

Tak tohle fakt nechápu.

ALTER USER jeff
  GRANT CONNECT THROUGH WebDB
  AUTHENTICATED USING DISTINGUISHED NAME;

ALTER USER jeff
  GRANT CONNECT THROUGH WebDB
  AUTHENTICATED USING CERTIFICATE;

Řízení uživatelských práv a rolí

Systémová oprávnění

Existuje přes 100 různých systémových oprávnění.

Pro vyšší bezpečnost se doporučuje nastavit inicializační parametr O7_DICTIONARY_AC­CESSIBILITY na FALSE (říká se tomu mechanismus ochrany systémového katalogu). K systémovému katalogu pak mohou přistupovat pouze uživatelé schématu SYS (tedy uživatel SYS a uživatelé přihlášení jako SYSDBA). Systémová oprávnění typu ANY (např. SELECT ANY TABLE) pak neplatí pro objekty ve schématu SYS.

Pro přístup uživatelů k objektům schématu SYS je možné použít následující role:

  • SELECT_CATALOG_RO­LE — role umožňuje získávat data ze všech pohledů systémového katalogu.
  • EXECUTE_CATALOG_RO­LE — role umožňuje spouštět balíčky a procedury v systémovém katalogu.
  • DELETE_CATALOG_RO­LE — role umožňuje mazat uživatelům záznamy ze systémové tabulky auditu (AUD$).

Dále lze udělit oprávnění SELECT ANY DICTIONARY, které umožňuje přistupovat k libovolnému objektu ve schématu SYS a dále vytvářet v něm tabulky. Toto oprávnění lze přidělit pouze přímo uživateli, nelze je přidělit roli. Toto oprávnění neobsahuje oprávnění GRANT ALL PRIVILEGES.

Objektová oprávnění

Každý typ objektu má různé typy oprávnění. Přidělit je lze najednou pomocí ALL [PRIVILEGES]. ALL není oprávnění, ale jakási zástupka. Individuální privilegia lze pak odebrat. Stejně tak lze pomocí ALL odebrat všechna objektová oprávnění udělená uživateli nad objektem. Pokud se při odebrání musí smazat i integritní omezení, musí se specifikovat klauzule CASCADE CONSTRAINT.

Uživatelské role

Role je pojmenovaná skupina oprávnění a rolí, které mohou být udělovány uživatelům či jiným rolím. V databázi je několik předdefinovaných rolí vytvořených instalačními skritpy.

Tabulka 1. Předdefinované role

Název role Vytvořeno skriptem Popis
CONNECT sql.bsq Obsahuje mj. tato systémová oprávnění: ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW. Role existuje jen kvůli zpětné kompatibilitě.
RESOURCE sql.bsq Obsahuje mj. tato systémová oprávnění: CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPE. Role existuje jen kvůli zpětné kompatibilitě.
DBA sql.bsq Obsahuje všechna systémová oprávnění s ADMIN OPTION. Role existuje jen kvůli zpětné kompatibilitě.
EXP_FULL_DATABASE catexp.sql Role obsahuje oprávnění k plnému nebo přírůstkovému exportu.
IMP_FULL_DATABASE catexp.sql Role obsahuje oprávnění pro plný databázový import.
DELETE_CATALOG_ROLE sql.bsq Role obsahuje oprávnění DELETE pro tabulku systémového auditu AUD$.
EXECUTE_CATALOG_RO­LE sql.bsq Role obsahuje oprávnění EXECUTE pro objekty systémového katalogu a dále roli HS_ADMIN_ROLE.
SELECT_CATALOG_ROLE sql.bsq Role obsahuje oprávnění SELECT pro objekty systémového katalogu a dále roli HS_ADMIN_ROLE.
RECOVERY_CATA­LOG_OWNER catalog.sql Role poskytuje oprávnění pro vlastníka katalogu obnovy.
HS_ADMIN_ROLE caths.sql Role poskytuje oprávnění pro tabulky systémového katalogu HS (Heterogeneous Services).
AQ_USER_ROLE catqueue.sql Zastaralá role.
AQ_ADMINISTRA­TOR_ROLE catqueue.sql Oprávnění pro administraci Advace Queuing.
SNMPAGENT catsnmp.sql Role je používána Enterprise Managerem a Intellignet Agentem. Obsahuje ANALYZE ANY a SELECT oprávnění nad různými tabulkami.

Vytvoření role

Pro vytvoření role pomocí příkazu CREATE ROLE je potřeba mít systémové oprávnění CREATE ROLE. Ihned po vytvoření není k roli přiřazeno žádné právo.

CREATE ROLE role [{NOT IDENTIFIED}|{IDENTIFIED
                   {BY password}|{USING [schema.]package}|EXTERNALLY|GLOBALLY}]

Role může být specifikována a autorizována pomocí:

  • databáze za použití hesla
  • aplikace používající konkrétní balíček
  • externě operačním systémem, sítí nebo jiným externím zdrojem
  • globálně za využití enterprise directory service

NOT IDENTIFIED — role je autentizována databází a není třeba heslo při povolování hesla. Jde o výchozí volbu.

IDENTIFIED — uživatel musí být autorizován uvedenou metodou před tím, než je role povolena příkazem SET ROLE.

  • BY password — vytvoří lokální roli a vyžaduje heslo při povolení role uživateli
  • USING package — aplikační role, kdy role smí být povolena pouze aplikací používající autorizovaný package.
  • EXTERNALLY — externí role
  • GLOBALLY — globální role

Typy autorizace role

Pro použití role musí být tato povolena.

Autorizace pomocí databáze

Použití role může být chráněno heslem. Pokud je heslo použito, musí se specifikovat v příkazu SET ROLE. Pokud je pro daného uživatele role výchozí a povolena v době přihlášení, heslo se uvádět nemusí.

Autorizace aplikací

Autorizace aplikací se nastavuje pomocí klauzule IDENTIFIED USING package_name a role je pak použita pouze v případě volání daného package.

Role autorizovaná externě

Role autentizované pomocí operačního systému jsou užitečné pouze v případě, že operační systém je schopen dynamicky linkovat oprávnění operačního systému s aplikacemi. Když uživatel spustí aplikaci, operační systém udělí oprávnění operačního systému uživateli. Udělená oprávnění operačního systému odpovídají roli asociované s aplikací. V této chvíli aplikace může povolit aplikační roli. Jakmile je aplikace ukončena, dříve udělená oprávnění operačního systému uživateli jsou odebrána.

Pokud je role autorizována operačním systémem, musí se informace pro každého uživatele nastavovat na úrovni operačního systému. Toto nastavování je závislé na operačním systému.

Pokud se uživatel připojuje pomocí Oracle Net, pak ve výchozím nastavení jeho role nemohou být autentizovány pomocí operačního systému z bezpečnostního hlediska. Pokud je přesto potřeba autentizovat pomocí operačního systému, je třeba nastavit inicializační parametr REMORE_OS_ROLES na TRUE.

Role autorizovaná pomocí Enterprise Directory Service

Role smí být definována jako globální a tedy ji lze použít pouze při využívání Enterprise Directory Service (EDS). Ty jsou jednou ze součástí EDS.

Změna role

ALTER ROLE role {NOT IDENTIFIED}|
  {IDENTIFIED {BY password}|{USING [schema.]package}|EXTERNALLY|GLOBALLY}

Uživatel musí mít roli jako ADMIN OPTION nebo systémové oprávnění ALTER ANY ROLE. Význam parametrů je jakov případě příkazů CREATE ROLE. Po změně nejdou dotčeny aktuální sessions, které mají roli povolenou.

Pokud má uživatel systémové oprávnění ALTER ANY ROLE a změní identifikaci role IDENTIFIED GLOBALLY na IDENTIFIED BY password, IDENTIFIED EXTERNALY nebo NOT IDENTIFIED, pak je přiděleno uživateli oprávnění GRANT OPTION na tuto roli.

Smazání role

Při smazání role je tato skutečnost ihned propagována do bezpečnostních domén uživatelů a ostatních rolí.

Smazání role se provádní příkazem DROP ROLE a je zapotřebí oprávnění DROP ANY ROLE nebo mít na roli oprávnění s ADMIN OPTION.

DROP ROLE rolename;

Udělování oprávnění a rolí uživatelům

Udělování systémových oprávnění a rolí

Udělení systémového oprávnění nebo role se provádí příkazem GRANT. Pro jeho použití musí být splněno následující:

  • Udělované systémové oprávnění musí mít udělující získané s ADMIN OPTION nebo musí mít systémové oprávnění GRANT ANY PRIVILEGE.
  • Pro udělení oprávnění na roli musí mít udělující roli získanou s ADMIN OPTION nebo musí mít systémové oprávnění GRANT ANY ROLE.

Je-li role globální, nelze ji přidělit příkazem GRANT.

V příkazu GRANT se nesmí míchat systémová a objektová oprávnění.

Udělování oprávnění s ADMIN OPTION

Uživatel nebo role, kterým je uděleno oprávnění či role s ADMIN OPTION, mají několik dalších schopností:

  • Příjemce může udělit či odebrat oprávnění na systémové oprávnění či roli libovolnému uživateli či roli v databázi. Oprávnění však nemůže odebrat sám sobě.
  • Příjemce může udělit oprávnění na systémové oprávnění či roli s ADMIN OPTION.
  • Příjemce role může tuto roli změnit či smazat.

Pokud uživatel vytvoří roli, je mu automaticky přiděleno oprávnění na ní s ADMIN OPTION, pokud nebyla vytvořena s NOT IDENTIFIED, IDENTIFIED EXTERNALLY nebo BY password.

Vytvoření uživatele příkazem GRANT

Pomocí příkazu GRANT lze vytvořit uživatele:

GRANT CONNECT TO someuser IDENTIFIED BY passwd;

Pokud uživatel neexistuje, je vytvořen a jsou mu udělena zadaná oprávnění. ??? co se stane, existuje-li uživatel ???

Udělování objektových oprávnění

Pro udělování objektových oprávnění příkazem GRANT musí být splněna alespoň jedna z následujících podmínek:

  • Udělující musí objekt vlastnit.
  • Udělující má systémové oprávnění GRANT ANY OBJECT PRIVILEGE.
  • Právo na objekt bylo udělujícímu uděleno s GRANT OPTION.

V příkazu GRANT se nesmí míchat systémová a objektová oprávnění.

Uvedení GRANT OPTION

Uvedení klauzule WITH GRANT OPTION povolí příjemci oprávnění udělovat přijaté objektové oprávnění dalším uživatelům a rolím. Uživatel, který objekt vlastní, má automaticky všechna oprávnění k objektu s GRANT OPTION. Oprávnění GRANT OPTION příjemci dovoluje:

  • poskytovat a odebírat toto oprávnění dalším uživatelům s nebo bez GRANT OPTION nebo roli v databázi,
  • vytvořit pohled nad tabulkou a poskytnout na něj právo dalším uživatelům a rolím, pokud platí obě následující podmínky:
  • Příjemce obdržel objektová oprávnění s GRANT OPTION.
  • Příjemce má systémové oprávnění CREATE [ANY] VIEW.

Volba GRANT OPTION není platná při předávání objektového oprávnění roli.

Udělování oprávnění jménem vlastníka objektu

Systémové oprávnění GRANT ANY OBJECT PRIVILEGE dovoluje uživateli udělit nebo odebrat objektová oprávnění jménem vlastníka objektu.

Pokud má uživatel oprávnění GRANT ANY OBJECT PRIVILEGE a současně má GRANT OPTION na objekt, pak se při udělování oprávnění na tento objekt udělí uživatelovým jménem. Pokud oprávnění GRANT OPTION nemá, oprávnění se přidělí jménem vlastníka objektu (auditový záznam však uvádí jméno pravého poskytovatele oprávnění).

Dejme tomu, že uživatel adam vlastní oprávnění GRANT ANY OBJECT PRIVILEGE, ale již nemá další udělovací právo. Pokud použije následující příkaz:

GRANT SELECT ON hr.employees TO blake WITH GRANT OPTION;

pak v tabulce DBA_TAB_PRIVS bude následující záznam:

GRANTEE   OWNER     GRANTOR     PRIVILEGE    GRANTABLE
-------   -----     -------     ---------    ---------
BLAKE     HR        HR          SELECT       YES

Pokud nyní uživatel blake, který má taktéž oprávnění GRANT ANY OBJECT PRIVILEGE, provede tento příkaz:

GRANT SELECT ON hr.employees TO henry;

pak v tabulce DBA_TAB_PRIVS bude následující:

GRANTEE   OWNER     GRANTOR     PRIVILEGE    GRANTABLE
-------   -----     -------     ---------    ---------
BLAKE     HR        HR          SELECT       YES
HENRY     HR        BLAKE       SELECT       NO

Důvodem, proč je jako udělitel oprávnění pro henryho uveden blake, je to, že blake vlastnil oprávnění SELECT s GRANT OPTION.

Udělení oprávnění na sloupce

Oprávnění INSERT, UPDATE a REFERENCES lze udělit i na jednotlivé sloupečky v tabulce.

GRANT INSERT|UPDATE|REFERENCES (colname1 [, colname2, [...]])
      ON tablename
      TO user1 [, user2 [, ...]]

Pokud se neudělí oprávnění na NOT NULL sloupce, které nemají zadanou výchozí hodnotu, INSERT se neprovede.

Příkaz GRANT

Příkaz GRANT se používá pro udělování systémových oprávnění uživatelům a rolím, rolí rolím a uživatelům a objektových oprávnění uživatelům, rolím a uživatelské skupině PUBLIC.

Pro udělení systémového oprávnění musí být toto oprávnění uděliteli poskytnuto s ADMIN OPTION nebo udělitel musí mít systémové oprávnění GRANT ANY PRIVILEGE.

Pro udělení oprávnění na roli musí mít udělitel poskytnutou roli s ADMIN OPTION nebo musí mít systémové oprávnění GRANT ANY ROLE nebo musel roli vytvořit.

Pro udělení objektového oprávnění musí udělitel objekt vlastnit, mít oprávnění získané s GRANT OPTION nebo musí mít systémové oprávnění GRANT ANY OBJECT PRIVILEGE.

GRANT grant_system_privileges|grant_object_privileges;

grant_system_privileges := {system_privilege|role|ALL PRIVILEGES}
                           [, {system_privilege|role|ALL PRIVILEGES} [, ...]]
                           TO user|role|PUBLIC [, user|role|PUBLIC [, ...]]
                           [IDENTIFIED BY password]
                           [WITH ADMIN OPTION]

grant_object_privileges := {object_privilege|ALL [PRIVILEGES]}
                           [(column [, column [,...]])]
                           [, {object_privilege|ALL [PRIVILEGES]}
                           [(column [, column [,...]])]
                           [, ...]]
                           on_object_clause
                           TO user|role|PUBLIC [, user|role|PUBLIC [, ...]]
                           [WITH GRANT OPTION]
                           [WITH HIEARCHY OPTION]

on_object_clause := ON {schema.object|
                        DIRECTORY directory_name|
                        JAVA {SOURCE|RESOURCE} [schema.]object}

Udělování systémových oprávnění a rolí

Systémová oprávnění

  • Pokud je oprávnění přiděleno uživateli, je možné jej ihned začít používat.
  • Pokud je oprávnění přiděleno roli, oprávnění je umístěno do domény oprávnění role. Uživatelé, kterým je oprávnění na roli přiděleno a mají ji povolenou, mohou nové oprávnění ihned používat. Ostatní si musí roli povolit.
  • Pokud uděluje oprávnění uživatelské skupině PUBLIC, pak je oprávnění přiděleno do domény oprávnění každého uživatele, a to i následně vytvořeným. Oprávnění je možné ihned používat
  • ALL_PRIVILEGES — udělí se všechna systémová oprávnění KROMĚ práva SELECT ANY DICTIONARY.

Oprávnění na roli

  • Pokud se uděluje oprávnění na roli uživateli, uživatel si ji může okamžitě povolit.
  • Pokud se uděluje oprávnění na roli jiné roli, pak uživatel, který má roli, které se oprávnění uděluje, povolenou, může oprávnění přiřazené role ihned používat.
  • Pokud se uděluje oprávnění na roli uživatelské skupině PUBLIC, pak je role dostupná ihned všem uživatelům a to i těm, kteří se vytvoří později.Klauzule IDENTIFIED BY

Speciálně se určí uživatel heslem, pokud uživatel neexistuje, je vytvořen. Nelze použít v případě udělování oprávnění roli nebo uživatelské skupině PUBLIC.

Klauzule WITH ADMIN OPTION (WAO)

Příjemce oprávnění může:

  • Udělovat oprávnění na roli jinému uživateli či roli, pokud nejde o GLOBAL roli.
  • Odebrat oprávnění z jiné role či jinému uživateli.
  • Změnit autorizaci role.
  • Smazat roli.

Pokud není WAO uvedeno a uživatel se k roli dostane jinak s WAO (přes jinou roli), má práva WAO.

Omezení na udělování oprávnění

  • Uživatel, role nebo uživatelská skupina se nesmí v klauzuli TO vyskytovat vícekrát.
  • Oprávnění nebo role, které se udělují, se nesmí vyskytnout v seznamu vícekrát.
  • Nelze udělit oprávnění na roli sám sobě.
  • Oprávnění na roli IDENTIFIED GLOBALLY nelze udělit nikomu.
  • Oprávnění na roli IDENTIFIED EXTERNALLY nelze udělit ani globální roli a ani globálnímu uživateli.
  • Nelze udělit oprávnění na role cyklicky.

Udělování objektových oprávnění

Objektové oprávnění nesmí být uvedeno v seznamu vícekrát.

ALL [PRIVILEGES] — všechna oprávnění, která může uživatel pro daný objekt grantovat. Objekty ve vlastním schématu jsou WITH GRANT OPTION.

column — sloupce v tabulce či view. Není-li uvedeno, jsou povoleny všechny sloupce. Lze specifikovat pouze pro oprávnění INSERT, REFERENCES či UPDATE. Informace jsou v USER_COL_PRIVS, ALL_COL_PRIVS, DBA_COL_PRIVS.

Pokud může uživatel udělovat oprávnění pouze z titulu systémového oprávnění GRANT ANY OBJECT PRIVILEGE (tedy není vlastník ani nemá na objekt objektová oprávnění), pak tak činí jménem vlastníka (bude uvedeno v *_TAB_PRIVS). Viz oddíl nazvaná Udělování oprávnění jménem vlastníka objektu.

WITH GRANT OPTION — umožňuje příjemci toto oprávnění poskytovat dále uživatelům či rolím a to včetně uživatelské skupiny PUBLIC. Tuto klauzuli nelze uvést v případě udělování oprávnění roli.

WITH HIERARCHY OPTION — oprávnění se udělují i na všechny subobjekty včetně subobjektů vytvořených následně. Má význam pouze u oprávnění SELECT.

Objektem smí být: tabulka, (materializované) view, sekvence, procedura, funkce, package, uživatelsky definovaný typ, synonymum pro libovolný předchozí objekt, adresář, library, operátor či indextype, java source, class, nebo resource.

Oprávnění nelze udělit na jednotlivou partition partitioned tabulky.

DIRECTORY — nelze dát directory s prefixem schema.

Odebrání oprávnění a rolí uživatelům

Odebrání oprávnění se provádí příkazem REVOKE.

Příkaz REVOKE

Pro odebrání systémového oprávnění nebo role musí odebírající mít oprávnění získané s ADMIN OPTION.

Pro odebrání role musí být tato odebírajícímu udělena s ADMIN OPTION nebo mít systémové oprávnění GRANT ANY ROLE.

Pro odebrání objektévého oprávnění musel odebírající dříve toto oprávnění udělit (uživateli či roli) nebo musí mít systémové oprávnění GRANT ANY OBJECT PRIVILEGE. Nelze ale takto odebrat oprávnění, které bylo uděleno s ADMIN OPTION. ??? co to je za blbost – sql reference, revoke, 17–88???

REVOKE lze použít pouze na oprávnění, která se příkazem GRANT přímo udělila. Tedy tímto příkazem nelze odebrat:

  • oprávnění nebo roli nenagrantované odebíranému
  • roli nebo objektové oprávnění nagrantované přes OS
  • oprávnění či role nagrantovaná zkrz roli
REVOKE revoke_system_privileges|revoke_object_privileges;

revoke_system_privileges := {system_privilege|role|ALL PRIVILEGES}
                            [, {system_privilege|role|ALL PRIVILEGES}
                            [, ...]]
                            FROM
                            user|role|PUBLIC [, user|role|PUBLIC [, ...]]

revoke_object_privileges := {object_privilege|ALL [PRIVILEGES]}
                            [(column [, column [,...]])]
                            [, {object_privilege|ALL [PRIVILEGES]}
                            [(column [, column [,...]])]
                            [, ...]]
                            on_object_clause
                            FROM user|role|PUBLIC [, user|role|PUBLIC [, ...]]
                            [CASCADE CONSTRAINT]
                            [FORCE]

on_object_clause := ON {schema.object|
                        DIRECTORY directory_name|
                        JAVA {SOURCE|RESOURCE} [schema.]object}

Odebrání oprávnění uživateli, roli nebo uživatelské skupině PUBLIC nabývá účinnosti ihned.

Pokud se odebere oprávnění na roli uživateli, pak uživatelům, kteří ji mají povolenou, zůstane povolená do odhlášení či zakázání uživatelem.

Pokud se odebere role (role A) z role (role B), pak uživatel mající povolenou roli B může oprávnění role A používat po dobu jejího povolení.

Pokud se odebere oprávnění na roli uživatelské skupině PUBLIC, pak uživatelé mající tuto roli povolenou ji mohou po dobu povolení ještě používat.

ALL [PRIVILEGES] odbírá všechna objektová oprávnění, která byla odebíratelem uživateli přidělena. Pokud žádné takové oprávnění není, příkaz nic neprovede, ani nevrátí chybu.

FORCE — použije se u EXECUTE objektového oprávnění pro uživatelsky definovaný typ s tabulkovou či objektovou závislostí. FORCE se musí použít pro uživatelsky definovaný typ s tabulkovou závislostí. Při použití jsou všechna oprávnění odejmuta, závislé objekty zneplatněny, data v závislých tabulkách se znepřístupní a všchny závislé function-based indexy jsou označeny jako UNUSABLE (regranting vše zvalidní).

Pokud se nespecifikuje schema, vezme se objekt ve schématu volajícího a pokud tam neexistuje, použije se synonymum.

Pokud se odebere oprávnění SELECT na tabuli nebo materializovaný pohled, které je součástí materializovaného pohledy, je mat. pohled zneplatněn.

Pokud se odebere oprávnění SELECT na master tables of a materialized view, je znevalidněno jak materializované view, tak i obsažené tabulky a materializova­né view.

Odebírání systémových oprávnění

Každý uživatel nebo role se systémovým oprávněním ADMIN OPTION může odebrát toto právo libovolnému dalšímu uživateli či roli v databázi. Odebírající nemusí být ten, který dříve právo uděloval. Uživatel s oprávněním GRANT ANY ROLE může odebrat libovolnou roli.

Samotné oprávnění ADMIN OPTION nelze odebrat. Musí se odebrat celé oprávnění a pak udělit oprávnění bez ADMIN OPTION.

Odebírání objektových oprávnění

Pro odebrání objektového oprávnění musí být splněna jedna z následujících podmínek:

  • Oprávnění bylo odebíratelem uživateli nebo roli přiděleno.
  • Odebíratel má systémové oprávnění GRANT ANY OBJECT PRIVILEGE.

Odebíratel může odebrat pouze takové oprávnění, které sám udělil, nikoliv takové, které na základě GRANT OPTION udělil příjemce dalšímu uživateli. Ale funguje kaskádový efekt — pokud příjemce udělil oprávnění dalšímu uživateli a příjemci je oprávnění odebráno, pak právo na objekt je vzán oběma.

Samotné oprávnění GRANT OPTION nelze odebrat. Musí se odebrat celé oprávnění a pak udělit oprávnění bez GRANT OPTION. Uživatel nemůže odebrat oprávnění sám sobě.

Odebrání oprávnění jmeném vlastníka objektu

Systémové oprávnění GRANT ANY OBJECT PRIVILEGE dovoluje odebrat libovolné objektové oprávnění, kdy udělitel oprávnění je vlastník objektu.

Pokud je oprávnění jak vlastníkem objektu, tak uživatelem spouštějícím příkaz REVOKE, který má jak specifické objektové oprávnění a oprávnění GRANT ANY OBJECT PRIVILEGE, pak se odebere pouze to objektové oprávnění, které udělil uživatel spouštějící příkaz REVOKE.

Pokračujme v příkladu uvedeném v kapitole oddíl nazvaná Udělování oprávnění jménem vlastníka objektu. Předpokládejme, že HR udělil právo SELECT uživateli HENRY. Tabulka DBA_TAB_PRIVS bude mít následující informace:

GRANTEE   OWNER     GRANTOR     PRIVILEGE    GRANTABLE
-------   -----     -------     ---------    ---------
BLAKE     HR        HR          SELECT       YES
HENRY     HR        BLAKE       SELECT       NO
HENRY     HR        HR          SELECT       NO

Pokud uživatel blake spustí následující příkaz:

REVOKE SELECT ON HR.empoyees FROM henry;

pak se odebere oprávnění udělené uživatelem blake:

GRANTEE   OWNER     GRANTOR     PRIVILEGE    GRANTABLE
-------   -----     -------     ---------    ---------
BLAKE     HR        HR          SELECT       YES
HENRY     HR        HR          SELECT       NO

Pokuž uživatel blake spustí příkaz znovu, odebere se oprávnění udělené uživatelem hr:

GRANTEE   OWNER     GRANTOR     PRIVILEGE    GRANTABLE
-------   -----     -------     ---------    ---------
BLAKE     HR        HR          SELECT       YES

Odebírání objektových oprávnění na sloupce tabulky

Oprávnění udělená na jednotlivé sloupce tabulky nelze odebrat jinak než na všechny sloupce najednou a následně případně udělit objektové oprávnění na jinou množinu sloupců.

Odebrání objektových oprávnění REFERENCES

Pokud příjemce objektového oprávnění REFERENCES tohoto oprávnění využil, pak udělitel musí při odebírání oprávnění použít volbu CASCADE CONSTRAINT. Ta zajistí, že budou zrušeny všechny cizí klíče.

Kaskádový efekt odebrání oprávnění

Systémová oprávnění

Systémová oprávnění vztažená k DDL operacím nemají žádný kaskádový efekt bez ohledu na to, zda bylo oprávnění uděleno s ADMIN OPTION nebo bez něj.

Pro DML operace lze kaskádový efekt sledovat. Např. při odejmutí oprávnění SELECT ANY TABLE může dojít k zneplatnění procedur, ve kterých se zjišťují informace z tabulek, na které přestane mít uživatel oprávnění.

Objektová oprávnění

Pokud definice objektu závisí na DML objektovém oprávnění a toto je odebráno, objekt nebude dále použitelný. Pokud se odebírá oprávnění REFERENCES, pak vytvořené cizí klíče na základě tohoto oprávnění jsou odstraněny. Pokud uživatel A udělí oprávnění na objekt uživateli B s ADMIN OPTION a uživatel B udělí oprávnění uživateli C a následně uživatel A odebere oprávnění uživateli B, pak ani uživatel C nemá možnost s objektem pracovat.

Objektové definice vyžadující objektová oprávnění ALTER nebo INDEX DDL nejsou dotčeny po odebrání těchto oprávnění. Pokud tedy např. uživatel vytvoří index na tabulkou jiného uživatele a pak je mu odebráno oprávnění pro vytváření indexu, vytvořený index zůstane zachován.

Udělování a odebírání oprávnění uživatelské skupině PUBLIC

Oprávnění a role je také možné udělit či odebrat uživatelské skupině PUBLIC. Odebrání DML oprávnění může zapříčinit kaskádový efekt, kdy všechny dotčené objekty musí být reautorizovány. ??? co to je???

Začátek platnosti udělení a odebrání oprávnění

Všechna udělení a odejmutí oprávnění komukoliv (uživateli, roli či PUBLICu) se projeví ihned.

Všechna udělení a odejmutí rolí komukoliv (uživateli, roli či PUBLICu) se projeví až po příkazu SET ROLE nebo po novém přihlášení.

Příkaz SET ROLE

SET ROLE ALL [EXCEPT role[, role [, ...]]
SET ROLE NONE
SET ROLE role [IDENTIFIED BY password] [, role [IDENTIFIED BY password] [,...]]

SET ROLE povoluje nebo zakazuje role pro session, ve které se příkaz spustí. Po zalogování má uživatel všechna oprávnění udělena explicitně a oprávnění z výchozích rolí. Během session může uživatel libovolně povolovat/zaka­zovat role.

ALL — v EXCEPT musí být pouze role přímo nagrantované uživateli. Pokud se zde zakáže role, která je nagrantována i zkrz jinou roli, zůstane povolena. Tímto způsobem nelze takto povolit role s heslem.

NONE — zakazuje všechny role včetně výchozích.

Na role, které si chce uživatel povolit, musí mít odpovídající oprávnění. Aktuálně povolené role jsou v pohledu SESSION_ROLES. Maximální počet současně povolených rolí uživateli se nastavuje inicializačním parametrem MAX_ENABLED_ROLES. Pokud se povolí role, která obsahuje další role, jsou tyto další role do uvedeného počtu započítány. Vyšší číslo znamená i větší potřebu paměti v PGA (čtyři bajty pro každou roli).

Vypnutí všech aktivních rolí se provede následujícím příkazem:

SET ROLE NONE;

Výchozí role

Výchozí role jsou role, které má uživatel aktivní, pokud se přihlásí k databázi. Pokud jsou tyto role chráněny heslem, pak je není třeba při přihlašování zadávat.

Výchozí role se zadávají příkazem ALTER USER:

ALTER USER username DEFAULT ROLE rolename1 [, rolename2 [, ...]]

Jako výchozí roli lze specifikovat i externí a globální roli.

Výchozí roli nelze specifikovat v příkazu CREATE USER. Pokud se uživatel vytvoří, výchozí role je zadána jako ALL, což znamená, že všechny později přidělené role jsou výchozími. Příkaz ALTER USER toto může omezit.

Seznam systémových oprávnění

Tabulka 2. Seznam systémových oprávnění

Skupina Oprávnění
CLUSTERS CREATE [ANY] CLUSTER, ALTER ANY CLUSTER, DROP ANY CLUSTER
CONTEXTS CREATE ANY CONTEXT, DROP ANY CONTEXT
DATABASE ALTER DATABASE, ALTER SYSTEM, AUDIT SYSTEM
DATABASE LINKS CREATE [PUBLIC] DATABASE LINK, DROP PUBLIC DATABASE LINK
DEBUGGING DEBUG CONNECT SESSION, DEBUG ANY PROCEDURE
DIMENSIONS CREATE [ANY] DIMENSION, ALTER ANY DIMENSION, DROP ANY DIMENSION
DIRECTORIES CREATE ANY DIRECTORY, DROP ANY DIRECTORY
INDEXTYPES CREATE [ANY] INDEXTYPE, ALTER ANY INDEXTYPE, DROP ANY INDEXTYPE, EXECUTE ANY INDEX TYPE
INDEXES CREATE ANY INDEX, ALTER ANY INDEX, DROP ANY INDEX, [GLOBAL] QUERY REWRITE (pro materializované pohledy)
LIBRARIES CREATE [ANY] LIBRARY, DROP ANY LIBRARY
MATERIALIZED VIEWS CREATE [ANY] MATERIALIZED VIEW, ALTER ANY MATERIALIZED VIEW, DROP ANY MATERIALIZED VIEW, [GLOBAL] QUERY REWRITE, ON COMMIT REFRESH, FLASHBACK ANY TABLE
OPERATORS CREATE [ANY] OPERATOR, DROP ANY OPERATOR, EXECUTE ANY OPERATOR
OUTLINES CREATE ANY OUTLINE, ALTER ANY OUTLINE, DROP ANY OUTLINE
PROCEDURES CREATE [ANY] PROCEDURE, ALTER ANY PROCEDURE, DROP ANY PROCEDURE, EXECUTE ANY PROCEDURE
PROFILES CREATE PROFILE, ALTER PROFILE, DROP PROFILE
ROLES CREATE ROLE, ALTER ANY ROLE, DROP ANY ROLE, GRANT ANY ROLE
ROLLBACK SEGMENTS  
SEQUENCES CREATE [ANY] SEQUENCE, ALTER ANY SEQUENCE, DROP ANY SEQUENCE, SELECT ANY SEQUENCE
SESSIONS CREATE SESSION, ALTER RESOURCE COST, ALTER SESSION, RESTRICTED SESSION
SYNONYMS CREATE [ANY%PUBLIC] SYNONYM, ALTER ANY SYNONYM, DROP ANY%PUBLIC SYNONYM
TABLES CREATE [ANY] TABLE, ALTER ANY TABLE, BACKUP ANY TABLE, DELETE ANY TABLE, DROP ANY TABLE, INSERT ANY TABLE, LOCK ANY TABLE, SELECT ANY TABLE, FLASBACK ANY TABLE, UPDATE ANY TABLE (pozor, ne všechny platí pro externí tabulky)
TABLESPACES CREATE TABLESPACE, ALTER TABLESPACE, DROP TABLESPACE, MANAGE TABLESPACE (online, offline, begin and end backup), UNLIMITED TABLESPACE (nelze udělit roli)
TRIGGERS CREATE [ANY] TRIGGER, ALTER ANY TRIGGER, DROP ANY TRIGGER, ADMINISTER ANY TRIGGER (triggery nad databází, musí být ve spojení s CREATE [ANY] TRIGGER)
TYPES CREATE [ANY] TYPE, ALTER ANY TYPE, DROP ANY TYPE, EXECUTE ANY TYPE, UNDER ANY TYPE
USERS CREATE USER, ALTER USER, BECOME USER (používá se při full database import), DROP USER
VIEWS CREATE [ANY] VIEW, DROP ANY VIEW, UNDER ANY VIEW, FLASHBACK ANY VIEW
MISCELLANEOUS ANALYZE ANY, AUDIT ANY, COMMENT ANY TABLE (platí i pro sloupce), EXTEMPT ACCESS POLICY, FORCE [ANY] TRANSACTION, GRANT ANY [OBJECT] PRIVILEGE, RESUMABLE (povoluje resumable space allocation), SELECT ANY DICTIONARY, SYSDBA, SYSOPER

Objektová oprávnění

Objektová oprávnění pro tabulku

Libovolné následující objektové oprávnění dovoluje zamknout tabulku pomocí LOCK TABLE.

ALTER, DELETE, DEBUG, INDEX, INSERT, REFERENCES (nelze udělit roli), SELECT, UPDATE.

Objektová oprávnění pro pohled

Libovolné následující objektové oprávnění dovoluje zamknout pohled pomocí LOCK TABLE.

DELETE, DEBUG, INSERT, REFERENCES, SELECT, UNDER, UPDATE.

Objektová oprávnění pro sekvenci

ALTER, SELECT.

Objektová oprávnění pro proceduru, funkci, package, Java source, classes a resources

DEBUG, EXECUTE (tj. včetně kompilace).

Objektová oprávnění pro materializovaný pohled

ON COMMIT REFRESH, QUERY REWRITE, SELECT.

Auditování

Auditování je monitorování a zaznamenávání vybraných činností spojených s databázovými uživateli. Běžně se používá pro sledování podezřelých operací nebo pro monitorování a sbírání dat o určitých činnostech (např. které tabulky se nejčastěji používají, čehož lze využít při ladění I/O operací).

Oracle podporuje celkem 4 typy ??? proč dokumentace uvádí 3 a v popisu jsou 4???? auditu.

  • Audit příkazů — sleduje globálně (tedy ne na jednom konkrétním schématu či na jednom konkrétním objektu) určený typy SQL příkazů. Sledování je typicky plošné (broad). Např. AUDIT TABLE sleduje různé DDL příkazy nad tabulkou bez ohledu na to, nad kterou tabulkou operace probíhá. Audit příkazů lze nastavit na vybrané uživatele nebo na všechny uživatele.
  • Audit oprávnění — sleduje používání vybraných systémových oprávnění (např. AUDIT CREATE TABLE). Tento audit je více specifický, protože sleduje pouze vybrané oprávnění. Audit oprávnění lze nastavit na vybrané uživatele nebo na všechny uživatele.
  • Audit objektu schématu — sleduje používání vybraných příkazů na konkrétním objektu schématu (např. AUDIT SELECT ON tablename). Tento audit je nejvíce specifický — sleduje pouze vybraný příkaz nad vybraným objektem. Auditují se operace všech uživatelů s objektem.
  • Audit na podrobné úrovni — sleduje přístup k datům založených na obsahu.

Auditování lze provádět plošně nebo zaměřeně. Auditovat lze:

  • Úspěšně provedené příkazy, příkazy, které selhaly, nebo obojí.
  • První spuštění konkrétního příkazu během session nebo každé spuštění.
  • Aktivity všech nebo vybraných uživatelů.

Auditovací záznamy obsahují informace jako je auditovaná operace, uživatel, který akci vyvolal a datum a čas provedení operace. Auditovací záznamy mohou být uloženy v tabulce systémového katalogu nazvané auditovací řetězec (audit trail) nebo v auditovacím řetězci operačního systému (např. ve Windows je to Application Event Log).

Databázoví auditovací řetězec je v tabulce AUD$ schématu SYS. Nad touto tabulkou existují některé předdefinované pohledy.

Auditovací záznam obsahuje v závislosti na typu auditu různé informace. Mezi ně patří:

  • uživatelské jméno,
  • identifikace session,
  • identifikace terminálu,
  • jméno přistupovaného schématu,
  • operace, která se (ne)provedla,
  • kompletní zdrojový kód operace,
  • časové razítko,
  • použité systémové oprávnění.

Auditovací řetězec operačního systému používá kódované informace, ale je čitelný v souborech datového slovníku a chybových zprávách. Jednotlivé kódy jsou popsány v následujícím výč­tu.

  • Kód akce popisuje operaci, která se (ne)provedla. Pohled AUDIT_ACTIONS obsahuje tyto kódy a jejich popis.
  • Použitá oprávnění popisují každé systémové oprávnění použité pro vykonání operace. Pohled SYSTEM_PRIVILE­GE_MAP popisuje kódy oprávnění a jejich popis.
  • Kód dokončení popisuje výsledek spouštěné operace. Pokud operace proběhla v pořádku, obsahuje 0, jinak se vrací Oracle error.

Čas generování auditovacích záznamů

Zaznamenávání auditovacích informací může být povoleno nebo potlačeno. Pokud je povoleno, jsou záznamy zapisovány během vykonávání příkazu. Vkládání auditovaných záznamů je vždy potvrzováno, nemá tedy na to vliv uživatelská transakce. SQL příkazy uvnitř PL/SQL programů jsou auditovány zvlášť.

Operace uživatele SYS a uživatelů přihlášených jako SYSDBA nebo SYSOPER mohou být plně auditovány pomocí inicializačního parametru AUDIT_SYS_OPE­RATIONS (hodnoty TRUE nebo FALSE). Všechny auditovací záznamy uživatele SYS jsou auditovány do souboru operačního systému, který obsahuje auditovací řetězec a to bez ohledu na hodnotu inicializačního parametru AUDIT_TRAIL (viz dále).

Velikost auditovacího řetězce

Pokud se auditovací řetězec zaplní, není možné spustit další příkaz, který je auditován.

Záznamy v SYS.AUD$ může smazat pouze uživatel SYS, uživatel s oprávněním DELETE ANY TABLE nebo uživatel, kterému SYS udělil objektové oprávnění DELETE na uvedenou tabulku. SYS.AUD$ je jediný objekt ve schématu SYS, který lze přímo modifikovat.

Pokud jsou auditovány i přihlášení, pak se může přihlásit při plném auditovacím řetězci pouze SYS.

Události, které jsou vždy auditovány do auditovacího řetězce operačního systému

Bez ohledu na to, zda je auditování povoleno či nikoliv, Oracle vždy zaznamená následující operace do auditovacího řetězce operačního systému:

  • Při startu instance je vygenerován auditovací záznam. Ten nelze zapsat do auditovacího řetězce v databázi, protože ta ještě není plně nastartována.
  • Ukončení instance.
  • Při přihlašování uživatele s administrátor­skými oprávněními.

Pokud operační systém neumožňuje přistupovat do jeho auditového řetězce, pak tyto záznamy jsou v souboru s auditačním řetězci, který je ve stejném adresáři jako trace soubory procesů na pozadí.

Kdy nastavení auditu vejde v platnost

Nastavení auditu příkazů a oprávnění se načte při vytvoření session a platí až do jejího ukončení. Změny v nastavení auditu objektů schématu se projeví ihned.

Audit do auditového řetězce operačního systému

Oracle umožňuje zapisovat aditové záznamy do auditového řetězce operačního systému (je to závislé na použitém OS). Jinde je to zapisováno do souboru, jehož formát je podobný trace souborům.

Auditování příkazů

Auditování příkazů je výběrový audit vybrané skupiny příkazů, které spadají do dvou kategorií:

  • DDL příkazy týkající se konkrétního typu databázové struktury nebo objektu schámatu, ale nikoliv konkrétní struktury nebo konrkétního objektu (např. AUDIT TABLE sleduje všechny příkazy CREATE a DROP TABLE).
  • DML příkazy týkající se konkrétního typu databázové struktury nebo objektu schámatu, ale nikoliv konkrétní struktury nebo konrkétního objektu (např. AUDIT SELECT TABLE sleduje všechny příkazy SELECT … FROM TABLE/VIEW.

Auditování příkazů může být plošné nebo specializované, auditovat lze všechny uživatele nebo jen vybrané.

Auditování oprávnění

Auditování oprávnění je auditování konkrétních příkazů povolených systímovými oprávněními. Např. auditování systémového oprávnění SELECT ANY TABLE spočívá ve sledování uživatelských příkazů, které uvedené oprávnění vyžadují. Auditovat lze libovolné systémové oprávnění.

V každém případě se nejprve zjišťuje oprávnění vlastníka nebo objektové oprávnění. Pokud se při přístupu použije toto oprávnění, pak se auditový záznam nevygeneruje.

Pokud jsou nastaveny podobné audity příkazu a oprávnění (např. příkaz CREATE a oprávnění CREATE TABLE), zapíše se pouze jeden záznam.

Auditování oprávnění je více specifické než auditování příkazů, protože každá volba auditu se specializuje na konkrétní typy příkazů, nikoliv však na vztažený seznam příkazů. Např. auditování příkazů TABLE audituje CREATE TABLE, ALTER TABLE a DROP TABLE, kdežto auditování oprávnění CREATE TABLE zaznamenává pouze příkaz CREATE TABLE.

Auditovat lze všechny uživatele nebo jen vybrané.

Auditování objektů schématu

Auditování objektů schématu je auditování vybraných DML příkazů (včetně dotazů) a příkazů GRANT a REVOKE pro vybrané objekty schématu. Auditování objektů schématu sleduje operace povolené objektovými oprávněními, jako jsou SELECT či DELETE nad danou tabulkou, a stejně tak příkazy GRANT a REVOLE řídící tato oprávnění.

Lze auditovat příkazy které se odkazují na tabulky, pohledy, sekvence, uložené procedury, funkce a balíčky. Procedury uvnitř balíčků individuálně auditovat nelze.

Příkazy, které se odkazují na klastry, databázové linky, indexy nebo synonyma nejsou auditovány přímo, ale lze auditovat přístup k těmto objektům nepřímo sledováním operací ovlivňující základní tabulky.

Auditování objektů schématu je vždy nastaveno pro všechny uživatele databáze. Lze nastavit auditování objektů schématu pro všechny objekty, které lze auditovat.

Volby auditování objektů schémat pro pohledy a procedury

Pohledy a procedury (včetně uložených funkcí, balíčků a triggerů) mohou odkazovat na další objekty, proto auditování pohledů a procedur má svá vlastní specifika. Při auditování může vzniknout několik auditovacích záznamů: použití pohledu nebo procedury může být auditováno, stejně tak použití podobjektů, které jsou v těchto použity.

Pokud se tedy např. audituje pohled P, který používá tabulku T a oba použití obou objektů je auditováno, pak se vytvoří záznam jednak o použití P a jednak záznam o použití T.

Nastavení auditu pohledu nebo procedury je dáno při prvním použití, kdy se načte do sdílené oblasti (shared pool). Toto nastavení je platné dokud není pohled či procedura ze sdílené oblasti odstraněna. Auditování objektu schématu zneplatní toto schéma v cache a způsobé jeho znovunačtení. Změna auditového nastavení podkladového objektu není pohledem či procedurou ve sdílené oblasti pozorováno.

Pokud se vypne v předchozím příkladě auditování použití T, pak použití P již nevygeneruje záznam pro T.

Audit na podrobné úrovni

Audit na podrobné úrovni umožňuje auditovat použití konkrétních řádků či sloupců tabulky v příkazu SELECT. K obsluze slouží balíček DBMS_FGA.

Zaměření auditování

Audit příkazů, oprávnění a objektů lze zaměřit na tyto tři oblasti:

  • Úspěšné i neúspěšné provedení příkazu.
  • Audit v rámci session (BY SESSION) nebo spuštění (BY ACCESS).
  • Pro vybrané uživatele nebo pro všechny (nelze vybrat pro audit objektu).

Auditování úspěchu či neúspěchu provedení příkazu

Pro všechny tři typy auditu je možné zvolit auditování pouze selhání příkazů, úspěšné provedení příkazů nebo obojí. Neúspěšné provedení příkazu lze auditovat pouze v případě, že spouštějící nemá dostatek oprávnění nebo když se odkazuje na neexistující objekt. Pokud uživatel zadá nesmyslný příkaz, pak tento auditován není.

Omezení auditu na úspěšné příkazy se provádí klauzulí WHENEVER SUCCESSFUL na nauspěšné WHENEVER NOT SUCCESSFUL v příkazu AUDIT. Pokud se neuvede ani jedna z uvedených klauzulí, audituje se vše.

Audit v rámci session nebo spuštění

Pro všechny tři typy auditu je možné provádět audit v rámci session (BY SESSION) zaznamenávající stejné auditové záznamy pouze jednou v rámci session nebo audit každého spuštění (BY ACCESS) zapisující auditový záznam při každém použití.

Pokud se auditové záznamy píší do auditového řetězce operačního systému, pak se BY SESSION chová stejně jako BY ACCESS, protože Oracle nepozná, co již zapsal.

Příkaz AUDIT dovoluje uvést obě klauzule (BY SESSION i BY ACCESS). Některé nastavení však může být zadané pouze s BY ACCESS. Patří mezi ně audity příkazů a privilegií týkající se DDL příkazů. Pro ostatní volby je výchozí BY SESSION.

Auditování všech nebo vybraných uživatelů

Pro audit příkazů a oprávnění lze omezit zapisování audtivacích záznamů pouze pro vybrané uživatele, jejihž seznam se uvádít v příkazu AUDIT. Pokud se seznam neuvede, audituje se pro všechny uživatele.

Ochrana databázového auditovacího řetězce

Pro sledování operací nad tabulkou SYS.AUD$ v případě podezření na nepatřičnou činnost je potřeba provést ochranu uvedené tabulky:

AUDIT INSERT, UPDATE, DELETE
  ON sys.aud$
  BY ACCESS;

Povolení a zakázání auditu

Auditovací informace jsou bez ohledu na nastavení auditu pomocí příkazu AUDIT generovány pouze tehdy, je-li správně nastaven inicializační parametr AUDIT_TRAIL.

Inicializační parametr AUDIT_TRAIL může nabývat tří hodnot:

  • DB — auditovací záznamy jsou vkládány do databáze.
  • OS — auditovací záznamy jsou ukládány do auditovacího řetězce operačního systému.
  • NONE — k auditu nedochází.

Inicializační parametr AUDIT_FILE_DEST určuje umístění v operačním systému, kam jsou ukládány auditovací informace, je-li inicializační parametr AUDIT_TRAIL nastaven na OS. Je to také umístění, kam se ukládají povinné auditovací záznamy a, je-li nastaven inicializační parametr AUDIT_SYS_OPE­RATIONS, také auditovací záznamy pro uživatele SYS. Pokud není AUDIT_FILE_DEST specifikován, pak je použita výchozí hodnota $ORACLE_HOME/rdbms/au­dit. V některých operačních systémech jako je např. Windows se tento parametr nenastavuje, neboť auditovací záznamy jsou ukládány do Application Event Logu. Na některých operačních systémech je vždy použita výchozí hodnota, protože dokud není databáze namountována, hodnota parametru je neznámá.

Příkaz AUDIT

Pro spuštění příkazu audit pro auditování příkazů a oprávnění je zapotřebí mít systémové oprávnění AUDIT SYSTEM. Pro auditování objektů je potřeba objekt vlastnit nebo mít oprávnění AUDIT ANY.

{}* je opakování přes čárku

AUDIT sql_statement_clause|schema_object_clause
      [BY SESSION|ACCESS]
      [WHENEVER [NOT] SUCCESSFUL]

sql_statement_clause ::=

  {ALL|statement_option}*|{{ALL PRIVILEGES}|system_privileges}*
  [auditing_by_clause]

auditing_by_clause ::=

  BY {user}*|{{proxy}* [ON BEHALF OF ANY|{user}*]}*

schema_object_clause ::=

  ALL|{object_option}* auditing_on_clause

auditing_on_clause ::=

  ON {[schema.]object}|{DIRECTORY directory_name}|DEFAULT

system_privileges — namísto specifikování mnoha systémových oprávnění lze specifikovat role CONNECT, RESOURCE a DBA. Dále lze použít ALL a ALL PRIVILEGES.

ALL audituje všechna nastavení příkazů uvedených v tabulce Tabulka 3 ale ne rozšířené nastavení příkazů z tabulky Tabulka 4.

ALL PRIVILEGES audituje všechna oprávnění.

object_option — tabulka Tabulka 5 ukazuje všechny volby objektu a typy objektu, který lze takto nastavit. ALL zde říká všechny volby, které lze objektu přiřadit.

ON DEFAULT určuje nastavení objektů, které se po tomto příkazu vytvoří. Pokud se nastavení změní, pak platí až pro dále vytvořené objekty. Výchozí nastavení pro pohled je sjednocení nastavení všech podkladových tabulek. Výchozí nastavení auditu vrací pohled ALL_DEF_AUDIT_OPTS. Pro existující objekt lze změnit nastavení auditu pouze pokud se výslovně uvede jeho název v klauzuli ON.

Tabulka 3. Volby auditování příkazů pro databázové objekty

Volba SQL příkazy a operace
CLUSTER CREATE CLUSTER, AUDIT CLUSTER, DROP CLUSTER, TRUNCATE CLUSTER.
CONTEXT CREATE CONTEXT, DROP CONTEXT.
DATABASE LINK CREATE DATABASE LINK, DROP DATABASE LINK.
DIMENSION CREATE DIMENSION, ALTER DIMENSION, DROP DIMENSION.
DIRECTORY CREATE DIRECTORY, DROP DIRECTORY.
INDEX CREATE INDEX, ALTER INDEX, DROP INDEX.
NOT EXISTS Všechny SQL příkazy, které selžou z důvodu odkazování se na objekt, který neexistuje.
PROCEDURE CREATE FUNCTION, CREATE LIBRARY, CREATE PACKAGE, CREATE PACKAGE BODY, CREATE PROCEDURE, DROP FUNCTION, DROP LIBRARY, DROP PACKAGE, DROP PROCEDURE.
PROFILE CREATE PROFILE, ALTER PROFILE, DROP PROFILE.
PUBLIC DATABASE LINK CREATE PUBLIC DATABASE LINK, DROP PUBLIC DATABASE LINK.
PUBLIC SYNONYM CREATE PUBLIC SYNONYM, DROP PUBLIC SYNONYM.
ROLE CREATE ROLE, ALTER ROLE, DROP ROLE, SET ROLE.
ROLLBACK SEGMENT CREATE ROLLBACK SEGMENT, ALTER ROLLBACK SEGMENT, DROP ROLLBACK SEGMENT.
SEQUENCE CREATE SEQUENCE, DROP SEQUENCE.
SESSION Přihlášení.
SYNONYM CREATE SYNONYM, DROP SYNONYM.
SYSTEM AUDIT AUDIT sql_statements, NOAUDIT sql_statements.
SYSTEM GRANT GRANT system_privile­ges_and_roles, REVOKE system_privile­ges_and_roles.
TABLE CREATE TABLE, ALTER TABLE, DROP TABLE.
TABLESPACE CREATE TABLESPACE, ALTER TABLESPACE, DROP TABLESPACE.
TRIGGERS CREATE TRIGGER, ALTER TRIGGER s klauzulí ENABLE nebo DISABLE, DROP TRIGGER, ALTER TABLE s klauzulí ENABLE ALL TRIGGERS nebo DISABLE ALL TRIGGERS.
TYPE CREATE TYPE, CREATE TYTE BODY, ALTER TYPE, DROP TYPE, DROP TYPE BODY.
USER CREATE USER, ALTER USER, DROP USER.
VIEW CREATE VIEW, DROP VIEW.

Tabulka 4. Další volby auditování příkazů pro databázové objekty

Volba SQL příkazy a operace
ALTER SEQUENCE ALTER SEQUENCE.
ALTER TABLE ALTER TABLE.
COMMENT TABLE COMMENT ON TABLE table, view, materialized view. COMMENT ON COLUMN table.column, view.column, materialized view.column.
DELETE TABLE DELETE FROM table, view.
EXECUTE PROCEDURE CALL (volání libovolné procedury nebo funkce nebo přístup k libovolné proměnné, knihovně nebo kursoru v balíčku).
GRANT DIRECTORY GRANT privilege ON directory, REVOKE privilege ON directory.
GRANT PROCEDURE GRANT privilege ON procedure, function, package, REVOKE privilege ON procedure, function, package.
GRANT SEQUENCE GRANT privilege ON sequence, REVOKE privilege ON sequence.
GRANT TABLE GRANT privilege ON table, view, materialized view, REVOKE privilege ON table, view, materialized view.
GRANT TYPE GRANT privilege ON type, REVOKE privilege ON type.
INSERT TABLE INSERT INTO table, view.
LOCK TABLE LOCK TABLE table, view.
SELECT SEQUENCE Libovolný příkaz obsahující sequence.NEXTVAL nebo sequence.CURRVAL.
SELECT TABLE SELECT FROM table, view, materialized view.
UPDATE TABLE UPDATE table, view.

Tabulka 5. Volby auditu objektů

Volba objektu Tabulka Pohled Sekvence Procedura, funkce, balíček Materializovaný pohled Adresář Knihovna Objektový typ Obsah
ALTER X X X X
AUDIT X X X X X X X X
COMMENT X X X
DELETE X X X
EXECUTE X X
GRANT X X X X X X X X
INDEX X X
INSERT X X X
LOCK X X X
READ X
RENAME X X X X
SELECT X X X X
UPDATE X X X

Audit příkazů

Audit příkazů má dvě speciální vlastnosti.

První je audit příkazu SESSION, což je vlastně vytvoření session a nikdy jindy jej nelze vytvořit. Záznam je vytvořen při připojení uživatele a aktualizován při jeho odpojení.

Druhý je aditování příkazů, které selžou, protože odkazovaný objekt neexistuje (NOT EXISTS).

Audit oprávnění

Zadávání volby oprávnění k auditu se naprosto přesně shoduje s názvem oprávnění

Audit objektů — použití DEFAULT

Pokud použijeme následující příkaz:

AUDIT ALTER, GRANT, INSERT, UPDATE, DELETE
  ON DEFAULT;

pak libovolný objekt vytvořený následně je automaticky auditován se zadanými volbami. Pokud se tedy např. vytvoří tabulka, jsou auditovány operace ALTER, GRANT, INSERT, UPDATE a DELETE. Pokud vytvoříte sekvenci, pak se automaticky auditují příkazy ALTER a GRANT.

Příkaz NOAUDIT

Příkaz NOAUDIT vypíná auditování zadaných vlastností. Pro jeho spuštění pro vypnutní auditu objektů je potřeba objekt vlastnit nebo mít systémové oprávnění AUDIT ANY. Pro vypnutí auditování příkazů je nutné systémové oprávnění AUDIT SYSTEM.

NOAUDIT musí mít tu samou syntaxi jako předchozí příkaz AUDIT. Dále, navrací na původní hodnotu pouze tento konkrétní příkaz. Předpokládejme příkaz AUDIT A, který nastaví auditování pro jednoho uživatele. Na to se spustí druhý příkaz AUDIT, nazvěme jej B, který nastaví auditování přo všechny uživatele. Příkaz NOAUDIT C, který zakazuje audit všem uživatelům, ruší pouze příkaz B, příkaz A nadále zůstává v platnosti.

{}* je opakování přes čárku

NOAUDIT {sql_statement_clause}*|{schema_object_clause}*
        [WHENEVER [NOT] SUCCESSFUL];

sql_statement_clause ::=

  {ALL|statement_option}*|{{ALL PRIVILEGES}|system_privileges}*
  [auditing_by_clause]

auditing_by_clause ::=

  BY {user}*|{{proxy}* [ON BEHALF OF ANY|{user}*]}*

schema_object_clause ::=

  ALL|{object_option}* auditing_on_clause

auditing_on_clause ::=

  ON {[schema.]object}|{DIRECTORY directory_name}|DEFAULT

Pokud se nespecifikuje WHENEVER, pak se vypne auditování jak úspěšného tak neúspěšného provedení operace.

Volby BY SESSION/BY ACCESS nejsou v tomto příkazu podporovány.

???Bude vhodné vyzkoušet, co se stane, když se povolí audit všeho a pak se zakáže audit neúspěšných operací.???

Pohledy pro auditovací řetězec

Databázový auditový řetězec (SYS.AUD$) je jedna tabulka. Pomocí skriptu catalog.sql a cataudit.sql lze vytvořit následující pohledy (kromě STMT_AUDIT_OP­TION_MAP).

Auditovací pohledy:

  • STMT_AUDIT_OP­TION_MAP Obsahuje informace o typech kódů auditovacích voleb (vytváří sql.bsq při vytváření databáze).
  • AUDIT_ACTIONS Obsahuje popis pro kódy typů akcí auditovacího řetězce.
  • ALL_DEF_AUDIT_OPTS Obsahuje výchozí volby auditu objektů, které se aplikují na objekt, je-li vytvořen.
  • DBA_STMT_AUDIT_OPTS Popisuje současné volby auditu příkazů přes systém a uživatele.
  • DBA_PRIV_AUDIT_OPTS Popisuje současné volby auditu oprávnění přes systém a uživatele.
  • DBA_OBJ_AUDIT_OPTS (USER_OBJ_AUDIT_OP­TS) Popisuje současné volby auditu objektů přes systém a uživatele.
  • DBA_AUDIT_TRAIL (USER_AUDIT_TRAIL) Vypisuje všechny záznamy auditovacího řetězce.
  • DBA_AUDIT_OBJECT (USER_AUDIT_OBJECT) Obsahuje všechny záznamy auditu objektů.
  • DBA_AUDIT_SESSION (USER_AUDIT_SES­SION) Popisuje všechny záznamy vztahující se k auditu přihlášení a odhlášení.
  • DBA_AUDIT_STATEMENT (USER_AUDIT_STA­TEMENT) Popisuje auditový řetězec obsahující příkazy GRANT, REVOKE, AUDIT, NOAUDIT a ALTER SYSTEM.
  • DBA_AUDIT_EXISTS Obsahuje auditové záznamy vygenerované BY AUDIT NOT EXISTS.
  • DBA_AUDIT_POLICIES Zobrazí auditovací politiky v systému. Používá se pro audit podrobných událostí.
  • DBA_FGA_AUDIT_TRAIL Obsahuje auditové záznamy pro audit založený na hodnotách. Používá se pro audit podrobných událostí.

Pokud již pohledy nejsou třeba, lze je smazat pomocí skriptu catnoaud.sql.

???

Při zkoušení viz příklad v dba guide p. 26–20.

Systémový katalog

DBA_USERS

Pohled obsahuje informace o uživatelích databáze.

SELECT USERNAME,
       USER_ID,
       PASSWORD,
       ACCOUNT_STATUS,
       LOCK_DATE,
       EXPIRY_DATE,
       DEFAULT_TABLESPACE,
       TEMPORARY_TABLESPACE,
       CREATED,
       PROFILE,
       INITIAL_RSRC_CONSUMER_GROUP,
       EXTERNAL_NAME
  FROM DBA_USERS

Význam sloupců DBA_USERS

  • USERNAME Jméno uživatele.
  • USER_ID ID uživatele.
  • PASSWORD Zašifrované heslo.
  • ACCOUNT_STATUS Stav účtu (OPEN, EXPIRED, EXPIRED (GRACE), LOCKED (TIMED), LOCKED, EXPIRED & LOCKED(TIMED), EXPIRED(GRACE) & LOCKED(TIMED), EXPIRED & LOCKED, EXPIRED(GRACE) & LOCKED.
  • LOCK_DATE Datum, kdy byl účet zamknut.
  • EXPIRY_DATE Datum vypršení platnosti účtu.
  • DEFAULT_TABLESPACE Výchozí tabulkový prostor.
  • TEMPORARY_TAB­LESPACE Dočasný tabulkový prostor.
  • CREATED Datum vytvoření uživatele.
  • PROFILE Přiřazený profil.
  • INITIAL_RSRC_CON­SUMER_GROUP Počáteční spotřebitelská skupina zdrojů.
  • EXTERNAL_NAME Externí jméno uživatele.

DBA_TS_QUOTAS

DBA_TS_QUOTAS popisuje uživatelské kvóty pro tabulkové prostory. Pokud hodnota kvóta je UNILIMITED, pak hodnota ve sloupci MAX_BYTES je –1. Hodnoty ve sloupci MAX_BYTES jsou násobky velikosti bloku.

SELECT TABLESPACE_NAME,
       USERNAME,
       BYTES,
       MAX_BYTES,
       BLOCKS,
       MAX_BLOCKS
  FROM DBA_TS_QUOTAS

Význam sloupců DBA_TS_QUOTAS

  • TABLESPACE_NAME Název tabulkového prostoru.
  • USERNAME Jméno uživatele s oprávněním na tabulkový prostor.
  • BYTES Počet zaplněných bajtů.
  • MAX_BYTES Maximální počet bajtů.
  • BLOCKS Počet zaplněných bloků.
  • MAX_BLOCKS Uživatelská kvóta v blocích.

USER_PASSWORD_LI­MITS

View nemá obdobu DBA_. Popisuje parametry profilu hesla, které jsou přiřazeny uživateli.

SELECT RESOURCE_NAME,
       LIMIT
  FROM USER_PASSWORD_LIMITS

Význam sloupců USER_PASSWORD_LI­MITS

  • RESOURCE_NAME Název zdroje hesla.
  • LIMIT Hodnota limitu zdroje.

USER_RESOURCE_LI­MITS

Pohled nemá ekvivalent v DBA_. Pohled zobrazuje limity zdrojů pro aktuálního uživatele.

SELECT RESOURCE_NAME,
       LIMIT
  FROM USER_RESOURCE_LIMITS

Význam sloupců USER_RESOURCE_LI­MITS

  • RESOURCE_NAME Název zdroje.
  • LIMIT Omezení zdroje pro daného uživatele.

DBA_PROFILES

Pohled zobrazuje profily a jejich omezení.

/---code sql SELECT PROFILE,
RESOURCE_NAME,
RESOURCE_TYPE,
LIMIT
FROM DBA_PROFILES; \---

Význam sloupců DBA_PROFILES

  • PROFILE Název profilu.
  • RESOURCE_NAME Název zdroje.
  • RESOURCE_TYPE Typ zdroje (KERNEL nebo PASSWORD).
  • LIMIT Omezení daného zdroje pro profil.

RESOURCE_COST

Pohled zobrazuje cenu zdroje.

SELECT RESOURCE_NAME,
       UNIT_COST
  FROM RESOURCE_COST;

Význam sloupců RESOURCE_COST

  • RESOURCE_NAME Název zdroje.
  • UNIT_COST Cena zdroje.

V$SESSION

Pohled zobrazuje informace o všech současných sessions.

SELECT SADDR,
       SID,
       SERIAL#,
       AUDSID,
       PADDR,
       USER#,
       USERNAME,
       COMMAND,
       OWNERID,
       TADDR,
       LOCKWAIT,
       STATUS,
       SERVER,
       SCHEMA#,
       SCHEMANAME,
       OSUSER,
       PROCESS,
       MACHINE,
       TERMINAL,
       PROGRAM,
       TYPE,
       SQL_ADDRESS,
       SQL_HASH_VALUE,
       PREV_SQL_ADDR,
       PREV_HASH_VALUE,
       MODULE,
       MODULE_HASH,
       ACTION,
       ACTION_HASH,
       CLIENT_INFO,
       FIXED_TABLE_SEQUENCE,
       ROW_WAIT_OBJ#,
       ROW_WAIT_FILE#,
       ROW_WAIT_BLOCK#,
       ROW_WAIT_ROW#,
       LOGON_TIME,
       LAST_CALL_ET,
       PDML_ENABLED,
       FAILOVER_TYPE,
       FAILOVER_METHOD,
       FAILED_OVER,
       RESOURCE_CONSUMER_GROUP,
       PDML_STATUS,
       PDDL_STATUS,
       PQ_STATUS,
       CURRENT_QUEUE_DURATION,
       CLIENT_IDENTIFIER
  FROM V$SESSION

Význam sloupců V$SESSION

  • SADDR Adresa session.
  • SID Session ID.
  • SERIAL# Sériové číslo session.
  • AUDSID Auditové session ID.
  • PADDR Adresa procesu vlastnícího session.
  • USER# Identifikátor uživatele.
  • USERNAME Uživatelské jméno.
  • COMMAND Typ posledního provedeného/pro­váděného příkazu (jde o číslo, číselník je v dokumentaci).
  • OWNERID
  • TADDR Adresa objektu stavu transakce.
  • LOCKWAIT Adresa čekajícího zámku.
  • STATUS Stav session (ACTIVE — něco provádí, INACTIVE, KILLED — označení pro zrušení, CACHED — pro Oracle*XA, SNIPED — neaktivní session čekající na klienta).
  • SERVER Typ serveru (DEDICATED, SHARED, PSEUDO, NONE).
  • SCHEMA# ID schématu.
  • SCHEMANAME Název schématu.
  • OSUSER Uživatelské jméno klientského operačního systému.
  • PROCESS Číslo procesu klientského operačního systému.
  • MACHINE Název stroje klientského operačního systému.
  • TERMINAL Název terminálu klientského operačního systému.
  • PROGRAM Název programu klientského operačního systému.
  • TYPE Typ session (BACKGROUND, USER (možná i další hodnoty)).
  • SQL_ADDRESS Ve spojení s SQL_HASH_VALUE určuje právě běžící SQL příkaz.
  • SQL_HASH_VALUE Ve spojení s SQL_ADDRESS určuje právě běžící SQL příkaz.
  • PREV_SQL_ADDR Ve spojení s PREV_HASH_VALUE určuje naposledy běžící SQL příkaz.
  • PREV_HASH_VALUE Ve spojení s PREV_SQL_ADDR určuje naposledy běžící SQL příkaz.
  • MODULE Obsahuje název právě běžícího modulu dle nastavení DBMS_APPLICATI­ON_INFO.SET_MO­DULE.
  • MODULE_HASH Hash hodnota sloupce MODULE.
  • ACTION Obsahuje název právě běžící akce dle nastavení DBMS_APPLICATI­ON_INFO.SET_AC­TION.
  • ACTION_HASH Hash hodnota akce.
  • CLIENT_INFO Informace nastavená pomocí DBMS_APPLICATI­ON_INFO.SET_CLI­ENT_INFO.
  • FIXED_TABLE_SE­QUENCE Číslo, které se zvyšuje s každým callem. Používá se ve výkonnostních monitorech. Pokud rozdíl mezi poslední a aktuální hodnotou je 0, pak za měřenou dobu v session nedošlo k žádné akci.
  • ROW_WAIT_OBJ#
  • ROW_WAIT_FILE#
  • ROW_WAIT_BLOCK#
  • ROW_WAIT_ROW#
  • LOGON_TIME Čas přihlášení.
  • LAST_CALL_ET Poslední call.
  • PDML_ENABLED Sloupec je nahrazen sloupcem PDML_STATUS.
  • FAILOVER_TYPE
  • FAILOVER_METHOD
  • FAILED_OVER
  • RESOURCE_CONSU­MER_GROUP Název aktuální spotřebitelské skupiny session.
  • PDML_STATUS
  • PDDL_STATUS
  • PQ_STATUS
  • CURRENT_QUEUE_DU­RATION
  • CLIENT_IDENTIFIER

V$SESSTAT

Pohled zobrazuje statistiku session.

SELECT SID,
       STATISTICS#,
       VALUE
  FROM V$SESSTAT

Význam sloupců V$SESSTAT

  • SID ID session.
  • STATISTICS# Číslo statistiky. Popis lze nalézt v pohledu V$STATNAME.
  • VALUE Hodnota.
SELECT USERNAME,
       VALUE || ' bytes' "Current UGA memory"
  FROM V$SESSION sess,
       V$SESSTAT stat,
       V$STATNAME name
    WHERE sess.SID = stat.SID
      AND stat.STATISTIC# = name.STATISTIC#
      AND name.NAME = 'session uga memory';

Přechozí příkaz vypíše všechny session ukazující uživatele a aktuální použití UGA (User Global Area) paměti.

SELECT SID,
       NAME,
       VALUE,
       RTRIM (
               DECODE (BITAND (CLASS,   1),   1, 'User, ')    ||
               DECODE (BITAND (CLASS,   2),   2, 'Redo, ')    ||
               DECODE (BITAND (CLASS,   4),   4, 'Enqueue, ') ||
               DECODE (BITAND (CLASS,   8),   8, 'Cache, ')   ||
               DECODE (BITAND (CLASS,  16),  16, 'OS, ')      ||
               DECODE (BITAND (CLASS,  32),  32, 'RAC, ')     ||
               DECODE (BITAND (CLASS,  64),  64, 'SQL, ')     ||
               DECODE (BITAND (CLASS, 128), 128, 'Debug, '),
               ', '
             ) CLASS
  FROM v$SesStat ss, v$StatName sn
    WHERE ss.statistic# = sn.statistic#

Předchozí vypisuje název, hodnotu a třídu statistiky pro každé session ID.

Pro aktuální session lze použít pohled V$MYSTAT.

select
decode(sum(decode(s.serial#,l.serial#,1,0)),0,'No','Yes') " ",
       s.sid "Sid", s.status "Status", s.logon_time "Logon",
       s.username "Username", RTRIM(s.osuser) "OS User",
       b.spid "OS Process ID",s.machine "Machine Name",
       NVL(s.module, s.program) "Program", s.action "Action",
       c.sql_text "SQL text"
  from v$session s,
       v$session_longops l,
       v$process b,
       (select address,sql_text from v$sqltext where piece=0) c
 where (s.sid = l.sid(+))
   and s.paddr = b.addr
   and s.sql_address = c.address
 group by
s.sid,s.status,s.logon_time,s.username,s.osuser,s.machine,
       NVL(s.module,
s.program),s.action,b.spid,b.pid,c.sql_text
 order by s.sid

Předhozí vypíše prováděné SQL příkazy.

V$STATNAME

Zobrazuje názvy statistik z pohledů V$SESSTAT a V$SYSSTAT. Na některých platformách NAME a CLASS mohou obsahovat další informace.

SELECT STATISTIC#,
       NAME,
       CLASS
  FROM V$STATNAME

Význam sloupců v pohledu V$STATNAME

  • STATISTIC# Číslo statistiky.
  • NAME Název statistiky.
  • CLASS Třídy statistiky (bitová mapa).

PROXY_USERS

Seznam uživatelů, kteří mohou nabývat identity jiného uživatele. O některých sloupcích dokumentace mlčí a naopak uvádí některé, které v pohledu vůbec nejsou.

SELECT PROXY,
       CLIENT,
       CREDENTIAL,
       VERSION,
       MINOR,
       FLAGS
  FROM PROXY_USERS

Význam sloupců v pohledu PROXY_USER

  • PROXY Název klienta, jehož identitu může proxy nabýt.
  • CLIENT Jméno uživatele, který nabývá identity klienta.
  • CREDENTIAL
  • VERSION
  • MINOR
  • FLAGS

DBA_COL_PRIVS

Popisuje všechna oprávnění na sloupce.

SELECT GRANTEE,
       OWNER,
       TABLE_NAME,
       COLUMN_NAME,
       GRANTOR,
       PRIVILEGE,
       GRANTABLE
  FROM DBA_COL_PRIVS

Význam sloupců v pohledu DBA_COL_PRIVS

  • GRANTEE Příjemce oprávnění.
  • OWNER Vlastník objektu.
  • TABLE_NAME Název objektu.
  • COLUMN_NAME Název sloupce.
  • GRANTOR Poskytovatel oprávnění.
  • PRIVILEGE Oprávnění na sloupec.
  • GRANTABLE YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.

ALL_COL_PRIVS_MADE

Popisuje všechny sloupce, na které bylo uděleno oprávnění a které uživatel vlastní nebo je udělitel oprávnění.

SELECT GRANTEE,
       OWNER,
       TABLE_NAME,
       COLUMN_NAME,
       GRANTOR,
       PRIVILEGE,
       GRANTABLE
  FROM ALL_COL_PRIVS_MADE

Význam sloupců v pohledu ALL_COL_PRIVS_MADE

  • GRANTEE Příjemce oprávnění.
  • OWNER Vlastník objektu.
  • TABLE_NAME Název objektu.
  • COLUMN_NAME Název sloupce.
  • GRANTOR Poskytovatel oprávnění.
  • PRIVILEGE Oprávnění.
  • GRANTABLE YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.

ALL_COL_PRIVS_RECD

Popisuje všechny sloupce, na které bylo uděleno oprávnění a uživatel je příjemce tohoto oprávnění (ať již přímo, přes roli nebo přes uživatelskou skupinu PUBLIC).

SELECT GRANTEE,
       OWNER,
       TABLE_NAME,
       COLUMN_NAME,
       GRANTOR,
       PRIVILEGE,
       GRANTABLE
  FROM ALL_COL_PRIVS_RECD

Význam sloupců v pohledu ALL_COL_PRIVS_RECD

  • GRANTEE Příjemce oprávnění.
  • OWNER Vlastník objektu.
  • TABLE_NAME Název objektu.
  • COLUMN_NAME Název sloupce.
  • GRANTOR Poskytovatel oprávnění.
  • PRIVILEGE Oprávnění.
  • GRANTABLE YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.

DBA_TAB_PRIVS

Popisuje všechna objektová oprávnění udělená uživatelům pro objekty.

SELECT GRANTEE,
       OWNER,
       TABLE_NAME,
       GRANTOR,
       PRIVILEGE,
       GRANTABLE,
       HIERARCHY
  FROM DBA_TAB_PRIVS

Význam sloupců v pohledu DBA_TAB_PRIVS

  • GRANTEE Příjemce oprávnění.
  • OWNER Vlastník objektu.
  • TABLE_NAME Název objektu.
  • GRANTOR Poskytovatel oprávnění.
  • PRIVILEGE Oprávnění.
  • GRANTABLE YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.
  • HIERARCHY YES, pokud bylo oprávnění přiděleno s HIERARCHY OPTION, jinak NO.

ALL_TAB_PRIVS_MADE

Popisuje všechny objekty, na které bylo uděleno oprávnění a které uživatel vlastní nebo je udělitel oprávnění.

SELECT GRANTEE,
       OWNER,
       TABLE_NAME,
       GRANTOR,
       PRIVILEGE,
       GRANTABLE,
       HIERARCHY
  FROM ALL_TAB_PRIVS_MADE

Význam sloupců v pohledu ALL_TAB_PRIVS_MADE

  • GRANTEE Příjemce oprávnění.
  • OWNER Vlastník objektu.
  • TABLE_NAME Název objektu.
  • GRANTOR Poskytovatel oprávnění.
  • PRIVILEGE Oprávnění.
  • GRANTABLE YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.
  • HIERARCHY YES, pokud bylo oprávnění přiděleno s HIERARCHY OPTION, jinak NO.

ALL_TAB_PRIVS_RECD

Popisuje všechny objekty, na které bylo uděleno oprávnění a uživatel je příjemce tohoto oprávnění.

SELECT GRANTEE,
       OWNER,
       TABLE_NAME,
       GRANTOR,
       PRIVILEGE,
       GRANTABLE,
       HIERARCHY
  FROM ALL_TAB_PRIVS_RECD

Význam sloupců v pohledu ALL_TAB_PRIVS_RECD

  • GRANTEE Příjemce oprávnění.
  • OWNER Vlastník objektu.
  • TABLE_NAME Název objektu.
  • GRANTOR Poskytovatel oprávnění.
  • PRIVILEGE Oprávnění.
  • GRANTABLE YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.
  • HIERARCHY YES, pokud bylo oprávnění přiděleno s HIERARCHY OPTION, jinak NO.

DBA_ROLES

Seznam všech rolí v databázi.

SELECT ROLE,
       PASSWORD_REQUIRED
  FROM DBA_ROLES

Význam sloupců v pohledu DBA_ROLES

  • ROLE Název role.
  • PASSWORD_REQUIRED Říká, zda musí být použito heslo, povoluje-li se role.

DBA_ROLE_PRIVS

Seznam rolí, pro které má uživatel nebo role oprávnění.

SELECT GRANTEE,
       GRANTED_ROLE,
       ADMIN_OPTION,
       DEFAULT_ROLE
  FROM DBA_ROLE_PRIVS

Význam sloupců v pohledu DBA_ROLE_PRIVS

  • GRANTEE Příjemce role.
  • GRANTED_ROLE Název role, ke které se dává oprávnění.
  • ADMIN_OPTION YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.
  • DEFAULT_ROLE YES, pokud je role určena pro uživatele jako výchozí, jinak NO.

DBA_SYS_PRIVS

Popisuje systémová oprávnění přidělená uživateli či roli.

SELECT GRANTEE,
       PRIVILEGE,
       ADMIN_OPTION
  FROM DBA_SYS_PRIVS

Význam sloupců v pohledu DBA_SYS_PRIVS

  • GRANTEE Příjemce oprávnění.
  • PRIVILEGE Oprávnění.
  • ADMIN_OPTION YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.

ROLE_ROLE_PRIVS

Seznam rolí, na které bylo uděleno oprávnění roli.

SELECT ROLE,
       GRANTED_ROLE,
       ADMIN_OPTION
  FROM ROLE_ROLE_PRIVS

Význam sloupců v pohledu ROLE_ROLE_PRIVS

  • ROLE Název role.
  • GRANTED_ROLE Udělená role.
  • ADMIN_OPTION YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.

ROLE_SYS_PRIVS

Seznam systémových oprávnění přidělených roli.

SELECT ROLE,
       PRIVILEGE,
       ADMIN_OPTION
  FROM ROLE_SYS_PRIVS

Význam sloupců v pohledu ROLE_SYS_PRIVS

  • ROLE Název role.
  • PRIVILEGE Oprávnění.
  • ADMIN_OPTION YES, pokud bylo oprávnění přiděleno s GRANT OPTION, jinak NO.

ROLE_TAB_PRIVS

Seznam objektových oprávnění přidělených roli.

SELECT ROLE,
       OWNER,
       TABLE_NAME,
       COLUMN_NAME,
       PRIVILEGE,
       GRANTABLE
  FROM ROLE_TAB_PRIVS

Význam sloupců v pohledu ROLE_TAB_PRIVS

  • ROLE Název role.
  • OWNER Vlastník objektu.
  • TABLE_NAME Název objektu.
  • COLUMN_NAME Název sloupce (má-li to význam).
  • PRIVILEGE Oprávnění.
  • GRANTABLE YES, pokud byla role udělena s ADMIN OPTION, jinak NO.

SESSION_PRIVS

Seznam oprávnění aktuálně povolených uživateli.

SELECT PRIVILEGE
  FROM SESSION_PRIVS

Význam sloupců v pohledu SESSION_PRIVS

  • PRIVILEGE Oprávnění.

SESSION_ROLES

Seznam rolí aktuálně povolených uživateli.

SELECT ROLE
  FROM SESSION_ROLES

Význam sloupců v pohledu SESSION_ROLES

  • ROLE Název role.


[Akt. známka: 1,00 / Počet hlasů: 5] 1 2 3 4 5

Celý článek | Autor: Slávek Rydval | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek

  Čtenář
Jméno:
Heslo:


Registrace | Info
Zapomenuté heslo

  Vyhledávání

Hledej
na Nawebce!


Rozšířené vyhledávání
Ubytování ve StrmilověUbytování velkých skupinRybník KomorníkKunžakJindřichohradeckovodlitniČeská KanadaKoupání v Jižních ČecháchHistorické ubytováníStrmilovský šachový klubSportovní rybolovEldorádoVodní ráj

  Kalendář
<<  Červen  >>
PoÚtStČtSoNe
   1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30   

  Reklama


rkEdit především pro vývojáře
rkEdit především pro vývojáře