阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle存储过程加密之wrap工具PDF

152次阅读
没有评论

共计 5301 个字符,预计需要花费 14 分钟才能阅读完成。

引言:平时大家在做项目的时候,经常会遇到把 Oracle 存储过程带到项目现场来测试系统。这时如果想对自己的存储过程进行保密,不使别人看到源代码,就可以对已有的存储过程进行加密保护。顾名思义,就是对 Oracle 存储过程源码的加密。当然不是什么时候都需要的,当有的项目对安全性要求比较高的时候可以采用,下面我就用案例来介绍这种加密方式和实验结果。

实验环境

操作系统版本

Red Hat Enterprise Linux Server release 6.5 (Santiago)

数据库版本

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production

数据库实例名

shdb

wrap路径

Oracleoracle_home/bin 目录下有 wrap 命令.

/opt/oracle/product/11.2.0/db_1/bin/wrap

实验开始

1.创建一个 sql 文件,在 oracle 用户家目录下创建

[oracle@zxt28 ~]$ vim leonarding.sql

create or replace procedure leo(i in number)

as

begin

    dbms_output.put_line(‘input parameter: ‘||to_char(i));

end;

保存 & 退出

[oracle@zxt28 ~]$ ll

total 3664228

drwxr-xr-x 7 oracle oinstall       4096 Aug 27  2013 database

drwxr-xr-x 2 oracle oinstall      4096 Jan  7 15:46 Desktop

-rw-r–r– 1 oracle oinstall        128 Jan 14 16:49 leonarding.sql    已经生成

-rwxr-xr-x 1 root  root    1395582860 Oct 17  2013 p13390677_linux-x86-64_11gR2040_database_1of2.zip

-rwxr-xr-x 1 root  root    1151304589 Oct 17  2013 p13390677_linux-x86-64_11gR2040_database_2of2.zip

-rwxr-xr-x 1 root  root    1205251894 Oct 16  2013 p13390677_linux-x86-64_11gR2040_grid.zip

2.Wrap方式加密

用法:

        wrap的用法还是比较简单的,一个命令就可以实现加密,以下是命令的格式

wrap iname=input_file [oname=output_file]

iname:指定的是源文件

oname:指定的是转换后加密文件,oname选项可以省略如果省略 wrap 命令会自动生成文件名一模一样的加密文件,当然你也可以指定自己命名方式,如下所示

[oracle@zxt28 ~]$ wrap iname=leonarding.sql

PL/SQL Wrapper: Release 11.2.0.4.0- 64bit Production on Thu Jan 14 16:57:46 2016

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

Processing leonarding.sql to leonarding.plb    自动生成文件名一模一样的加密文件

[oracle@zxt28 ~]$ ll

total 3664232

drwxr-xr-x 7 oracle oinstall      4096 Aug 27  2013 database

drwxr-xr-x 2 oracle oinstall      4096 Jan  7 15:46 Desktop

-rw-r–r– 1 oracle oinstall        322 Jan 14 16:57 leonarding.plb

-rw-r–r– 1 oracle oinstall        128 Jan 14 16:49 leonarding.sql

此时文件 leonarding.plb 的内容就是加密状态,如下所示

[oracle@zxt28 ~]$ vim leonarding.plb

create or replace procedure leo wrapped

a000000

354

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

abcd

7

6f b6

nkxs9EzOsgeU6oDhPIYrMqr6O5cwg5nnm7+fMr2ywFyFodexpcOl0l6lmYEywLIlw4/AdCuP

wMAyW55SPqmpbbcguDSqEVpnEeMcL8b4MJK+J00Xi5SJpxaOFG9si+inGm+ko88RnCMuLuOq

NAMHC8hAsOjoDeGcCk+ZyF0G4Kam2x0svw==

自己指定加密文件命名

[oracle@zxt28 ~]$ rm leonarding.plb

[oracle@zxt28 ~]$ wrap iname=leonarding.sql oname=leo.plb

PL/SQL Wrapper: Release 11.2.0.4.0- 64bit Production on Thu Jan 14 16:59:58 2016

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

