主要是为了保护PL/SQL源代码,防止PL/SQL代码被非法使用。可以使用wrap 工具或者DBMS_DDL子程序对PL/SQL源码进行加密。wrap工具加密单个源文件,如SQL*Plus脚本。DBMS_DDL子程序加密单个动态生成的PL/SQL单元,如一个CREATE PROCEDURE声明。加密的源文件可以移动,备份,可被SQL*Plus和Improt和Export工具处理,但在静态数据字典视图*_SOURCE中无法看到源码。
WRAP语法
wrap iname=input_file [oname=output_file ]
可省略文件扩展名,如以下的命令是等同的:
wrap iname=/mydir/myfile
wrap iname=/mydir/myfile.sql
输出文件默认的扩展名为.plb,当然你也可以指定不同的文件名和扩展名。
wrap iname=/mydir/myfile oname=/yourdir/yourfile.out
wrap主要是混淆PL/SQL语句的主体部分,如下CREATE语句可以被加密:
CREATE [OR REPLACE] FUNCTION function_name CREATE [OR REPLACE] PROCEDURE procedure_name CREATE [OR REPLACE] PACKAGE package_name CREATE [OR REPLACE] PACKAGE BODY package_name CREATE [OR REPLACE] TYPE type_name AS OBJECT CREATE [OR REPLACE] TYPE type_name UNDER type_name CREATE [OR REPLACE] TYPE BODY type_name |
CREATE [OR REPLACE] TRIGGER语句不能被加密,但你可调用加密的过程。加密文件中除了语句头部和C风格(/*…*/)注释外,其它所有注释被删除。
输出的文件为文本文件,可以在SQL*Plus执行:
SQL> @myfile.plb;
DBMS_DDL子程序
DMBS_DDL包包含WRAP函数和CREATE_WRAPPED过程。CREATE_WRAPPED过程加密语句并创建PL/SQL单元。如下为使用 DBMS_DDL.CREATE_WRAPPED加密包的例子:
DECLARE package_text VARCHAR2(32767); — text for creating package spec & body FUNCTION generate_spec (pkgname VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN ‘CREATE PACKAGE ‘ || pkgname || ‘ AS PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER); PROCEDURE fire_employee (emp_id NUMBER); END ‘ || pkgname || ‘;’; END generate_spec; FUNCTION generate_body (pkgname VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN ‘CREATE PACKAGE BODY ‘ || pkgname || ‘ AS PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER) IS BEGIN UPDATE employees SET salary = salary + amount WHERE employee_id = emp_id; END raise_salary; PROCEDURE fire_employee (emp_id NUMBER) IS BEGIN DELETE FROM employees WHERE employee_id = emp_id; END fire_employee; END ‘ || pkgname || ‘;’; END generate_body; BEGIN — Generate package spec package_text := generate_spec(‘emp_actions’) — Create wrapped package spec DBMS_DDL.CREATE_WRAPPED(package_text); — Generate package body package_text := generate_body(‘emp_actions’); — Create wrapped package body DBMS_DDL.CREATE_WRAPPED(package_text); END; |
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
甲骨文针对Java 7发布零天漏洞更新
甲骨文公司昨日发布了两个针对Java零天(zero day)漏洞的带外(out-of-band)安全更新,其中漏洞CVE-2013-0422在发现当天就已被攻击。
-
OpenWorld案例分享:Oracle透明数据加密技术
在本次Oracle OpenWorld 2010会议上,来自Robert Morris 大学(RMU)的信息安全主管向我们分享了一个Oracle高级安全的应用案例。
-
Oralce安全之身份管理器
考虑到简化管理,降低风险和更易于集成这三个驱动因素,OIM被添加到了Oracle身份管理产品套件。
-
如何禁止特定IP访问Oracle数据库
通过使用数据库服务器端的sqlnet.ora文件可以实现禁止指定IP主机访问数据库的功能,这对于提升数据库的安全性有很大的帮助。