利用wrap32.exe可以加密存储过程,文件在$ORACLE_HOME$/bin下

解决方案 »

  1.   

    引用文章《原文内容》
    软件环境: 
    1、操作系统:Windows 2000 Server
    2、数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版
    3、安装路径:C:\ORACLE
    实现方法: 
    1、
    c:\>set NLS_LANG=AMERICAN_AMERICA.USACII7

    D:\>set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
    D:\>set
    直接打set命令可以查看环境变量
    2、
    在c:\下创建a.sql文件,内容如下:
    create or replace procedure test1(i in number) as
    begin
    dbms_output.put_line('输入参数是'||to_char(i));
    end;
    3、
    D:\>wrap iname=a.sql
    PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Tue Nov 27 22:26:48 2001
    Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved.
    Processing a.sql to a.plb
    4、
    打开a.plb,现在它的内容如下:
    create or replace procedure test1 wrapped 
    0
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    abcd
    3
    7
    8106000
    1
    4

    8
    2 :e:
    1TEST1:
    1I:
    1NUMBER:
    1DBMS_OUTPUT:
    1PUT_LINE:
    1输入参数是:/5、运行a.plb
    SQL> @d:\a.plb
    过程已创建。
    6、运行存储过程
    SQL> set serveroutput on
    SQL> execute test1(1);
    输入参数是1
    PL/SQL 过程已成功完成。
    7、查看存储过程的代码
    SQL> select name,text from all_source where type='PROCEDURE' and name='TEST1';
    结果:看不到其原码
      

  2.   

    2好像有印象,难道是 | 和 &.
      

  3.   

    wrap 必须在要在english 的环境下执行!所以要把注册表改成
    AMERICAN_AMERICA.WE8ISO8859P1
      

  4.   

    之所以要实现这两个功能,是因为要将一些信息加密后存放在数据库中,但为了与其它厂商的系统接口(其中某些厂商不愿意用Socket方式接口——没做过),只好用存储过程来做接口,大家都知道,加密一般都是用原文异或密钥的方式来实现的,需要进行大量的位操作,如果存储过程中不支持位操作的话,就不能用存储过程来写加、解密的核心代码。我听人说在Oracle的存储过程中可以调用一个外部程序,从而可以将核心代码写在可执行文件里,真的可以这样吗,怎么做?
      

  5.   

    oracle可以调用c或java写的外部过程。具体实现方法查查资料吧。
      

  6.   

    oracle 可以把用java 写的类装载导数据库中,然后再数据库中发布后就可使用。
    oracle 还可以调用c 写的程序,要把c 写的程序编译成dll 文件。
      

  7.   

    THE uSAGE OF LOADJAVA TOOL:
    1.usage:
      loadjava (-user | -u} username/password[@database] [-option ] filename [filenames]
    2.public java static method in oracle with create function or create procedure
      CREATE [OR REPLACE] FUNCTION FUNCTION_NAME[(FUNCTION_PARAMETER_LIST)]
      RETURN DATETYPE
      [AUTHID {CURRENT_USER|DEFINER}]
      [PARRALLEL_ENABLE][ETERMINISTIC]{IS|AS}
      LANGUAGE JAVA
      NAME
      'Class.method([java_type,java_type,....])return type'
     
    3.set serveroutput on
    4.Query Java or Class in Oracle Database
      select object_name,object_type,status
       from dba_objects |all_objects|user_objects
       where owner=''
       and object_type like 'JAVA%'
       order by object_name;
    5.The Long and Short Names of Java Source in oracle
      there are short_name for object_name with only 30 characters,but,in general,class name
       are like 'sqlj/runtime/profile/util/sqljruntime.class',so,you can do :
      DBMS_Java.LONGNAME(object_name) ------>to get long name of class
    6.Delete of Java resource
      dropjava -u username/password@datebasenameinNET8 -option filename
    例子:
    LOAD -USER SYSTEM/MANAGER@DBNAME -RESOLVE C:\BASE64.JAVA
      

  8.   

    oracle确实可以调用c或java写的外部过程。具体实现方法在plsql高级编程上有解释。
      

  9.   

    gyang:书的全名、作者、出版社? 我好去找。
      

  10.   

    oracle8i pl/sql 程序设计
    机械工业出版社