330 likes | 538 Views
Surviving without Oracle HTTP Server. Конфигуриране на Oracle Embedded PLSQL Gateway. Стоян Иванов Семантек България ООД. Проблем. Oracle Express Edition се предлага без Oracle HTTP Server powered by Apache Има много приложения, разработени с MOD_PLSQL
E N D
Surviving without Oracle HTTP Server Конфигуриране на Oracle Embedded PLSQL Gateway Стоян Иванов Семантек България ООД
Проблем • Oracle Express Edition се предлага без Oracle HTTP Server powered by Apache • Има много приложения, разработени с MOD_PLSQL • Преписването им на APEX не е тривиална задача • Има много разработчици, които умеят да пишат приложения с MOD_PLSQL и нямат време и/или желание да учат APEX
Решение – Oracle EPG • Базиран на XMLDB • Използва Oracle Net Listener • Позволява дефинирането на DAD-ове • Работи както на OracleXE, така и на Standard и Enterprise версията
Необходими стъпки • Инсталиране на XMLDB • Разрешаване на HTTP порт • Разрешаване на remote access • Създаване на функция, управляваща security-то • Създаване на DAD (Data Access Descriptor)
Незадължителни стъпки • Създаване на допълнителни виртуални пътища • Разрешаване на достъп за потребителя ANONYMOUS • Качване на файлове (картинки, cascading stylesheets, javascript, …)
Други благинки • Използване на Oracle EPG като WebDAV сървър • Използване на Oracle EPG като FTP сървър
Необходими стъпки • Инсталиране на XMLDB • Разрешаване на HTTP порт • Разрешаване на remote access • Създаване на функция, управляваща security-то • Създаване на DAD (Data Access Descriptor)
Инсталиране на XMLDB • Инсталиран по подразбиране • Може да се преинсталира използвайки DBCA • Потребителя, с който се конфигурира, трябва да има ролята XDBADMIN • Пакети DBMS_XDB и DBMS_EPG
Необходими стъпки • Инсталиране на XMLDB • Разрешаване на HTTP порт • Разрешаване на remote access • Създаване на функция, управляваща security-то • Създаване на DAD (Data Access Descriptor)
Конфигурация на XDB • select * from xdb.xdb$config SYS_NC_ROWINFO$ -------------------------------------------------------------------------------- <xdbconfigxmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" si:schemaLocation="http://xmlns.oracle.com/xdb/xdbconfig.xsd http://xmlns.oracle.com/xdb /xdbconfig.xsd"> <sysconfig> <acl-max-age>900</acl-max-age> <acl-cache-size>32</acl-cache-size> <invalid-pathname-chars>,</invalid-pathname-chars> <case-sensitive>true</case-sensitive> <call-timeout>300</call-timeout> …
Разрешаване на HTTP порт SQL> update xdb.xdb$config e Set xmldata."sysconfig"."protocolconfig"."httpconfig"."http-port" = '8080'; 1 row updated. SQL> commit; Commit complete. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. ... Database mounted. Database opened.
Разрешаване на HTTP порт lsnrctl status … Listening Endpoints Summary... … DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ivanov.semantec.bg)(PORT=8080))(Presentation=HTTP)(Session=RAW)) Services Summary... … Service "SPIXDB" has 1 instance(s). Instance "spi", status READY, has 1 handler(s) for this service... Service "SPI_XPT" has 1 instance(s). Instance "spi", status READY, has 1 handler(s) for this service... The command completed successfully
Разрешаване на HTTP порт • EXEC DBMS_XDB.SETHTTPPORT(8080); • Няма нужда от рестартиране на базата
Необходими стъпки • Инсталиране на XMLDB • Разрешаване на HTTP порт • Разрешаване на remote access • Създаване на функция, управляваща security-то • Създаване на DAD (Data Access Descriptor)
Разрешаване на remote access update xdb.xdb$config e Set e.xmldata."sysconfig"."protocolconfig"."httpconfig"."http-host" = NULL / update xdb.xdb$config e set e.xmldata."sysconfig"."protocolconfig"."httpconfig"."http-host" = ‘localhost’ /
Разрешаване на remote access EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE); За Oracle Standard Edition и Oracle Enterprise Edition ако в LISTENER.ORAимаме HOST=localhost или HOST=127.0.0.1 тогава имаме само локален достъп
Необходими стъпки • Инсталиране на XMLDB • Разрешаване на HTTP порт • Разрешаване на remote access • Създаване на функция, управляваща security-то • Създаване на DAD (Data Access Descriptor)
Създаване на функция, управляваща security-то • Поддържа BASIC authentication • Не поддържа кодиране на паролата в DAD • За custom authentication няма друг избор освен да се ползва потребителя ANONYMOUS • Директива request-validation-function на DAD
Създаване на функция, управляваща security-то CREATE FUNCTION epg_access_validation ( PROCEDURE_NAME IN VARCHAR2 ) RETURN BOOLEAN IS BEGIN IF UPPER(procedure_name) IN (…) THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END epg_access_validation /
Необходими стъпки • Инсталиране на XMLDB • Разрешаване на HTTP порт • Разрешаване на remote access • Създаване на функция, управляваща security-то • Създаване на DAD (Data Access Descriptor)
Създаване на DAD exec dbms_epg.create_dad( 'DADNAME','/dadvirtualpath/*'); exec dbms_epg.set_dad_attribute( 'DADNAME', 'default-page','mypackage.myhome'); exec dbms_epg.set_dad_attribute( 'DADNAME', 'request-validation-function', 'epg_access_validation');
Незадължителни стъпки • Създаване на допълнителни виртуални пътища • Разрешаване на достъп за потребителя ANONYMOUS • Качване на файлове (картинки, cascading stylesheets, javascript, …)
Създаване на допълнителни виртуални пътища DBMS_EPG.map_dad ( dad_name => ‘DADNAME', path => '/newvirtualpath/*‘ ); DBMS_EPG.unmap_dad ( dad_name => ‘DADNAME', path => '/newvirtualpath/*‘ );
Незадължителни стъпки • Създаване на допълнителни виртуални пътища • Разрешаване на достъп за потребителя ANONYMOUS • Качване на файлове (картинки, cascading stylesheets, javascript, …)
Разрешаване на достъп за потребителя ANONYMOUS exec dbms_epg.set_dad_attribute( 'DADNAME', 'database-username', 'ANONYMOUS‘ );
Незадължителни стъпки • Създаване на допълнителни виртуални пътища • Разрешаване на достъп за потребителя ANONYMOUS • Качване на файлове (картинки, cascading stylesheets, javascript, …)
Качване на файлове • Използва се DBMS_XDB • В общи линии не е документирано, представа може да се добие от скрипта APEX_EPG_CONFIG.sql, който идва с Oracle Application Express
Качване на файлове dbms_xdb.createfolder(directory_path); dbms_xdb.createresource( resource_path, content_bfile, nls_charset_id );
Използуване на Oracle EPG като WebDAVсървър
Използване на Oracle EPG като FTP сървър • EXEC DBMS_XDB.SETFTPPORT(21); SQL> update xdb.xdb$config e Set xmldata."sysconfig"."protocolconfig".“ftpconfig".“ftp-port" = ‘21';
Използване на Oracle EPG като FTP сървър e:\>ftp ivanov Connected to ivanov.semantec.bg. 220- ivanov 220 ivanov FTP Server (Oracle XML DB/Oracle Database) ready. User (ivanov.semantec.bg:(none)): system 331 pass required for SYSTEM Password: 230 SYSTEM logged in ftp> dir 200 PORT Command successful 150 ASCII Data Connection drw-r--r-- 2 SYS oracle 0 ┐┐┐┐. 19 11:07 public drw-r--r-- 2 SYS oracle 0 ┐┐┐┐. 19 11:07 sys -rw-r--r-- 1 SYS oracle 0 ┐┐┐. 19 20:50 xdbconfig.xml 226 ASCII Transfer Complete ftp: 196 bytes received in 0,01Seconds 19,60Kbytes/sec. ftp>