본문 바로가기
DATABASE/DB study

oracle Encrypt(DigestSHA256) - 1

by 개폰지밥 2019. 2. 21.
반응형

DB인 오라클의 주 목적인 데이터베이스에 내용을 저장하는 것이다. 하지만 오라클의 확장 기능을 이용하여 DB에 저장된 내용을 암호화 할 수 있다. 

데이터베이스(Oracle11g) 확장 기능을 이용해 암호화(DigestSHA256) 해보자. 

오라클을 암호화 하는 방법으로는 크게 

1) 암호화를 하기 위해 만들어진 Plug-in 모듈을 이용한 암호화

2) 자바 소스 DigestSHA256를 이용한 암호화가 있다.

여기서는 자바 소스 DigestSHA256를 이용한 암호화에 대해서 다뤄보겠다.


오라클의 확장 기능인 자바 소스(DigestSHA256)를 이용해서 암호화하기 위해서는 아래와 같은 절차가 필요하다.

1)   ORACLE 권한 획득(부여)

확장 기능을 사용할 수 있는 권한을 획득(부여) 해야 한다.

2)   클래스 만들기

자바의 JVM에 함수를 실행하려면 .class파일로 되어있어야 한다. .class 파일로 만드는 방법 크게 2가지가 있다.

1.     c언어 등 다른 언어로 된 JNI을 이용하여 호출하고 loadjava를 통해 load한다. 

2.     CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED~ 문으로 오라클 내장 자바 클래스 만들기

3)   사용자 함수 생성

자바 클래스 내부 함수를 호출하여 오라클 함수를 생성하는 방법에는 크게 2가지가 있다.

1.     만들어진 패키지(.sql)“@”를 이용하여 sql파일에 저장된 쿼리문을 실행하기

2.     CREATE OR REPLACE FUNCTION ~문으로 오라클 함수 생성하기


먼저 ORACLE 권한 획득 하는 방법이다.

1. ORACLE 권한 seq 확인

 select seq, kind, grantee, name, enabled  from dba_java_policy where name like '%java.lang.RuntimePermission%';

ð  java.lang.RuntimePermission#loadLibrary.*seq95라는 것을 확인할 수 있다.

oracle의 11g는 보통 95이다.

2. ORACLE 권한 설정

 exec dbms_java.disable_permission(95);

exec dbms_java.grant_permission

(‘계정명’, ‘SYS:java.lang.RuntimePermission’, ‘loadLibrary.MagicDBJni’, ‘’);

exec dbms_java.enable_permission(95);

오라클에서 Java를 이용한 Function 만들기

1)     자바 소스를 이용해서 오라클 내장 자바 클래스 만들기

CREATE OR REPLACE and RESOLVE JAVA SOURCE NAMED “ClassName” as

as 이후엔 자바 소스가 따라오면 된다. 그리고 자바 프로그램이 끝난 다음에 내장객체 생성을 지시하는 “/”를 붙여주면 된다.

2)     만들어진 자바 객체를 이용해서 오라클 함수 선언하기

CREATE OR REPLACE FUNCTION FunctionName(parameter) return DataType as LANGUAGE JAVA NAME ‘class.method(param) return DataType’

3)     생성된 오라클 함수를 사용한다.

위와 같은 과정을 거쳐서 만들어진 자바 기반의 함수는 이젠 오라클의 내장함수와 그 사용방법이 동일하다. 그러므로 DML에서 자유롭게 사용할 수 있다.

MessageDigest

MessageDigest 클래스는, 어플리케이션에 SHA-1 SHA-256 등의 메세지 다이제스트 알고리즘의 기능을 제공한다. 메시지 다이제스트는 임의의 크기의 데이터를 취하여 고정 길이 해시 값을 출력하는 안전한 일방향 해시 함수이다.

MessageDigest 객체가 초기화되기 시작하면 데이터는 업데이트 메소드를 사용하여 처리한다. 
어느 시점에서든 재설정을 호출하여 다이제스트를 재설정 할 수 있다. 
업데이트 할 모든 데이터가 업데이트되면 해시 계산을 완료하기 위해 다이제스트 메소드 중 하나를 호출해야 한다.

MessageDigest md = MessageDigest.getInstance("SHA-256")

 try {
     md.update(toChapter1);
     MessageDigest tc1 = md.clone();
     byte[] toChapter1Digest = tc1.digest();
     md.update(toChapter2);
     ...etc.
 } catch (CloneNotSupportedException cnse) {
     throw new DigestException("couldn't make digest of partial content");
 }
Java 플랫폼의 모든 구현은, 다음의 표준 MessageDigest 알고리즘을 지원 한다.
l  MD5
l  SHA-1

l  SHA-256

오늘은 오라클 확장기능을 이용해 암호화 하기 위한 기초지식들을 배워보았다. 다음에 기초지식을 이용하여 DB 암호화를 해보자!


반응형

댓글