Oracle加绕功能可以将PL/SQL代码实现部分隐藏,如存储过程、函数、包体等均可使用加绕功能,下面以一个存储过程实现部分加绕来展示Oracle加绕功能的使用。 
加绕方法一:
1、编写如下存储过程后,保存为C:\wraptest.sql文件
CREATE  PROCEDURE wraptest IS
  TYPE emp_tab IS TABLE OF OPER_OPERATOR%ROWTYPE INDEX BY PLS_INTEGER;   all_emps      emp_tab; BEGIN
  SELECT * BULK COLLECT INTO all_emps FROM OPER_OPERATOR;   FOR i IN 1..10 LOOP
    DBMS_OUTPUT.PUT_LINE('Emp Id: ' || all_emps(i).OPERNM);   END LOOP; END; /
2、在window系统命令行输入如下命令 C:\>wrap iname=C:\wraptest.sql,命令执行后,出现如下提示信息: 
PL/SQL Wrapper: Release 10.2.0.1.0- Production on 星期四 6月  18 21:58:45 2009 Copyright (c) 1993, 2004, Oracle.  All rights reserved. Processing c:\ wraptest.sql to wraptest.plb 
C:\>wrap iname=/mydir/myfile.sql oname=/mydir/myfile.plb 
3、打开PL/SQL Developer工具命令窗口,输入如下命令: SQL> @c:\ wraptest.plb
 
执行后可能出现如下错误信息:

Warning: Procedure created with compilation errors 这个没有关系,在左侧Procedure中找到存储过程wraptest重新编译一下。 
4、完成以上3步,就可以正常执行存储过程了
SQL> exec wraptest(); 
加绕方法二:
BEGIN
  SYS.DBMS_DDL.CREATE_WRAPPED('
CREATE OR REPLACE FUNCTION SHOW_INFO1(P_STR IN VARCHAR2) RETURN VARCHAR2 AS
STR VARCHAR2(100) :=''这是Oracle加扰测试''; BEGIN
STR := STR||P_STR;

RETURN STR; END;'); END;
通过“SYS.DBMS_DDL.CREATE_WRAPPED(‘textarea’);”实现加扰。 
DECLARE
  TEMP VARCHAR2(100); BEGIN
  TEMP := SHOW_INFO1('HELLO');   DBMS_OUTPUT.put_line(TEMP); END;
调用加扰方式创建的函数 
DECLARE
-- the package_text variable contains the text to create the package spec and body
  package_text VARCHAR2(32767);
  FUNCTION generate_spec (pkgname VARCHAR2) RETURN VARCHAR2 AS   BEGIN
     RETURN 'CREATE PACKAGE ' || pkgname || ' AS
       PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER);        PROCEDURE fire_employee (emp_id NUMBER);        END ' || pkgname || ';';   END generate_spec;
  FUNCTION generate_body (pkgname VARCHAR2) RETURN VARCHAR2 AS   BEGIN
     RETURN 'CREATE PACKAGE BODY ' || pkgname || ' AS

PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER) IS        BEGIN
         UPDATE employees SET salary = salary + amount WHERE employee_id = emp_id;
       END raise_salary;
       PROCEDURE fire_employee (emp_id NUMBER) IS        BEGIN
         DELETE FROM employees WHERE employee_id = emp_id;        END fire_employee;        END ' || pkgname || ';';   END generate_body;  BEGIN
  package_text := generate_spec('emp_actions'); -- generate package spec   SYS.DBMS_DDL.CREATE_WRAPPED(package_text);  -- create and wrap the package spec
  package_text := generate_body('emp_actions'); -- generate package body

SYS.DBMS_DDL.CREATE_WRAPPED(package_text); -- create and wrap the package body END; /
-- call a procedure from the wrapped package CALL emp_actions.raise_salary(120, 100); 
When you check the *_SOURCE views, the source is wrapped, or hidden, so that others cannot view the code details. For example: 
SELECT text FROM USER_SOURCE WHERE name = 'EMP_ACTIONS'; 
通过如上SQL可以看到,新建的包、包体为加扰后的代码,无法看到具体实现。

