본문 바로가기
💻 개발과 자동화

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(컬럼명)

 

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

<암호화 전>

<암호화>

<복호화>

<암호화 업데이트>

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

<복호화 업데이트>

<복호화 업데이트 결과>

 

- 끝 -

 

반응형

'💻 개발과 자동화' 카테고리의 다른 글

CentOS7 putty Connect Error  (2) 2020.02.11
Servlet JDBC  (1) 2020.01.20
[윈도우 10] 외장 ODD로 CD 굽는 방법 (별도 프로그램 없이!)  (1) 2020.01.13
Servlet Programming  (0) 2020.01.09
Web programming  (0) 2020.01.03

댓글