a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 129|回复: 1

[考试辅导] Oracle技术:Oracle中加密PL/SQL源码示例

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
主若是为了呵护PL/SQL源代码,防止PL/SQL代码被犯警使用。可以使用wrap 工具或者DBMS_DDL子轨范对PL/SQL源码进行加密。wrap工具加密单个源文件,如SQL*Plus剧本。DBMS_DDL子轨范加密单个动态生成的PL/SQL单元,如一个CREATE PROCEDURE声明。加密的源文件可以移动,备份,可被SQL*Plus和Improt和Export工具措置,但在静态数据字典视图*_SOURCE中无法看到源码。
* k8 S; p1 E- ?  _$ ]9 O& ^6 s  WRAP语法+ M$ d. r) u# z5 s
  wrap iname=input_file [oname=output_file ]
! Q+ x0 s1 e. l: s4 e  可省略文件扩展名,如以下的呼吁是等同的:
% d6 D2 \3 J, R  wrap iname=/mydir/myfile7 x, {; w7 @8 @! D( b! o. z
  wrap iname=/mydir/myfile.sql- \+ A* B3 p4 T$ i6 Q' X+ l0 a
  输出文件默认的扩展名为.plb,当然你也可以指定分歧的文件名和扩展名。
6 ^( W  i: z4 M# V- `  wrap iname=/mydir/myfile oname=/yourdir/yourfile.out
) p- l( t+ ?( H. o  wrap主若是同化PL/SQL语句的主体部门,如下CREATE语句可以被加密:
8 J. ^; b3 q- b# k' {* X3 a0 @  CREATE [OR REPLACE] FUNCTION function_name8 t1 t- H3 c8 n3 u
  CREATE [OR REPLACE] PROCEDURE procedure_name6 k! q! ^  a0 v& L1 u
  CREATE [OR REPLACE] PACKAGE package_name( C; U% L' J/ }8 H# W, o
  CREATE [OR REPLACE] PACKAGE BODY package_name
& |) i- t( b/ W4 M3 A1 @  CREATE [OR REPLACE] TYPE type_name AS OBJECT& u% c* Q& D5 |# Y0 S# f! z
  CREATE [OR REPLACE] TYPE type_name UNDER type_name9 V" M: J2 V' i1 {
  CREATE [OR REPLACE] TYPE BODY type_name
% V5 C. _% h# }" z  {  CREATE [OR REPLACE] TRIGGER语句不能被加密,但你可挪用加密的过程。加密文件中除了语灸托目和C气概(/*…*/)注释外,其它所有注释被删除。2 ^( |" S& I% u7 O0 ^
  输出的文件为文本文件,可以在SQL*Plus执行:
% u2 v# E& q+ K6 O! T: X) K( r) O  SQL> @myfile.plb;
: k* ?, O2 u+ ~1 X
2 j  ]1 O5 s: ]* V0 ?  DBMS_DDL子轨范
回复

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:20 | 显示全部楼层

Oracle技术:Oracle中加密PL/SQL源码示例

</p>  DMBS_DDL包包含WRAP函数和CREATE_WRAPPED过程。CREATE_WRAPPED过程加密语句并建树PL/SQL单元。如下为使用 DBMS_DDL.CREATE_WRAPPED加密包的例子:8 n9 c7 x$ l1 \# `
  DECLARE9 L1 B/ N) E. F+ R
  package_text VARCHAR2(32767); — text for creating package spec & body$ c# v0 w2 w- ], g5 J0 q# Y& }
  FUNCTION generate_spec (pkgname VARCHAR2) RETURN VARCHAR2 AS, _( W$ Z; \' P( h# w; c
  BEGIN
7 j7 E4 E; O8 ~; P5 @/ E  RETURN ‘CREATE PACKAGE ‘ || pkgname || ‘ AS
0 P; I. G* g% V  PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER);4 D8 M3 ^4 x: N  p; B( T- B* R
  PROCEDURE fire_employee (emp_id NUMBER);
9 t5 m# ^7 U& A' o$ r+ T$ R" J* N  END ‘ || pkgname || ‘;’;$ ^% r& Q1 {3 V/ @# n( n$ ^. L
  END generate_spec;
6 k- f3 P  r5 m8 _) {: a* A6 k7 O  FUNCTION generate_body (pkgname VARCHAR2) RETURN VARCHAR2 AS
0 p: x6 ?5 \7 J% f3 A6 ^  BEGIN" x. j3 F9 ?8 T* L0 M5 b
  RETURN ‘CREATE PACKAGE BODY ‘ || pkgname || ‘ AS
$ H1 y( t0 Q% \9 V+ L9 s  PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER) IS% _: i) U+ f. T; l5 X
  BEGIN
" C7 \& a& r5 @2 ~+ f# ^' }% `4 K  UPDATE employees' d6 R# i1 v6 T5 E
  SET salary = salary + amount WHERE employee_id = emp_id;
0 P8 l# R& _& ^) ?  y  END raise_salary;
. A* j6 P% D/ v; C% n# F) J  PROCEDURE fire_employee (emp_id NUMBER) IS  g* S. ]2 x9 ]$ e
  BEGIN
5 r7 S3 v; E0 r# b  DELETE FROM employees WHERE employee_id = emp_id;
4 O. a6 j5 w( P7 A# ~  END fire_employee;
; T0 `' c% [8 J, @* A  END ‘ || pkgname || ‘;’;
. m; X) L7 |; {* R2 B4 I0 m  END generate_body;: X/ n; N1 F$ ]4 K8 {6 I: ~, v
  BEGIN5 a  {8 ~9 f) `1 N. J9 o! [
  — Generate package spec
1 }4 S0 I% o( F& K$ [! B( o  package_text := generate_spec(‘emp_actions’)0 r5 s4 K# `/ q, I  @) g
  — Create wrapped package spec/ X" {' L$ s: W' p4 s, ~5 o& Y; T
  DBMS_DDL.CREATE_WRAPPED(package_text);% Q! a* v8 N" {5 e
  — Generate package body. _: f; S5 P7 h" H$ |
  package_text := generate_body(‘emp_actions’);
- \% l! {# x- `7 Y: j7 `  — Create wrapped package body
( `5 Q3 O4 W' [) p8 K: p" Z  DBMS_DDL.CREATE_WRAPPED(package_text);' p3 Q1 i, |% ?0 q: }- {
  END;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-5 22:32 , Processed in 0.251348 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表