oracle 加密

Wrap方式加密

a69172dd-7196-35d3-819c-c014d52b60bb.jpg

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

DBMS_DDL Subprograms方式加密

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

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

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

DBMS_DDL Subprograms限制:

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

转载于:https://my.oschina.net/u/3879049/blog/3046976

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值