oracle下存储过程的加密方法

方法1:X: ora81 Oracle仓包iName = oname = XXX XXX

使用方法2:9i包加密的存储过程在win2000,和10g可以加密dbms_ddl.wrap或dbms_ddl.create_wrapped。

11.5.1加密存储使用WIN2000下的程序包
wrap.bat
REM用法:要用包装加密的文件的名称。
集nls_lang = american_america.usacii7
wrap.exe iName = % 1
暂停
11.5.2裹包(10.2版)
SQL程序单元通常包含关于公司流程和商业机密的非常敏感和机密的信息,这些信息使它们与表相似,成为受保护的实体组。为了防止对源代码的未授权视图,我们经常使用换行命令行实用程序,这使得程序非常混乱。
只有在创建了一个脚本之后,包装才会被调用;实用程序包被打包成一个文件。然而,在某些情况下,您可能希望动态地生成代码中的包装器。在这种情况下,由于没有源文件,所以不能调用包装实用程序。
由于Oracle数据库10g第二提供了一个供应包,您可以使用它来创建代码并打包它。
例如,假设您希望以包装的形式创建一个简单的进程P1。
创建或替换过程P1
开始
无效的;
结束;
在PL/sql单元中,您可以使用以下命令动态地创建此过程:
开始
dbms_ddl.create_wrapped
('创建或替换的程序P1开始无效;结束;)
结束;
/
现在您要确认包装过程。您可以从字典中选择源文本。
SQL >选择文本user_source name = 'p1;

文本
-----------------------------------------------------------------
P1包装程序
a000000
三百六十九
ABCD
ABCD
......等…
第一行程序P1包装是包装过程的确认。如果你使用dbms_metadata.get_ddl()函数获得进程的DDL,你仍然会看到源代码已经封装。
有时,您可能有一些不同的需求;例如,您可能希望生成PL/sql代码,但不希望创建进程。在这种情况下,您可以将其保存在文件或表中以便以后执行:
SQL >选择dbms_ddl.wrap
2('创建或替换的程序P1开始无效;结束;)
3从双
4 /

dbms_ddl.wrap('createorreplaceprocedurep1asbeginnull;结束;')
----------------------------------------------------------------------
创建或替换过程
a000000
三百六十九
ABCD
ABCD
…凡此种种,不一而足。
包函数的输出是一个传递参数,它代表的是一个简单的文件或表的包输出,这个参数可以保存在一个纯文件或表中,并且可以稍后执行。如果生成的代码部署在其他地方,这个方法非常有用,您必须保证代码的安全性。
如果你能通过所有的存储代码的文本作为一个VARCHAR2数据类型(大小限制为32K)通过这种方法可以正常工作。如果PL / SQL代码超过32K,你必须使用一个稍微不同的方法:接受一组变量作为输入。
在这里你可以使用提供的数据类型:在包dbms_sql.this的VARCHAR2是一个收集数据的类型(表字段),每单位表接收高达32K的文字,你可以增加包含在表格单元的数量来满足您的需求。例如,假设你有包一个很长的过程称为myproc,它的定义如下:
创建或替换程序myproc作为
l_key VARCHAR2(200);
开始
l_key:= 'arupnanda;
结束;
当然,这不是一个很长的过程,但是,假设它是很长的:
1申报
2 l_input_code dbms_sql.varchar2s;
3开始
4 l_input_code(1):= 'array举行myproc;
5 l_input_code(2):='创建或替换程序myproc ';
6 l_input_code(3):=l_key VARCHAR2(200);;
7 l_input_code(4):= 'begin;
8 l_input_code(5):=l_key:= ''arupnanda ';';
9 l_input_code(6):=;;
10 l_input_code(7):=结束;
sys.dbms_ddl.create_wrapped(11
12 l_input_code DDL,
13磅= 2,
14 = 6
15);
16 *结束;
在这里,我们定义一个变量的l_input_code保存输入的明文密码。在第四到第十线,我们把这些线,你想包的代码。在这个例子中,我使用一个很短的线为简单起见。事实上,你可能要用很长的线,与规模作为32kb很多。同样的,我只能用7个单位在阵列;事实上,你可能会使用一些单位填写的所有代码。
第十一至第十五行显示我如何调用过程,过程是创建一个包的形式。在第十二行中,我通过收集作为一个参数的DDL。然而,停顿在这里-我有分配一个音符作为数组的第一个单元,它可用于在文档中。但它不是一个有效的语法,以同样的方式,我给另一个注释数组的最后一个单元(7),而不是创建一个进程的一个有效的语法。为了包装操作过程中唯一有效的行,我指定的最低(2)和最高(6)的单位存储我们的代码行第十三和第十四。参数LB代表下界的阵列,这是2在这个例子中,和HB的上限(6)。
使用此方法,您现在可以从您的代码中创建一个任意大小的进程。
============================================================

创建或替换程序p_wraped_user authID current_user作为
——由上2006-11-10 XSB
用于:批量加密该用户下的所有代码,包括存储过程、函数和包。
v_procs dbms_sql.varchar2a;

开始
对于n中的(选择不同的名称,类型)
从user_source
在'p_wraped_user'and名称>
<> type'type

选择不同的名称、类型
从user_source
线= 1和
仪器(文本,'wrapped)> 0
——名称= 'get_clerk--
类型= 'package身体
按类型循环)
我在(行号RN,文本
从(选择解码(线、1'创建或替换文本的文本| |)
从user_source
name = n.name和
类型= n.type
逐行循环)
v_procs(i.rn):= i.text;
结束循环;
dbms_ddl.create_wrapped(v_procs,1,v_procs。计数);
v_procs.delete;
结束循环;

结束;