问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle 如何将存储过程的代码隐藏?

发布网友 发布时间:2022-04-09 19:46

我来回答

2个回答

懂视网 时间:2022-04-10 00:07

引言:平时大家在做项目的时候,经常会遇到把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路径

Oracle的oracle_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语句
技术分享

 

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

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存储过程加密

标签:grid   退出   aof   是什么   登录   har   语法错误   connected   测试   

热心网友 时间:2022-04-09 21:15

可以例用Oracle 自带的Wrap工具实现,此工具在$ORACLE_HOME/BIN目录下,具体如下
1、设置字符集环境变量
set NLS_LANG=CHINESE_CHINA.ZHS16GBK

2、创建一个存储过程文件
在E:\下创建test.sql文件,内容如下:
create or replace procere test1(i in number) as
begin
dbms_output.put_line(' 输入参数是'||to_char(i));
end;
3、加密
c:\> cd %ORACLE_HOME%\BIN
c:\>wrap iname=e:\test1.sql
PL/SQL Wrapper: Release 8.1.7.0.0 - Proction on Tue Nov 27 22:26:48 2001
Copyright (c) Oracle Corporation 1993, 2000.All Rights Reserved.
Processing test1.sql to test1.plb

4、运行test1.plb
sqlplus /nolog
SQL>conn TEST/TEST@db01
SQL> @e:\a.plb
过程已创建。

5、运行存储过程
SQL> set serveroutput on
SQL> execute test1(1);
输入参数是1
PL/SQL 过程已成功完成。

6、查看存储过程的代码
SQL> select name,text from all_source where type='PROCEDURE' and name='TEST1';

结果:看不到其原码追问首先感谢您的回答!我情况没大说明白,我用的是PL/SQL连接的数据库,大家共用了一个服务器上的数据库,如果我设置字符集环境变量,对其他人会有影响吗?我有一个需要每天都执行的存错过程写到了DBMS_JOBS里面,这个过程没有输入的参数,只有一些像日期时间之类的常量和表生成情况需要在过程中判断,符合时执行,如果我把存储过程加密,会不会影响自动执行?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
武汉民政职业学院地址在哪里 全国有哪些民政学院 武汉民政学院 北京哪些区较好 北京哪个区环境好 北京海淀区属于什么档次 北京市哪个区最好 北京哪个区房子最好 递延是什么意思通俗 婚后是不是一定要自己买房子才可以结婚呢? 二手房贷款年限与房龄 南传电视怎么投屏 有hdmi接口的电视机能用普通智能机投影吗 哪个牌子的妈妈文胸穿着舒适? 哺乳期的妈妈应该如何挑选哺乳胸罩? 我是13岁的女孩,妈妈要我穿文胸,我很不喜欢穿,我每次去学校就去厕所脱掉,请问这样可以吗? 为什么我妈跟老板去陪客户吃饭,穿着低胸装不穿内衣,还穿着皮裤? 电视机上VGA接口转为HDMl接口可用为手机投屏吗 女儿10岁,总是偷拿妈妈的胸罩和卫生护垫我该怎么办? 怀孕与哺乳是妈妈们的两大重要使命,哺乳期该怎么挑选内衣呢? 我爸爸出差竟然给妈妈买了几个胸罩,我都惊呆了,男人会买胸罩? 苦恼,每当我看到妈妈的胸罩和内裤我就会有反应,这正常还是不正常? 我二十了 就在刚刚 我妈妈在我面前换内衣 正常吗 我是13岁的女孩,妈妈要我穿文胸,我不喜欢穿,感觉穿起来很不舒服,我总是上学去厕所脱掉这样可以吗? 回老家期间在姑父的房间发现妈妈的胸罩,而且妈妈一直急着找。我该怀疑吗 这是我妈妈的内衣,大概罩杯是多大? 这是我妈的内衣裤,都晒晒你妈妈的内衣裤吧 - 信息提示 妈妈出门上班竟然没穿内衣,都凸点了,她出门我才发现? 蓝莓饮食禁忌有哪些 可以和牛奶一起吃吗 求《救猫咪——电影编剧宝典》全文免费下载百度网盘资源,谢谢~ 《救猫咪:电影编剧指南》pdf下载在线阅读全文,求百度网盘云资源 《救猫咪Ⅱ经典电影剧本探秘》pdf下载在线阅读,求百度网盘云资源 《救猫咪3:反击战》pdf下载在线阅读,求百度网盘云资源 《救猫咪:电影编剧宝典》电子书 如何判断一部电影是“鬼怪屋”类型的影片? 我想当一个电影编剧,请问我应该看什么类型的书籍 《救猫咪1》txt版本的有吗? 想写剧本,应该看哪方面的专业书籍学习? 救猫咪怎么样 《救猫咪——电影编剧宝典》pdf下载在线阅读全文,求百度网盘云资源 《救猫咪电影编剧宝典》epub下载在线阅读,求百度网盘云资源 求《救猫咪:电影编剧指南》全文免费下载百度网盘资源,谢谢~ 《救猫咪电影编剧宝典》epub下载在线阅读全文,求百度网盘云资源 《救猫咪3:反击战》epub下载在线阅读,求百度网盘云资源 《救猫咪Ⅱ经典电影剧本探秘》epub下载在线阅读,求百度网盘云资源 大金涂层和杜邦涂层哪个好 求 救猫咪三部曲电子版 当电影编剧是一种什么样的体验 大金涂层和麦饭石涂层哪个好