oracle提供了wrap工具来加密包括procedure、function、package等的PL/SQL源代码
wrap的执行在CMD命令行环境下
语法:
wrap iname=input_file [oname=output_file]
将C:\p1.sql加密成p1
C:\>wrap iname=p1.sql oname=p1
PL/SQL Wrapper: Release 11.2.0.1.0- 64bit Production on 星期五 10月 25 08:45:22
Copyright (c) 1993, 2009, Oracle. All rights reserved.
Processing p1.sql to p1.plb
加密后使用 SQL> @加密文件名 编译到库中,查看的时候显示已经被加密
比如在pl/sql developer查看是显示 /* Source is wrapped */
C:\>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期五 10月 25 08:57:46
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn scott/tiger
已连接。
SQL> @p1.plb
过程已创建。
SQL> select * from t;
未选定行
SQL> call p1();
调用完成。
SQL> select * from t;
X
----------
1
2
3
4
5
6
7
8
9
10
已选择10行。
SQL>select text from user_source where name='P1'
PROCEDURE P1 wrapped
a000000
354
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
7f be
WI2qPaUYda4qsdTzC4y1G1wU4dswg6RfLZ7WfI7p2sHVuehM29jJCU6JWyq9s2exy8vmLQ7M
5OQ5xMcoaIY0eaFbrrjTgRar/DHnDgMcdN/IFp6F05b2TJum7SaytjcHNyGx9MIBVcFi4JOG
KPPBwRJHEodMcooipjiR69Zc7JHSkAlm9yPk+5qVLJA=
在oracle中,对象的源代码是可以从user_source数据字典中找到。
user_source和all_source
SQL>select type from all_source group by type
1 PROCEDURE
2 PACKAGE
3 PACKAGE BODY
4 LIBRARY
5 TYPE BODY
6 TRIGGER
7 FUNCTION
8 JAVA SOURCE
9 TYPE