loading

오라클 DB 데이터 암호화

2014. 4. 15. 08:36
728x90
반응형

오라클 DB 데이터 암호화


오라클이 자체적으로 제공하는 암호화 기능을 사용하여 데이터를 암호화하는 방법

(DBMS_OBFUSCATION_TOOLKIT을 이용)


1. sys 계정으로 아래 스크립트 실행


SQL> @$ORACLE_HOME/rdbms/admin/dbmsobtk.sql

Library created.

Package created.

Synonym created.

Grant succeeded.



SQL> @$ORACLE_HOME/rdbms/admin/prvtobtk.plb

Package created.

Package body created.

No errors.

Package body created.

No errors.




2. 권한 부여


암호화 사용을 전체 계정이 사용할 수 있도록 하려면 

SQL> GRANT execute ON dbms_obfuscation_toolkit TO public



특정 계정이 사용하려면 아래와 같이 권한을 부여한다.(basic 계정에게만 부여한다면..)

SQL> GRANT execute ON dbms_obfuscation_toolkit TO basic;




3. 패키지 생성

CREATE OR REPLACE PACKAGE BODY BASIC.CRYPTgen

IS


FUNCTION FN_COM_ENCRYPT(str VARCHAR2) return VARCHAR2

IS


  key_string           VARCHAR2(19) := 'abcd1234';   -- 암호화키

 

  raw_input           RAW(128);

  raw_key             RAW(128) := UTL_RAW.CAST_TO_RAW(key_string);

  encrypted_raw       RAW(2048);


BEGIN

  raw_input := UTL_RAW.CAST_TO_RAW(RPAD(str,FLOOR((LENGTHB(str)/8+.9))*8)); 

  dbms_obfuscation_toolkit.DES3Encrypt(                        -- DES3 암호화 사용

    input => raw_input, 

    key => raw_key, 

    encrypted_data => encrypted_raw );

  -- dbms_output.put_line('> encrypted hex value : ' || rawtohex(encrypted_raw));

  


RETURN rawtohex(encrypted_raw); 

EXCEPTION

  WHEN error_in_input_buffer_length THEN

        dbms_output.put_line('> ' || INPUT_BUFFER_LENGTH_ERR_MSG);

END ;



FUNCTION FN_COM_DECRYPT(str VARCHAR2) return VARCHAR2

IS


  key_string          VARCHAR2(19) := 'abcd1234';   -- 암호화키


  raw_input           RAW(128) ;

  raw_key             RAW(128) := UTL_RAW.CAST_TO_RAW(key_string);

  encrypted_raw       RAW(2048);

  decrypted_raw       RAW(2048);


BEGIN  

  encrypted_raw := hextoraw(str);

  dbms_obfuscation_toolkit.DES3Decrypt(                        -- DES3 복호화 사용

    input => encrypted_raw, 

    key => raw_key, 

    decrypted_data => decrypted_raw );

  -- dbms_output.put_line('> decrypted varchar2 value : ' || UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw);

  

RETURN UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw); 

EXCEPTION

  WHEN error_in_input_buffer_length THEN

        dbms_output.put_line('> ' || INPUT_BUFFER_LENGTH_ERR_MSG);

END ;


END;






728x90

또루아빠 SQL(오라클,mysql) , , ,