Oracle
我將包裝數據庫觸發器的原始碼,命令正確執行但源不加密
我將包裝我的數據庫登錄觸發器源。我執行命令“wrap iname=‘E:\block_tools_trigger_HR.sql’oname=‘E:\block_tools_trigger_HR.plb’”。plb 文件創建時沒有任何錯誤,但程式碼未加密。
觸發原始碼如下:
CREATE OR REPLACE TRIGGER block_tools_trigger_HR AFTER LOGON ON HRMS.SCHEMA DECLARE v_prog sys.v_$session.program%TYPE; BEGIN SELECT upper(program) INTO v_prog FROM sys.v_$session WHERE audsid = USERENV('SESSIONID') AND audsid != 0 AND ROWNUM = 1; IF UPPER(USERENV('TERMINAL')) NOT IN ('MOAZZAM-LT') THEN IF UPPER(v_prog) LIKE '%TOAD%' OR UPPER(v_prog) LIKE '%T.O.A.D%' OR --OR — Toad UPPER(v_prog) LIKE '%SQLNAV%' OR -- — SQL Navigator UPPER(v_prog) LIKE '%PLSQLDEV%' OR --— PLSQL Developer UPPER(v_prog) LIKE '%BUSOBJ%' OR -- — Business Objects UPPER(v_prog) LIKE '%EXCEL%' OR -- — MS-Excel plug-in UPPER(v_prog) LIKE '%SQLPLUS%' OR -- — SQLPLUS UPPER(v_prog) LIKE '%FRMBLD%' OR UPPER(v_prog) LIKE '%IFBLD60%' or upper(v_prog) is null THEN RAISE_APPLICATION_ERROR(-20983, 'You are not allowed to login in '||v_prog); END IF; END IF; END;
Oracle 的包裝程序不包裝觸發器。這樣做的方法是將程式碼移動到一個包或一個獨立的過程中,並使觸發器成為一個單行呼叫來呼叫此程式碼。
請參閱有關包裝限制的文件:https ://docs.oracle.com/cd/B28359_01/appdev.111/b28370/wrap.htm#LNPLS01602
在您的情況下,類似以下(未經測試)的東西應該可以工作:
CREATE OR REPLACE PROCEDURE block_tools AS DECLARE v_prog sys.v_$session.program%TYPE; BEGIN SELECT upper(program) INTO v_prog FROM sys.v_$session WHERE audsid = USERENV('SESSIONID') AND audsid != 0 AND ROWNUM = 1; IF UPPER(USERENV('TERMINAL')) NOT IN ('MOAZZAM-LT') THEN IF UPPER(v_prog) LIKE '%TOAD%' OR UPPER(v_prog) LIKE '%T.O.A.D%' OR --OR — Toad UPPER(v_prog) LIKE '%SQLNAV%' OR -- — SQL Navigator UPPER(v_prog) LIKE '%PLSQLDEV%' OR --— PLSQL Developer UPPER(v_prog) LIKE '%BUSOBJ%' OR -- — Business Objects UPPER(v_prog) LIKE '%EXCEL%' OR -- — MS-Excel plug-in UPPER(v_prog) LIKE '%SQLPLUS%' OR -- — SQLPLUS UPPER(v_prog) LIKE '%FRMBLD%' OR UPPER(v_prog) LIKE '%IFBLD60%' or upper(v_prog) is null THEN RAISE_APPLICATION_ERROR(-20983, 'You are not allowed to login in '||v_prog); END IF; END IF; END; / CREATE OR REPLACE TRIGGER block_tools_trigger_HR AFTER LOGON ON HRMS.SCHEMA CALL block_tools;
我所做的只是將所有程式碼移動到一個儲存過程中,並重新定義觸發器以呼叫該過程。