Oracle提供了WRAP工具,可以对存储过程进行加密,而在10g中,这个操作已经可以在数据库中完成。



Oracle的DBMS_DDL增加了一个WRAP函数,通过这个函数,就可以返回加密后的过程:

SQL> select dbms_ddl.wrap('create procedure p_wrap as begin null; end;') from dual;

DBMS_DDL.WRAP('CREATEPROCEDUREP_WRAPASBEGINNULL;END;')

--------------------------------------------------------------------------------------

create procedure p_wrap wrapped

a000000

354

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

7

25 59

fpR2Lh8mLtoZnFowf5kMdCUxdiYwg5nnm7+fMr2ywFwW45aW8lZpuHQruMAy/tJepZmBCC0r

uIHHLcmmprNznsM=

有了这个功能,用户就不需要单独执行命令行的wrap工具了,存储过程的加密工作在数据库中就可以完成。

Oracle还有更加方便的功能,根据未加密的存储过程直接创建加密后的过程:

SQL> exec dbms_ddl.create_wrapped('create procedure p_wrap as begin null; end;')

PL/SQL procedure successfully completed.

SQL> select text from user_source where name = 'P_WRAP' order by 1;

TEXT

------------------------------------------------------------------------------------

procedure p_wrap wrapped

a000000

354

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

7

25 59

fpR2Lh8mLtoZnFowf5kMdCUxdiYwg5nnm7+fMr2ywFwW45aW8lZpuHQruMAy/tJepZmBCC0r

uIHHLcmmprNznsM=

对于长度超过32767的存储过程,CREATE_WRAPPED过程还重载了其他两个方法,用户可以将存储过程切割成256或32767的字符串,存储到一个索引表中,接口是DBMS_SQL.VARCHAR2S和DBMS_SQL.VARCHAR2A。

使用CREATE_WRAPPED使得创建机密的存储过程变得更加的简单。


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html