`

Oracle的存储过程加密

阅读更多

    Oracle的存储过程加密,顾名思义,就是对Oracle存储过程源码的加密,使得别人看不到你的源码,达到保护的目的,当然不是什么都是需要的,有的项目对安全性要求比较高的时候,就可能会用到,好了,废话不多说了,开始这部分的旅程吧。

    首先,Oracle提供了加密方式,--Wrap和DBMS_DDL,当然这两种不光是是对存储过程加密的,函数,包体,类型等都是可以加密的,在此只对存储过程的加密进行解释。

 

Wrap方式加密

1.用法:

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

wrap iname=input_file [ oname=output_file ]

以下两种方式是等价的,我的理解是你指定的文件中只要是SQL的statement就可以了,他会默认给一个sql的后缀

wrap iname=/mydir/myfile
wrap iname=/mydir/myfile.sql

其实这样写也是可以的,其实他只是加密一个SQL文件的,我们加密的确实存储过程,只是后缀不一样

wrap iname=/mydir/myfile.src

再看下他的输出。以下两种情况也是等价的。及时你不会指定输出文件是什么,他也会给你指定一个输出的文件,当然你也可以自己指定的,第二行就是和系统默认的指定的一样的。

wrap iname=/mydir/myfile
wrap iname=/mydir/myfile.sql oname=/mydir/myfile.plb

这样写也是可以的,他默认输出的是源文件的名称加上plb的后缀,如果你要执行输出的后缀名的话,也可以这样写,我理解是后缀由你指定的,当然只要加密之后的文件能被Oracle正确解析就好了

wrap iname=/mydir/myfile oname=/yourdir/yourfile.out

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

 

Wrap的限制:

        1.此方法对加密类似密码的东西,不是很安全。

        2.加密后的文件对于一般人来说,是比较安全的,但是对于专业人士来说,也是形同虚设的。

        3.不能加密触发器

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

        5.他是向上兼容的,依赖于Oracle的版本,比如是8.1.5的加密文件,可以在8.1.6的版本上跑,但是

         8.1.6版本的Oracle加密文件,在8.1.5上不一定能跑。

        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

Wrap的操作步骤:

    不管是在Linux下还是Oracle下,首先保证你能sqlplus的命令能正常运行,即:你的Oracle环境必须装好的,这个时候才可以使用。

Windows下你可以直接打开命令窗口,按照以上格式的输入即可。

wrap iname=wrap_test.sql

输入命令之后

PL/SQL Wrapper: Release 10.2.0.0.0 on Tue Apr 26 16:47:39 2005
Copyright (c) 1993, 2005, Oracle.  All rights reserved.
Processing wrap_test.sql to wrap_test.plb

如下图,我没有指定输出的文件名,这个时候他就会在我当前的目录下创建一个pro1.plb的文件。

 

打开之后可以看到:

 


 

用Plsql执行加密后的文件

 

SQL> @wrapped_file_name.plb;

 

打开之后就是加密后的,这个时候你只能看到存储过程名称



 

需要注意的是:当你的原始文件中含有注释的话,如果注释是以"--"开头的,也就是行注释,他在加密的时候会删除掉,如果是"/**/"类似C语言的注释的话,不会删除。

 

Notes:插入的时候是被PLSQL解析的,所以不能插入sqlplus的声明,

 

DBMS_DDL Subprograms方式加密

DBMS_DDL包含了加密存储过程,函数,类型说明,类型体,包说明,包体,此子程序提供了动态生成PLSQL单元的能力。其实内部就是一个WRAP函数和一个CREATE_WRAPPED存储过程。再加上一个异常处理的单元MALFORMED_WRAP_INPUT。

 

下面直接给个例子吧

 

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;
/

-- Invoke procedure from wrapped package
CALL emp_actions.raise_salary(120, 100);

 

当然调用DBMS_DDL.CREATE_WRAPPED的时候必须保证你的本地没有生命这样的存储过程,或者你在调用的时候要加上SYS.DBMS_DDL.WRAP or SYS.DBMS_DDL.CREATE_WRAPPED,这个时候就得有执行这两个存储过程的权限了。

 

加密完成之后,查询结果

SELECT text FROM USER_SOURCE WHERE name = 'EMP_ACTIONS';

 

TEXT
--------------------------------------------------------------------
PACKAGE emp_actions WRAPPED
a000000
1f
abcd
...

 

这样就成功加密了想要加密的东西。

 

DBMS_DDL Subprograms限制:

值得注意的是当你调用DBMS_SQL.PARSE这个函数去解析DBMS_DDL.WRAP这个加密的结果的时候,传入的文本超多了32767 bytes,你就必须设置LFFLG为FALSE,否则DBMS_SQL.PARSE这个解析的结果将是混乱的。

 

好了到此为止,我们的整个旅程就将结束了,东西说的不是很深,并且只是涉及到存储过程的加密,当然了,以此类推,如果你会了存储过程的加密方式,你也就会其他的加密了,知道这些已经够用了,毕竟不是每个项目都能用到此知识点。写的比较乱,主要是我防止日后再用到,能快速查出,备忘而已。

  • 大小: 20.6 KB
  • 大小: 46.8 KB
  • 大小: 91.4 KB
  • 大小: 96.1 KB
分享到:
评论

相关推荐

    oracle存储过程加密破解

    oracle存储过程加密破解 0

    oracle存储过程加密

    ### Oracle存储过程加密知识点 #### 一、Oracle存储过程与加密背景 在Oracle数据库中,存储过程是一种数据库对象,它可以包含一系列SQL语句和过程化SQL代码,用于执行复杂的业务逻辑。存储过程不仅可以提高应用...

    oracle存储过程unwrap解密工具.zip

    Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...

    oracle 存储过程加密的方法

    加密过程通常需要对数据库环境有一定的了解,并且需要具备执行SQL和PL/SQL语句的权限。 加密Oracle存储过程通常涉及以下步骤: 1. **设置NLS_LANG环境变量**: 在命令行中,你需要设置NLS_LANG环境变量来确保正确...

    Oracle 存储过程加密方法

    Oracle 存储过程加密方法是指将 Oracle 存储过程的源代码加密,以保护存储过程的 intellectual property 权益。这种方法可以防止未经授权的访问和修改存储过程的源代码。 在 Oracle 8i R2 中,Oracle 提供了一个名...

    Oracle 存储过程 实现加密

    ### Oracle存储过程实现加密 #### 一、引言 随着互联网技术的发展,信息安全问题日益凸显,特别是对于希望转型成为电子商务的企业来说,数据安全至关重要。在众多保护数据安全的方法中,加密技术扮演着不可或缺的...

    oracle 存储过程的加密

    Oracle 存储过程的加密是保护数据库中敏感信息和商业逻辑的重要手段,特别是当存储过程包含敏感算法或者商业秘密时。Oracle 提供了两种方法来加密存储过程:使用 `wrap` 工具和 `dbms_ddl` 包。 1. **wrap 工具** ...

    Oracle存储过程机密工具

    3. 应用特定的解密算法,这可能涉及到逆向工程Oracle的加密过程。 4. 恢复源代码,并可能进行格式化,使其可读性更强。 请注意,解密加密的存储过程可能会违反Oracle的许可协议,因此在进行此类操作前,必须确保你...

    windows中oracle存储过程加密的实例代码

    以下是一个详细的步骤来解释如何在Windows上加密Oracle存储过程。 1. **创建存储过程** 首先,我们需要创建一个存储过程。例如,创建一个名为`test_bf`的简单存储过程: ```sql CREATE OR REPLACE PROCEDURE ...

    oracle通过存储过程POST方式访问接口

    总的来说,"Oracle通过存储过程POST方式访问接口"涉及到数据库编程、网络通信和安全性等多个方面,需要综合运用PL/SQL和Oracle的网络工具。通过学习和实践,你可以构建出高效、安全的接口交互方案。

    加密Oracle存储过程.doc

    结果显示的不再是原始的PL/SQL代码,而是加密过的版本,这表明加密过程成功。 需要注意的是,Oracle的WRAP功能并不提供高级的安全性,只能防止非技术用户通过简单的查看源代码获取敏感信息。对于更高级的安全需求...

    如何使你的Oracle存储过程迅速加密

    在开始加密过程之前,必须设置正确的`NLS_LANG`环境变量来指定字符集。可以通过以下命令之一来设置该环境变量: - `D:\>set NLS_LANG=AMERICAN_AMERICA.USACII7` - `D:\>set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1...

    如何加密Oracle中的存储过程

    #### 知识点一:理解Oracle存储过程与加密的重要性 - **存储过程概述**:存储过程是在数据库中编写的SQL程序,它们被编译并存储在数据库服务器上,可以在应用程序中通过调用执行。由于它们在服务器端执行,可以提高...

    【数据安全】Oracle 透明数据加密(TDE) 完整操作手册

    - **创建钱包**:钱包是存储加密密钥的地方,可以通过ADMINISTER KEY MANAGEMENT SQL语句创建。 - **设置钱包位置**:在sqlnet.ora文件中使用ENCRYPTION_WALLET_LOCATION参数指定钱包位置,确保Oracle数据库能正确...

    ORACLE加密存储过程.doc

    在Oracle数据库中,为了保障数据的安全性和保护敏感的业务逻辑,有时我们需要对存储过程进行加密。这在多公司共享同一数据库服务器的场景中尤为重要,因为这样可以确保各公司的数据和服务独立性,同时允许必要的数据...

    Oracle自定义加密解密函数:数据安全合规·数据脱敏·加密存储高效解决方案

    1、加密强度升级: 使用 DES 加密标准,确保数据在传输过程中的安全性,有效防止数据被窃取或篡改,敏感数据做到脱敏。 2、数据脱敏:通过加密处理,针对敏感字段进行智能化脱敏处理,既保护了数据隐私,又不影响...

    Oracle实现MD5加密

    这不仅允许更加灵活地控制加密过程,还可以将加密功能集成到数据库的业务逻辑中,提高系统的整体安全性。以下是一个创建自定义MD5加密包的例子: ```sql CREATE OR REPLACE PACKAGE Test_MD5 AS FUNCTION FN_GetMD...

Global site tag (gtag.js) - Google Analytics