Processing leonarding.sql to leo.plb

[oracle@zxt28 ~]$ ll

total 3664232

drwxr-xr-x 7 oracle oinstall      4096 Aug 27  2013 database

drwxr-xr-x 2 oracle oinstall      4096 Jan  7 15:46 Desktop

-rw-r–r– 1 oracle oinstall        128 Jan 14 16:49 leonarding.sql

-rw-r–r– 1 oracle oinstall        322 Jan 14 16:59 leo.plb

它默认输出是源文件名称加上 plb 后缀,如果你要自己指定后缀名的话,也可以这样写,wrap iname=leonarding.sql oname=leo.out,当然只要加密之后的文件能被 Oracle 正确解析就好了。linux是没有扩展名概念的。

notes:如果你拿一个已经加密过的 sql 文件,再次去用命令加密的话,得到的文件实际上和原来的是一样的,自己可以尝试下。

3.编译加密后的 leo.plb 存储过程

[oracle@zxt28 ~]$ sqlplus shdb/shdb                                 登录数据库

SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 14 17:24:18 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SHDB@shdb> @/home/oracle/leo.plb                                编译存储过程

Procedure created.

4.运行存储过程leo

SHDB@shdb> set serveroutput on;

SHDB@shdb> exec leo(100);

input parameter: 100

PL/SQL procedure successfully completed.

SHDB@shdb> exec leo(200);

input parameter: 200

PL/SQL procedure successfully completed.

PL/SQL Developer中也是加密状态,只能看到存储过程名称,看不到 SQL 语句
Oracle 存储过程加密之 wrap 工具 PDF

 

我们从数据字典中看看,也是看不到内容的对不!因此现在我们就可以大大方方的使用我们的存储过程了。避免了信息丢失风险。并且这个过程是不可逆的。

SQL> select name,text from user_source where type=’PROCEDURE’ and name=’LEO’;

NAME                          TEXT

—————————— ————

LEO                            procedure leo wrapped

                              a000000

                              354

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                              abcd

                               abcd

                              7

                              6c b2

                              qZ+TDoB6646qjalBmMEknutFrC4wg5nnm7+fMr2ywFyFodexpcOl0l6lmYEywLIlw4/AdCuP

                              wMAyW55SPqmpbbcguDSqEVpnEeMcL8b4MJK+J00Xi5SJpxaOFG9si+inGm+TPk2xd0bOxtoS

                              VzneMCcno8e+kr5U1bhSUn+mpn8cdlA=

PL/SQL Developer测试

SQL> exec leo(888);

input parameter: 888

PL/SQL procedure successfully completed

依旧那么的顺畅,依旧那么的干爽!!

 

小结

到此我们完全演绎了 Oracle 存储过程 wrap 工具加密方法,其实 Oracle 还提供了 DBMS_DDL Subprograms 加密方法,DBMS_DDL包含了加密存储过程,函数,类型说明,类型体,包说明,包体,此子程序提供了动态生成 PL/SQL 单元的能力。其实内部就是一个 WRAP 函数和一个 CREATE_WRAPPED 存储过程。再加上一个异常处理的单元MALFORMED_WRAP_INPUT

下面我们给出一些 wrap 工具注意事项

wrap的限制:

        1.此方法不能对存储过程名进行加密。

        2.不能加密触发器。

        4.加密的过程中,是不会检查你的语法错误的,在编译的时候会检查。

        5.他是向上兼容的,依赖于 Oracle 的版本,10g的可以在 11g 上跑,11g不可以在 10g 上跑,因为两个用的不是一套加密算法

        6.只能加密如下类型,不能加密匿名块

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

Oracle 存储过程加密之 wrap 工具 PDF 到 Linux 公社资源站下载:

—————————————— 分割线 ——————————————

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2017 年资料 / 1 月 /16 日 /Oracle 存储过程加密之 wrap 工具 PDF/

下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

—————————————— 分割线 ——————————————

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139617.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5301字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中