Databáza Oracle® ako Web server pomocou DBMS_EPG | devLife.eu
Jún
12th

Databáza Oracle® ako Web server pomocou DBMS_EPG

Zaradené do SQL | Publikoval rado


Databáza Oracle® patrí medzi najlepšie databázové riešenia na svete a snaď malokto by o nej nepočul. Akoby to u neho bolo už pravidlom, Oracle obsahuje veľa rozličných funkcií a balíčkov, ktoré ponúkajú mnoho exotických vecí (i keď o ich funkčnosti radšej pomlčíme).

Jednou z takýchto funkcií je možnosť databáze Oracle fungovať nie len ako klasický databázový server ale aj ako Web server, ba dokonca FTP server. A to hneď viacerými spôsobmi (napríklad pomocou XMLDB alebo DBMS_EPG). V tomto článku sa zamerám hlane na nastavenie Oracle ako Web servera pomocou DBMS_EPG.

DBMS_EPG je balíček, ktorý možňuje jednoducho namapovať Oracle PL/SQL procedúry na HTTP request a tým im umožní vytvorenie jednoduchého web servra. Samotné URL pre prístup k procedúre bude vyzerať ako:
http://server/nejaky-prefix/moja_procedura?param1=1&param2=2

Ako je vidieť na príklade odkazu, tak v url sa priamo volajú procedúry svojími názvami a parametre sú priamo názvy parametrov procedúry.

Nastavenie Oracle DBMS_EPG

V prvom rade je potrebné zisiť, či má Oracle nastavený nejaký port pre počúvanie pomocou HTTP. V konfiguračnom súbore listener.ora musí byť nastavený listener pre HTTP:

(DESCRIPTION=
     (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=80))(Presentation=HTTP)(Session=RAW)
)

Následne je dobré vytvoriť užívateľa, ktorý bude mať k takýmto procedúram prístup, ak chceme aby boli prístupné iba na heslo, a sprístupníme alebo vytvríme preňho zobrazovacie funkcie.

Následne stači zapnúť DBMS_EPG správcu pre chcený prefix (tzv. dad).

DBMS_EPG.create_dad (
    dad_name => 'hello',
    path     => '/hello/*');

Nastavíme EPG dad len pre konkretného užívateľa:

DBMS_EPG.authorize_dad (
    dad_name => 'hello',
    user     => 'MOJ_UZIVATEL');

Môžeme si taktiež nastaviť defaultnú procedúru, ktorá sa bude volať, ak nebude zadané nič.

DBMS_EPG.set_dad_attribute (
    dad_name   => 'hello',
    attr_name  => 'default-page',
    attr_value => 'world');

Samotná procedúre world môže vyzerať následovne s využitím balíku HTP. Procedúra vypíše jednoduchý Hello World! a umožňuje pomocou parametra meniť title.

PROCEDURE header(title VARCHAR2 := 'Hello World!') IS
BEGIN
  HTP.htmlopen;
  HTP.headopen;
  HTP.title(title);
  HTP.headclose;
  HTP.bodyopen;
  HTP.print('Hello World!');
  HTP.bodyclose;
  HTP.htmlclose;
END;

Takto je možné sprístupniť procedúry pomocou HTTP a tým vytvoriť web server. Je taktiež možné DBMS_EPG nastaviť tak, aby umožnila prístup bez prihlásenia, povolením anonymného užívateľa, ale je to bezpečnostné riziko.

Samotná praktická využiteľnosť je pomerne otázna, pretože takto sa Oracle používa na veci, na ktoré nebol pôvodne určený a samotné PL/SQL vedia byť niekedy pomerne zákerné. Výhodné môže byť v kombinácií napríklad s DBMS_XMLGEN, ktorým je možné docieliť jednoduchého XML exportu Oracle databáze.

Taktiež si pri DBMS_EPG dajte pozor na atribút database-username, ktorý nefunguje tak, ako je napísané a prakticky po použití znemožní prihlásenie sa cez HTTP a tým pádom celé EPG.

Be Sociable, Share!


Pridať komentár