oracle 加密

Wrap方式加密安全

Wrap的限制:app

        1.此方法對加密相似密碼的東西,不是很安全。函數

        2.加密後的文件對於通常人來講,是比較安全的,可是對於專業人士來講,也是形同虛設的。加密

        3.不能加密觸發器spa

        4.加密的過程當中,是不會檢查你的語法錯誤的,只是在編譯的時候會檢查code

        5.他是向上兼容的,依賴於Oracle的版本,好比是8.1.5的加密文件,能夠在8.1.6的版本上跑,可是blog

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

        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。function

固然調用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這個解析的結果將是混亂的

相關文章
相關標籤/搜索