前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于pl/sql的代码保护(r3笔记28天)

关于pl/sql的代码保护(r3笔记28天)

作者头像
jeanron100
发布2018-03-14 18:02:37
6230
发布2018-03-14 18:02:37
举报

在开始学习数据库的时候,总是尝试手动创建数据库,安装完成之后需要运行一些脚本,总是看到屏幕上闪个不停,可以看到大多数的存储过程代码都是一堆乱码,最开始还以为是乱码了。:)有时候心血来潮想看看里面的代码,但是基本上都是看到存储过程名或者函数名,再细节的代码都被屏蔽掉了。 大家在运行awr,ash的时候,也看不到核心的代码。所以这些技术细节oracle是不希望开放的。 比如awr,如果看到最关键的地方。dbms_workload_repository的内容又是屏蔽的,还是有些让人郁闷。 -- call the table function to generate the report select output from table(dbms_workload_repository.&fn_name( :dbid, :inst_num, :bid, :eid, :rpt_options )); 我们在开发自己的程序的时候,根据具体的需求也可以包含代码。当然了是在有这种需求的情况下,要不反倒弄巧成拙。 关于代码的加密有几种方式。 一种是使用wrap命令直接来格式化。这种方式比较直接,操作也很简单。 比如我们有如下的包声明。 create or replace package pack_bonus as function get_bonus(param1 in number,param2 in number,param3 in number,param4 in number) return number; function get_bonus(param1 in number,param2 in number,param3 in number) return number; function get_bonus(param1 in number,param2 in number)return number; end; / 直接使用wrap命令就可以加密了,iname是输入的文件,oname是输出文件。文件名可以自己根据需要来定义。

$ wrap iname=a.sh oname=aaaa.bin

PL/SQL Wrapper: Release 11.2.0.3.0- 64bit Production on Fri Oct 17 08:21:49 2014

Copyright (c) 1993, 2009, Oracle. All rights reserved.

Processing a.sh to aaaa.bin >ls -lrt

-rw-r--r-- 1 ora11g dba 305 Oct 17 08:21 a.sh -rw-r--r-- 1 ora11g dba 309 Oct 17 08:21 aaaa.bin 如果想调用的话,直接在sqlplus中运行就可以了。 SQL> @aaaa.bin

Package created.

第二种属于编程级别的,使用dbms_ddl来实现,可以使用wrap和create_wrap来完成加密。 这两个方法的不同之处在于wrap是加密指定的代码,只会把加密之后的内容显示出来,不会尝试编译。 而create_wrap是尝试编译加密后的代码。 先看一个例子上手。直接调用wrap就打印出了加密后的代码。

set serveroutput on declare i_program varchar2(32767); begin i_program:='create or replace package pack_bonus as function get_bonus(param1 in number,param2 in number,param3 in number,param4 in number) return number; function get_bonus(param1 in number,param2 in number,param3 in number) return number; function get_bonus(param1 in number,param2 in number)return number; end; '; dbms_output.put_line(DBMS_DDL.wrap(i_program)); end; /

create or replace package pack_bonus wrapped

a000000 369 abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd ab cd abcd 9 11d a6 o/obm0C7f2ty/o3UQRhkqAQzXJMwg5m49TOf9b9cFlpZ/0qul3LVYiu4dIvAmYHHywjS/l64 v7L0 v5v+mbI857h0wNIqw6XSXqWZgTLAsiX7mQRrmQSMmXXKNiGUrHGE5tZwcfb8VISUXiqz R7iBxy2L4Ka mlS9ZLQ==

PL/SQL procedure successfully completed.

还有一种稍微复杂点的方式,但是也是比较实用的。 定义了dbms_sql.varchar2a类型,可以支持每行32k

declare source_code DBMS_SQL.VARCHAR2A; wrap_code DBMS_SQL.VARCHAR2A; BEGIN SELECT 'create or replace package pack_bonus as function get_bonus(param1 in number,param2 in number,param3 in number,param4 in number) return number; function get_bonus(param1 in number,param2 in number,param3 in number) return number; function get_bonus(param1 in number,param2 in number)return number; end; ' bulk collect into source_code from dual ; wrap_code := SYS.DBMS_DDL.WRAP(ddl => source_code, lb => 1, ub => source_code.count);

FOR i IN 1 .. wrap_code.count LOOP DBMS_OUTPUT.put_line(wrap_code(i)); END LOOP; --直到这个地方,还没有开始尝试编译加密的代码,只是打印出来。 DBMS_DDL.create_wrapped(source_code,source_code.FIRST,source_code.LAST); --这个步骤是开始尝试编译加密后的代码 END; /

输出如下。 create or replace package pack_bonus wrapped

a000000 369 abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd ab cd abcd 9 11d a6 o/obm0C7f2ty/o3UQRhkqAQzXJMwg5m49TOf9b9cFlpZ/0qul3LVYiu4dIvAmYHHywjS/l64 v7L0 v5v+mbI857h0wNIqw6XSXqWZgTLAsiX7mQRrmQSMmXXKNiGUrHGE5tZwcfb8VISUXiqz R7iBxy2L4Ka mlS9ZLQ==

PL/SQL procedure successfully completed. 运行之后就可以看到有一个package对象就创建好了。

代码语言:javascript
复制
SQL> select object_name from user_objects where object_name='PACK_BONUS';
OBJECT_NAME
--------------------------------------------------------------------------------
PACK_BONUS  
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档