Sabtu, 13 Oktober 2012

Bagaimana Memproteksi Kode PL/SQL Memakai Function dan Procedure wrapping DBMS_DDL?

Kebutuhan ini sangat vital dimiliki programmer APEX untuk melindungi hak intelektual atau kerahasian sebuah kode contoh menyembunyikan teknik otentifikasi dari user. Karena sampai versi terakhir disisi aplikasi belum menyediakan tool ini.

Dengan memakai feature dari oracle database 11g kita akan memakai CREATE_WRAPPED Procedures atau WRAP Functions yang dijelaskan di dokumentasi “Oracle® Database PL/SQL Packages and Types Reference 11g”. berbeda dengan teknik 10g pada 11g jauh lebih simple.

Namun penjelasannya sangat singkat dan membingungkan sehingga perlu penjelasan lebih lanjut. Contoh pemakaian DBMS_DDL.CREATE_WRAPPED ada dua cara:

  1. Cara singkat dengan single parameter tipe varchar2:
  2. DBMS_DDL.CREATE_WRAPPED (
       ddl VARCHAR2);
    
  3. Cara detil dengan 3 parameter tipe DBMS_SQL.VARCHAR2A dan PLS_INTEGER
  4. DBMS_DDL.CREATE_WRAPPED(
        ddl DBMS_SQL.VARCHAR2A,
        lb PLS_INTEGER,
        ub PLS_INTEGER);
Dengan bantuan mbah google akhirnya diperoleh contoh pemakaiannya yaitu:

  1. Cara pertama memakai bantuan quote q!' ddl script'! (sumber Tyler Muth’s Blog) :
  2. declare
      l_function    varchar2(32767);
    begin
      l_function := q'!
        create or replace function wrap_test
          return varchar2
        is
        begin
           return 'Yep, it worked';
        end wrap_test; !';
      sys.dbms_ddl.create_wrapped(l_function);
    end;
    /
    
  3. Cara kedua (sumber Oracle Base) :
  4. DECLARE
      l_source  DBMS_SQL.VARCHAR2A;
      l_wrap    DBMS_SQL.VARCHAR2A;
    BEGIN
      l_source(1) := 'CREATE OR REPLACE FUNCTION get_date_string RETURN VARCHAR2 AS ';
      l_source(2) := 'BEGIN ';
      l_source(3) := 'RETURN TO_CHAR(SYSDATE, ''DD-MON-YYYY''); ';
      l_source(4) := 'END get_date_string;';
    
      l_wrap := SYS.DBMS_DDL.WRAP(ddl => l_source,
                                  lb  => 1,
                                  ub  => l_source.count);
    
    
    END;
    /
    
Contoh hasil wrapping cara pertama :

CREATE OR REPLACE function wrap_test wrapped 
a000000
369
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
6e 9a
IgQHR6lRS46V6yUCBpIlirzcrOowg8eZgcfLCNL+XhaW8lbjlqFi0e4JptbKschQyiQCfMbK
FyjGyu9LTRd8dcDAMv7S1sXWJl7QWWJQzIVWzBZylpfcLszEOdmYkr4WRlutOdsHUzkHVNV8
pqbvCP2M
/
Anda bisa juga memakai function DBMS_DDL.WRAP dengan menganalisa dari contoh pemakaian procedure DBMS_DDL.CREATE_WRAPPED.

Tidak ada komentar :

Posting Komentar