Oracle过程包加密的更多相关文章

  1. 64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录

    64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录 经过几天不停的网上找资料,实验,终于联通了. 环境:系统:win 2008 ,SqlServer2008 R2, 连接O ...

  2. Oracle过程及函数的参数模式,In、out、in out模式

    Oracle过程及函数的参数模式 In.out.in out模式 在Oracle中过程与函数都可以有参数,参数的类型可以指定为in.out.in out三种模式. 三种参数的具体说明,如下图所示: ( ...

  3. oracle过程中动态语句实现

    oracle过程中动态语句实现 一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DD ...

  4. 24、jQuery常用AJAX-API/Java调用MySQL / Oracle过程与函数

      1)掌握jQuery常用AJAX-API 2)掌握Java调用MySQL / Oracle过程与函数 一)jQuery常用AJAX-API 目的:简化客户端与服务端进行局部刷新的异步通讯 (1)取 ...

  5. 获取Oracle过程中的OUT SYS_REFCURSOR值

    一个项目中的实例:获取Oracle过程中的返回SYS_REFCURSOR.注意:如果SYS_REFCURSOR为一个表或视图.可以通过表名%ROWTYPE获取每行数据,而不必另外定义type. 原过程 ...

  6. 关于Oracle过程,函数的经典例子及解析

    一,Oracle中的过程,函数 对于oracle中的过程和函数,个人觉得可以化为一类,因为它们在写法上并没有什么的不同.公式无非就是 create or replace Package_name(pa ...

  7. oracle 过程函数,包的区别和联系

    一.过程与函数区别 1.过程可以有0~N个返回参数,通过OUT or IN OUT参数返回:函数有且仅有1个返回值,通过return语句返回. 2.调用过程时,可做为单独的语句执行:调用函数时,函数必 ...

  8. 足球和oracle系列(3):oracle过程排名,世界杯第二回合战罢到来!

    足球与oracle系列(3):oracle进程排名.世界杯次回合即将战罢! 声明:        这不是技术文档,既然学来几招oracle简单招式.就忍不了在人前卖弄几下.纯为茶余饭后与数朋库友的插科 ...

  9. Linux系统中安装Oracle过程记录

    第一章 安装数据库软件 1.1 修改密码及创建目录和权限 创建oracle用户和组 创建相关目录并赋权 1.2 设置oracle用户环境变量 ORACLE_BASE:产品基目录 ORACLE_HOME ...

随机推荐

  1. How To Fix – Mcrypt PHP extension required in Laravel on Mac OS X (No MAMP)

    Laravel PHP web framework requires certain libraries to function properly. One of these libraries is ...

  2. 【个人笔记】001-PHP基础-01-PHP快速入门-01-PHP职业路线及PHP前景

    001-PHP基础-01-PHP快速入门 01-PHP职业路线及PHP前景 PHP职业路线 PHP初级工程师 1年以下 3k-6k PHP中级工程师 1-3年6k-10k PHP高级工程师 3年以上  ...

  3. 20145120黄玄曦 《java程序设计》 寒假学习总结

    1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...

  4. MITK Tutorial (三)

    Step 2: Use the template with the plugins to read a image 在exampleplugin插件中QmitkAwesomeView.cpp中添加头文 ...

  5. linux xampp常见问题

    一.常见问题 1.安装xampp4linux后,只能本机(http://localhost)访问,局域网内其他机器无法访问 解答:在/opt/lampp/etc中修改httpd.conf,将Liste ...

  6. 2186: [Sdoi2008]沙拉公主的困惑 - BZOJ

    Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...

  7. WEB前端常用的测试工具

    一.QUnit 前端测试工具 QUnit是一个强大的JavaScript单元测试框架,该框架是由jQuery团队的成员所开发,并且是jQuery的官方测试套件.Qunit是Jquery的单元测试框架, ...

  8. 网站常用css必备css reset

    在我们写前端代码页面的时候,很多常用的CSS类都是固定的!但没有一个标准或者大家都按自己的方式去随意的写,这样就每次都重复写一些固定的类! 为此HTML5 Doctor(HTML5医生)为我们总结了一 ...

  9. 从String类看写C++ class需要注意的地方

    #include <iostream> #include <string.h> using namespace std; class String { char* m_data ...

  10. 在 tornado 中异步无阻塞的执行耗时任务

    在 tornado 中异步无阻塞的执行耗时任务 在 linux 上 tornado 是基于 epoll 的事件驱动框架,在网络事件上是无阻塞的.但是因为 tornado 自身是单线程的,所以如果我们在 ...