a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 147|回复: 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中无法看到源码。7 U0 j* c. \* W$ W4 M  I
  WRAP语法, T5 P$ t2 _: V2 M' h
  wrap iname=input_file [oname=output_file ]" Z7 |% [: U3 E2 p- [! I
  可省略文件扩展名,如以下的呼吁是等同的:# u/ N; V" O' [2 B3 ~
  wrap iname=/mydir/myfile4 x& |* N" }8 b7 Y
  wrap iname=/mydir/myfile.sql. R5 w9 k' P9 W# Z
  输出文件默认的扩展名为.plb,当然你也可以指定分歧的文件名和扩展名。
1 P: ^4 H- u' r5 z  wrap iname=/mydir/myfile oname=/yourdir/yourfile.out! W* C  y8 h, g# r
  wrap主若是同化PL/SQL语句的主体部门,如下CREATE语句可以被加密:
, n# Z4 t6 Y! C  @  CREATE [OR REPLACE] FUNCTION function_name4 X' d% J' C8 r! F% e$ y
  CREATE [OR REPLACE] PROCEDURE procedure_name' f2 H0 R. s' ^, k
  CREATE [OR REPLACE] PACKAGE package_name
2 ?* Z! W3 ]: A9 Z. k  CREATE [OR REPLACE] PACKAGE BODY package_name9 s2 k6 Y( |4 ^* f
  CREATE [OR REPLACE] TYPE type_name AS OBJECT* X' |2 Z: h3 C: v# [6 M3 @
  CREATE [OR REPLACE] TYPE type_name UNDER type_name
- j' _+ V+ ^. q/ y* `  CREATE [OR REPLACE] TYPE BODY type_name( ^( [) W# k/ b3 b: i) _! {
  CREATE [OR REPLACE] TRIGGER语句不能被加密,但你可挪用加密的过程。加密文件中除了语灸托目和C气概(/*…*/)注释外,其它所有注释被删除。
. \' N  W& e0 [# V  输出的文件为文本文件,可以在SQL*Plus执行:  y; D2 c5 n. S% Y' R' G+ e- j
  SQL> @myfile.plb;
# f4 s! \( j# h( p4 R* ^8 i0 P8 h
7 w+ E: ^4 F* I- j6 F% ~  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加密包的例子:
/ R* T" g; W6 t: l/ V  DECLARE. ]' G. R. ]- Q1 Q7 {1 B
  package_text VARCHAR2(32767); — text for creating package spec & body& o% G: @7 \, i# d
  FUNCTION generate_spec (pkgname VARCHAR2) RETURN VARCHAR2 AS
( x5 H7 X- x4 b: W4 Z# e7 t1 E  BEGIN$ J$ C( ^# @. b+ H( u
  RETURN ‘CREATE PACKAGE ‘ || pkgname || ‘ AS! J7 M/ a8 h4 v
  PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER);+ T- l* r/ p  }  _9 G- f8 ^
  PROCEDURE fire_employee (emp_id NUMBER);+ t$ `& K) l& Y# }6 a& c
  END ‘ || pkgname || ‘;’;
4 \, m+ a) i) X4 U7 j+ E$ N3 i  END generate_spec;
8 ]0 B6 u6 O! }; D9 T  FUNCTION generate_body (pkgname VARCHAR2) RETURN VARCHAR2 AS7 G3 i( Q) I$ ^" W5 a
  BEGIN% g+ D, u& R' [1 Y
  RETURN ‘CREATE PACKAGE BODY ‘ || pkgname || ‘ AS
, u5 ~) U2 C! U: y  PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER) IS
; n9 @) q" F. @/ K2 s  BEGIN  J2 e# z( I7 n3 E( d  {: l! _/ \
  UPDATE employees
7 R8 `. b& G9 r  SET salary = salary + amount WHERE employee_id = emp_id;8 c1 c' E8 M. O. O; @/ _" ~, c/ q
  END raise_salary;, z2 y" h4 M  e6 _" R' ]' K6 i
  PROCEDURE fire_employee (emp_id NUMBER) IS
7 e; s0 M+ d# D9 e8 y  BEGIN
6 C. S- u' g) i" b3 d8 }5 G  DELETE FROM employees WHERE employee_id = emp_id;
- v  O6 X4 T- A2 n/ H  END fire_employee;' O( |+ C4 {+ f0 @9 B
  END ‘ || pkgname || ‘;’;* y; w8 S8 c& Q" f! i/ i3 q. T0 f
  END generate_body;) t5 e' w/ p' ?; x3 p( Z: w0 W# `
  BEGIN% b) H8 {7 J6 i6 N$ Y! a
  — Generate package spec3 B! ^8 d: i& k5 q, \+ x% A$ n
  package_text := generate_spec(‘emp_actions’)) t& m5 B  O1 v. K9 V) K
  — Create wrapped package spec
# M+ T0 Q% F0 Z# D/ n4 }6 |2 X" u! y  DBMS_DDL.CREATE_WRAPPED(package_text);
  \8 j+ i8 C2 ]/ O% @) T  — Generate package body4 W1 h- j5 C$ {% e  ~
  package_text := generate_body(‘emp_actions’);+ H3 U; M7 T2 K  x( R' F$ Y
  — Create wrapped package body
8 U/ \. T6 f- U8 }0 M  DBMS_DDL.CREATE_WRAPPED(package_text);
  y" U+ V; \2 ]  END;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 08:17 , Processed in 2.167359 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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