|
|
|
Vydáno dne 27. 08. 2006 (5558 přečtení) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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_ROLE | 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_CATALOG_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_ADMINISTRATOR_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. |
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í:
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.
Pro použití role musí být tato povolena.
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í se nastavuje pomocí klauzule IDENTIFIED USING package_name a role je pak použita pouze v případě volání daného package.
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 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.
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.
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ě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í:
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í.
Uživatel nebo role, kterým je uděleno oprávnění či role s ADMIN OPTION, mají několik dalších schopností:
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.
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 ???
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:
V příkazu GRANT se nesmí míchat systémová a objektová oprávnění.
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:
Volba GRANT OPTION není platná při předávání objektového oprávnění roli.
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.
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 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}
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.
Příjemce oprávnění může:
Pokud není WAO uvedeno a uživatel se k roli dostane jinak s WAO (přes jinou roli), má práva WAO.
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í se provádí příkazem 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:
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 materializované view.
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.
Pro odebrání objektového oprávnění musí být splněna jedna z následujících podmínek:
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ě.
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
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ů.
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.
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í.
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.
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???
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í.
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/zakazovat 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 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.
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 |
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.
Libovolné následující objektové oprávnění dovoluje zamknout pohled pomocí LOCK TABLE.
DELETE, DEBUG, INSERT, REFERENCES, SELECT, UNDER, UPDATE.
ALTER, SELECT.
DEBUG, EXECUTE (tj. včetně kompilace).
ON COMMIT REFRESH, QUERY REWRITE, SELECT.
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.
Auditování lze provádět plošně nebo zaměřeně. Auditovat lze:
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ří:
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.
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_OPERATIONS (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).
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.
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:
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í.
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.
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ů je výběrový audit vybrané skupiny příkazů, které spadají do dvou kategorií:
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í 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 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.
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 umožňuje auditovat použití konkrétních řádků či sloupců tabulky v příkazu SELECT. K obsluze slouží balíček DBMS_FGA.
Audit příkazů, oprávnění a objektů lze zaměřit na tyto tři oblasti:
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.
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.
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.
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;
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:
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_OPERATIONS, 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/audit. 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á.
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_privileges_and_roles, REVOKE system_privileges_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ů 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).
Zadávání volby oprávnění k auditu se naprosto přesně shoduje s názvem oprávnění
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 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í.???
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_OPTION_MAP).
Auditovací pohledy:
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.
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
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
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_LIMITS
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_LIMITS
Pohled zobrazuje profily a jejich omezení.
/---code sql SELECT PROFILE,
RESOURCE_NAME,
RESOURCE_TYPE,
LIMIT
FROM DBA_PROFILES; \---
Význam sloupců DBA_PROFILES
Pohled zobrazuje cenu zdroje.
SELECT RESOURCE_NAME,
UNIT_COST
FROM RESOURCE_COST;
Význam sloupců RESOURCE_COST
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
Pohled zobrazuje statistiku session.
SELECT SID,
STATISTICS#,
VALUE
FROM V$SESSTAT
Význam sloupců V$SESSTAT
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.
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
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
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
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
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
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
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
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
Seznam všech rolí v databázi.
SELECT ROLE,
PASSWORD_REQUIRED
FROM DBA_ROLES
Význam sloupců v pohledu DBA_ROLES
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
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
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
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
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
Seznam oprávnění aktuálně povolených uživateli.
SELECT PRIVILEGE
FROM SESSION_PRIVS
Význam sloupců v pohledu SESSION_PRIVS
Seznam rolí aktuálně povolených uživateli.
SELECT ROLE
FROM SESSION_ROLES
Význam sloupců v pohledu SESSION_ROLES
| Čtenář |
| Vyhledávání |
|
|
| Kalendář |
| |||||||||||||||||||||||||||||||||||||||||||||||||
| Reklama |
|
|