본문 바로가기
DATABASE/DB study

BLOB data create & Encryption/Decryption

by 개폰지밥 2020. 1. 17.
반응형

LOB이란?

LOB:대용량 데이터를 처리하기 위해 Oracle 8i부터 대용량 데이터를 저장하기 위한 LOB(Large Object) 타입

  • [1] LOB 데이터 타입의 네 가지 종류

종류

파일

저장방식

BLOB

Internal

바이너리 데이터 저장 (최대 4G 저장)
컴퓨터가 인식하는 모든 파일 기록 예)음석,화상,이미지등

CLOB

Internal

Single-byte character data 저장(최대 4G 저장)
텍스트 데이터 저장

NCLOB

Internal

Multi-byte character data 저장(최대 4G 저장)
NCHAR data
와 같은 national character set(9i 이상 유니코드) 저장

BFILE

External(OS)

OS 파일에 저장된 데이터의 포인터 저장 (최대 4G 저장)
READ ONLY

출처: http://www.gurubee.net/lecture/2768

 

BLOB 테이블은 이미지등을 저장하는 것인데 데이터베이스에 어떻게 저장이 될까?

16진수 핵사 코드로 저장된다.

만약 HELLO를 BLOB 컬럼에 저장하고 싶으면 16진수 핵사 코드로 변환하여 저장하면 된다.

변환방법은 아래와 같다.

 

UTL_RAW.CAST_TO_RAW   /* 한글을 16진수 핵사 코드로 변환 */

UTL_RAW.CAST_TO_VARCHAR2  /* 16진수 핵사를 한글로 변환 */

새로 생성한 함수에도 위의 함수를 적용할 수 있다. 예를 들어 암복호화 할 수 있는 함수가 있다고 가정하면 아래와 같이 암호화 복호화를 적용할 수 있다.

암호화

복호화

 

 

본격적인 BLOB 데이터 저장하기

참조: https://m.blog.naver.com/PostView.nhn?blogId=oasis1570&logNo=40131668077&categoryNo=77&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

BLOB 데이터 저장할 이미지 준비

BLOB 데이터를 저장하기 위해서는 저장할 데이터인 이미지(혹은 다른것들)이 먼저 있어야 한다.

C:\RESEARCH_DATA 밑에 저장할 BLOB 데이터인 spongebob.jpg를 저장해준다.

 

프로시저 생성

BLOB 데이터를 생성하기 위해서는 프로시저를 만들어야 한다.

-- 테스트 테이블 생성

CREATE TABLE TBL_SAWON_BLOB

(SANO NUMBER

,PHOTO    BLOB

,SANAME VARCHAR2(20)

,JIK    VARCHAR2(10)

,SAL    NUMBER

);

 

-- 1. 디렉토리 생성

CREATE OR REPLACE DIRECTORY DIR_BLOB

AS 'C:\RESEARCH_DATA';

 

-- 2. 프로시저 인서트

CREATE OR REPLACE PROCEDURE PCD_BLOB_INSERT

(V_SANO     TBL_SAWON_BLOB.SANO%TYPE

,V_PHOTOFILENAME    VARCHAR2

,V_SANAME   TBL_SAWON_BLOB.SANAME%TYPE

,V_JIK      TBL_SAWON_BLOB.JIK%TYPE

,V_SAL      TBL_SAWON_BLOB.SAL%TYPE

)

IS

    V_LOCATOR     BLOB;

    V_SOURCE_BFILE BFILE := BFILENAME('DIR_BLOB',V_PHOTOFILENAME);

        V_DEST_OFFSET NUMBER := 1;

    V_SRC_OFFSET NUMBER := 1;

BEGIN

    INSERT INTO TBL_SAWON_BLOB

    VALUES(V_SANO,EMPTY_BLOB(),V_SANAME, V_JIK, V_SAL)

      RETURNING PHOTO INTO V_LOCATOR; 

     

      DBMS_LOB.OPEN(V_SOURCE_BFILE, DBMS_LOB.LOB_READONLY ); DBMS_LOB.LOADBLOBFROMFILE

      (

         V_LOCATOR

        ,V_SOURCE_BFILE

        ,DBMS_LOB.GETLENGTH(V_SOURCE_BFILE)

        ,V_DEST_OFFSET

        ,V_SRC_OFFSET

      );  

      DBMS_LOB.CLOSE(V_SOURCE_BFILE);

      COMMIT;

         DBMS_OUTPUT.PUT_LINE('BLOB 타입의 테이터 저장 성공'); EXCEPTION

        WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('BLOB 타입의 테이터 저장 실패'); 

END;

 

--프로시저 실행명령어

EXEC PCD_BLOB_INSERT(1,'spongebob.jpg','김김김','사원',99); 

 

-- tbl_sawon_blob 테이블이 잘 생성되었는지 확인

select * from tbl_sawon_blob;

BLOB 데이터 생성 결과

BLOB 데이터 내용 보기

저장한 spongebob.jpg의 데이터를 알고 싶은데 그냥 BLOB 형식이라고만 나온다. BLOB 형식의 데이터를 보고 싶을 때는?

BLOB과 같은 LOB 타입은 일반적인 select문으로는 볼 수 없기 때문에 오라클의 시스템함수를 사용하여 볼 수 있다.

 

- DBMS_LOB.SUBSTR(CLOB형 컬럼명, 자를 문자열 길이, OFFSET)

select dbms_lob.substr(photo,1000,1) from TBL_SAWON_BLOB;

BLOB 컬럼의 데이터의 총 길이

- DBMS_LOB.GETLENGTH(컬럼명)

 

위와 동일하게 이미 만들어진 암복호화 함수를 이용하여 이미지도 암호화 할 수 있다.

<암호화 전>

<암호화>

<복호화>

<암호화 업데이트>

<암호화 업데이트 후 결과>

<복호화 업데이트>

<복호화 업데이트 결과>

 

- 끝 -

 

반응형

'DATABASE > DB study' 카테고리의 다른 글

Database package  (0) 2020.03.16
merge, insert, alter, delete  (0) 2020.03.12
DB Constraints (NOT NULL, UNIQUE, primary key, foreign key)  (0) 2019.11.21
DB function procedure package  (0) 2019.11.07
Transaction  (0) 2019.10.10

댓글