Oracle 提供的 Wrap 工具可將 PL/SQL 原始碼(如套件、程序、函數、觸發器)轉換為不可讀的加密格式,保護智慧財產權並防止未經授權的修改。重要提醒:加密後的程式碼無法解密,請務必妥善保管原始碼。
create or replace function get_rowid
(l_rowid in varchar2)
return varchar2
is
ls_my_rowid varchar2(200);
rowid_type number;
object_number number;
relative_fno number;
block_number number;
row_number number;
begin
dbms_rowid.rowid_info(l_rowid, rowid_type, object_number, relative_fno, block_number, row_number);
ls_my_rowid := 'Object# is :' || to_char(object_number) || chr(10) ||
'Relative_fno is :' || to_char(relative_fno) || chr(10) ||
'Block number is :' || to_char(block_number) || chr(10) ||
'Row number is :' || to_char(row_number);
return ls_my_rowid;
end;
/
在 SQL*Plus 中建立函數並測試:
SQL> @f_get_rowid
Function created.
SQL> select rowid from dept where deptno=10;
ROWID
------------------
AAABiPAABAAAFRSAAA
SQL> select get_rowid('AAABiPAABAAAFRSAAA') from dual;
GET_ROWID('AAABIPAABAAAFRSAAA')
------------------------------------------------------------------
Object# is :6287
Relative_fno is :1
Block number is :21586
Row number is :0
執行指令:
[Oracle@jumper tools]$ wrap iname=f_get_rowid.sql oname=f_get_rowid.plb
PL/SQL Wrapper: Release 9.2.0.4.0- Production on Mon Nov 15 21:59:39 2004
產生的 f_get_rowid.plb 即為加密後的檔案,可直接在資料庫中部署執行,原始邏輯完全保留但不可逆向工程。