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

oracle 如何将存储过程的代码隐藏起来不让别人看到?RT,现在所有人用DBA_SOURCE或者ALL_SOURCE都可以看到,如何让别人看不到?有没有将存储过程设置成私有,不允许别人访问、查看的功能?
我电脑上装了一个ORACLE精简版,当我从CMD运行的时候:
C:\ora90\BIN>wrap iname=D:\Oracle\ooo\XQ_AUTO_AUTO_PCDR.sql
'wrap' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
最新回答
暖风吹

2024-09-05 00:45:37

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

2、创建一个存储过程文件
在E:\下创建test.sql文件,内容如下:
create or replace procedure 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 - Production 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里面,这个过程没有输入的参数,只有一些像日期时间之类的常量和表生成情况需要在过程中判断,符合时执行,如果我把存储过程加密,会不会影响自动执行?