现在的位置: 首页 > 综合 > 正文

加密oracle存储过程

2014年01月18日 ⁄ 综合 ⁄ 共 1144字 ⁄ 字号 评论关闭
oracle提供了wrap工具来加密包括procedure、function、package等的PL/SQL源代码
wrap的执行在OS的命令行环境下
语法:wrap iname=input_file [oname=output_file]

限制:字符串、数字、变量名、表名、字段名被保留在加密文件中的,仅加密运算法则并限制被解密。所以,也就无法隐藏表名或者密码等
有些新的sql语法,需要指定选项edebug=wrap_new_sql,否则不能被支持

注意:
1、wrap只能检测出基本的语法错误,而由于不登录数据库所以无法检查出语义的错误
2、向上兼容,而不能向下兼容,即低版本加密的过程可以到高版本上编译,反之不行
3、加密package是仅加密package body,而不加密包声明
4、windows平台上执行时显示错误:kgepop: no error frame to pop to for error 1801
需要先定义 set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

举例:
源码
CREATE OR REPLACE PROCEDURE p_test
(
   i_var IN VARCHAR2,
   o_var OUT VARCHAR2
) IS
BEGIN
   o_var := i_var;
END p_test;
/

加密后的文件
CREATE OR REPLACE PROCEDURE p_test wrapped
0
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
3
7
9200000
1
4
0
5
2 :e:
1P_TEST:
1I_VAR:
1VARCHAR2:
1O_VAR:
1OUT:
0

0
0
1b
2
0 9a 8f a0 b0 3d 96 :2 a0
b0 54 b4 55 6a :2 a0 d b7
a4 a0 b1 11 68 4f 1d 17
b5
1b
2
0 3 1f 1b 1a 27 38 30
34 17 3f 2f 44 48 4c 50
54 2c 58 5c 60 62 6e 72
74 75 7e
1b
2
0 b 4 d :3 4 a e :2 4
:3 1 4 d 4 :2 1 5 :7 1
1b
4
0 1 :4 3 :5 4
2 :2 1 :3 7 :2 6
8 :7 1
80
4
:3 0 1 :a 0 16
1 :7 0 5 2c
0 :2 3 :3 0 2
:7 0 4 3 :3 0
a 15 0 7
5 :3 0 3 :3 0
4 :6 0 9 8
:3 0 b :2 0 16
1 c :2 0 4
:3 0 2 :3 0 e
f 0 11 :3 0
15 1 :4 0 15
14 11 12 :6 0
16 :2 0 1 c
15 19 :3 0 18
16 1a 0
c
4
:3 0 1 2 1
6 2 5 a
1 10
1
4
0
19
0
1
14
1
3
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0
1 0 1
6 1 0
2 1 0
0

/

加密文件名如果不指定的话,就是原文件主文件.plb
加密后使用 SQL> @加密文件名 编译到库中,查看的时候显示已经被加密
比如在pl/sql developer查看是显示 /* Source is wrapped */

抱歉!评论已关闭.