Edice a Secure Application Context

V seznamu otázek ze semináře Oracle Coffee o Online Application Upgrade (resp. Edition Based Redefinition, jak zní oficiální název technologie) mi pořád zůstávají dvě nezodpovězené. V tomto příspěvku se podíváme na chování Secure Application Context při změně edice.
Secure Application Context představuje pojmenovanou sadu jakýchsi SQL parametrů, které můžete ve vaší aplikaci pro danou databázovou session nastavit a následně využít v rámci SQL příkazů například pro zjištění jména aktuálního uživatele a řízení přístupu. Pro čtení hodnoty kontextu slouží SQL funkce SYS_CONTEXT.

Výhodou kontextu je, že jej lze nastavit pouze v PL/SQL package, který byl specifikován při vytvoření kontextu. Tento package pak může zajistit řadu bezpečnostních kontrol, které zajistí, že změnu hodnoty kontextu lze provést jen ve vámi určené části logiky aplikace.

Své pokusy opět budu provádět na trojici edic ORA$BASE > PRVNI > DRUHA a ve schematu EDITDEMO, na kterém jsem aktivoval verzování PL/SQL objektů (ALTER USER ... ENABLE EDITIONS)

Nejprve si vytvořím kontext a schválně to udělám až v edici PRVNI. Tuto operaci musím provést jako DBA (resp. uživatel s právem CREATE ANY CONTEXT) - tj. například uživatel SYS.


SQL> alter session set edition=prvni;
Session altered.


SQL> create or replace context mycontext using editdemo.contextpkg;
Context created.

Další operace již provádím jako uživatel EDITDEMO - nejprve vytvořím jednoduchou package, ve které bude možné kontext nastavit. A opět to provedu v edici PRVNI.


SQL> alter session set edition=prvni;
Session altered.


SQL> create or replace package contextpkg is
procedure setContext;
end;
/
Package created.


SQL> create or replace package body contextpkg is
procedure setContext is
begin
DBMS_SESSION.SET_CONTEXT('mycontext','myattr','NOVA HODNOTA');
end;
end;
/
Package body created.


SQL> select sys_context('MYCONTEXT','MYATTR') from dual;
SYS_CONTEXT('MYCONTEXT','MYATTR')
=============================================
(null)

Aktuální spojení kontext sice vidí, ten ale zatím není naplněn. Zavolám tedy obslužnou package, která do MYCONTEXT.MYATTR naplní hodnotu 'NOVA HODNOTA'.


SQL> alter session set edition=prvni;
Session altered.


SQL> exec contextpkg.setcontext
PL/SQL procedure successfully completed.


SQL> select sys_context('MYCONTEXT','MYATTR') from dual;
SYS_CONTEXT('MYCONTEXT','MYATTR')
=============================================
NOVA HODNOTA


SQL> alter session set EDITION=druha;
Session altered.


SQL> select sys_context('MYCONTEXT','MYATTR') from dual;
SYS_CONTEXT('MYCONTEXT','MYATTR')
=============================================
NOVA HODNOTA

Ještě udělám pokus v edici ORA$BASE . Ta je rodičem edice PRVNI, neexistuje v ní tedy ještě obslužná package a je otázkou, jak je to se samotným kontextem.


SQL> alter session set EDITION=ora$base;
Session altered.


SQL> select sys_context('MYCONTEXT','MYATTR') from dual;
SYS_CONTEXT('MYCONTEXT','MYATTR')
=============================================
NOVA HODNOTA


SQL> exec contextpkg.setcontext
BEGIN contextpkg.setcontext; END;
*
ERROR at line 1:
ORA-06550: řádka 1, sloupec 7:
PLS-00201: identifier 'CONTEXTPKG.SETCONTEXT' must be declared
ORA-06550: řádka 1, sloupec 7:
PL/SQL: Statement ignored

Z výše uvedeného postupu vyplývá:


  1. Hodnota kontextu se udrží i při změně aktuální edice spojení

  2. Kontext samotný není verzovaným objektem - vytvořili jsme jej v edici PRVNI, ale byl vidět i v rodičovské edici ORA$BASE

  3. PL/SQL package ovládající kontext samozřejmě verzovaná je, proto kontext nemohu nastavit v rodičovské edici ORA$BASE, ve které tato procedura neexistuje

Comments:

Post a Comment:
  • HTML Syntax: NOT allowed
About

Česky o všem co se točí kolem Oracle Database.

Autoři:

Patrik Plachý
Technology Sales Consultant

David Krch
Principal Consultant
Oracle Expert Services

Oracle Czech

Search

Archives
« duben 2014
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
    
       
Today