ORACLE 암호화 프로그램(내공MAX)

ORACLE 암호화 프로그램(내공MAX)

작성일 2010.05.07댓글 2건
    게시물 수정 , 삭제는 로그인 필요

안녕하십니까. 현제 모 기업에서 프로젝트수행중인 프로그래머입니다.

 

이번 프로젝트 고객사에서 DB에저장되는 특정 칼럼의 data를 암호화하여 저장해달라는 요청이

 

있어서 이렇게 질문드립니다.

 

예를 들어 table TestTable의 칼럼이 a,b,c,d 있다고 가정하에 a,b칼럼은 정상적으로 저장이되고

c,d 칼럼은 암호화된상태로 저장이 되도록 해달라는 요청입니다.

 

요지는 select * from TestTable 하면

 

a b c d

--------------------------

1 2 *** ***

5 6*** ***

 

이렇게 조회가 되어야 된다는 겁니다. 물론 orange나 여타 tool에서 직접 접근 했을때도 마찬가지구요..

 

하지만 시스템 상에서 조회프로그램을 통하여 조회를 했을때는

 

a b c d

----------------------------

1 2 3 4

5 6 7 8

이렇게 조회가 되어야 합니다. 즉 복호화가 되어야 한다는 거죠..

 

현재 시스템 구성을 말씀드리면

오라클 db에 자바랭귀지, 톰캣서버,스프링 프레임웍입니다.

 

자바단에서 시원~하게 해결할수 있는 방법이 있는지 알고싶구요 그게 안된다면..

검색해보니 dbms_obfuscation_toolkit 를 사용하는 예제들이 많던데 이 프로시저를 사용하면

문제가 해결되는지도 알고싶습니다.

 

최초 스크립트 실행하고 함수 만들어놓고 그 함수 호출하는 방식인것 같던데...이경우 프로그램 실행할때마다 위 과정을 반복해야 하는지 아니면 함수까지는 최초 한번 SYS계정으로 만들어놓고 업무개발단에서는

단순히 함수 호출만 하는 식으로 사용이 가능한것인지도 알고싶습니다.

 

최종적으로 정리하면 제가 원하는것은 다음두가지입니다.

1.오렌지에서 직접셀렉트하면 특정칼럼만 ***로 나올것

2.UI 화면 프로그램을 통한 트랜잭션 처리시에는 실제 값이정상적으로 나올것..

 

이두문제만 해결되면 됩니다.. 그럼 알찬 답변 기다리겠습니다 주말잘보내셔요^^ 


#oracle 암호화 #oracle 암호화 패키지 #oracle 암호화 컬럼 확인 #oracle 암호화 알고리즘 확인 #oracle 암호화 설정 #oracle sha256 암호화 #oracle tde 암호화 #oracle aes256 암호화 #oracle tde 암호화 확인 #oracle 수정 암호화 항목 없음

profile_image 익명 작성일 -

간단하게 오라클에서 지원하는 암호화를 이용한 예제를 만들었습니다.

참고하시고 응용해보세요

SELECT sname,scode

       /* 복호화 */
      ,utl_i18n.raw_to_char(sname,'AL32UTF8') d_sName
      ,utl_i18n.raw_to_char(scode,'AL32UTF8') d_sCode
FROM  (

        /* 암호화 */
        SELECT utl_i18n.string_to_raw('홍길동','AL32UTF8') sname
              ,utl_i18n.string_to_raw('123456','AL32UTF8') scode
        FROM dual
      )
;

profile_image 익명 작성일 -

제가 잘 이해를 했는지 모르겠지만...
다시한번 정리하자면
암호화된 데이터 부분이 패스워드 필드처럼 일련의 문자로 *** 처럼 나온다는 건데...
이건 상식적으로 이해하기가 곤란한 부분이라고 할수가 있겠네요...
실제적으로 어떠한 어플에서 패스워드 필드처럼 보여주는 것은 보여주는 것만 그렇게 보이지 실제 값들은
모두 가지고 있는것들인데 서버쪽에서 생각해도 이상하고 클라이언트 쪽에서 생각해도 뭔가 말이 안돼는 상황인듯 싶습니다. (물론 제가 틀리길 바랍니다..ㅎㅎ)
서버쪽에서 생각하자면 서버가 저장을 할때 이 데이터는 보여지면 안되기 때문에 select 문을 때렸을때
일련의 *(asterisk)로 보여야 한다 라고 한다면 실제 테이블을 구성할때 테이블과 권한을 쪼개서 특정 테이블에는 특정한 권한이 아니면 접근을 못하게 만드는게 오히려 상용의 수단이라고 보여지고... 저렇게 보여진다고 해도 뭔가 말이 안돼는것 같고...;;
클라이언트 역시 마찬가지로 내가 만든(즉 누군가 특정용도로 만든 ) 클라이언트라면 지정을 해서 diplay 시킬때 일련의 문자로 채워주겠지만 ... 범용적으로 쓰이는 sql plus나 orange에서 그렇게 보이려면
서버단에서 일련의 문자로 보여준다는 소리인데 위와 똑같지만 그렇게 하느니 그냥 안보여주고 말지가 되겠죠...;; (실제 저렇게 될려면 오라클을 뜯어 고치던 이세상의 오라클 접속용 클라이언트들을 몽땅 뜯어 고치던 해야 하는 이상한 상황이 될런지도...)

일련의 문자(일련의 *표)로 저렇게 보이는것이 아니라면 가능한 방법은 세가지 인데요...
DB단에서 데이터를 암호화 시켜주는 방법이 하나이고 자바단에서 암호화 시켜주는 방법이 두번째군요...
그리고 가장 DB적인 방법은 역시나 보여져선 안되는 부분은 테이블을 쪼개서 권한을 걸어놓고
그 권한 이하의 유저에게 안보이도록 숨기는것 정도겠죠...

첫번째에 대한 논의는 다음 URL에서 찾을수 있군요...
http://www.oracle.com/technology/oramag/oracle/05-jan/o15security.html
뭐 저도 오라클을 그닥 많이 쓰는 편은 아니지만 이런 저런 이슈들을 봐도 보안적인 측면에서는 오히려
유저 및 스키마 관리와 그에 따른 적절한 접근 권한(너무 DBA적 발상인지는 모르겠으나...)을 설계하는 것이 무턱대고 암호화 하는것보다 간단하고 안전할듯 싶습니다만...

두번째 자바를 이용하는 방법은 자바에서 직접 데이터를 암호화 시켜서 DB서버에 insert 해야겠죠...
그렇게 된다면 select 했을 때의 모습은 다음과 비슷할 겁니다.

위에 님이 설명한 대로 결과를 보면 아마 이렇게 나오겠지요
a  b   c    d
-------------------------------
1 2   셭꺝꺝캌캌 흫흫햫햫
3 4   머핳핳핱캍탘 랗햫럏썋

즉 그냥 select 문을 넣는다 했을때 글자는 깨져 보여서 실제 무슨 데이터인지 알수가 없죠..
그리고 이 데이터는 어플에서 직접 읽어와서 그 안에서 복호화 시켜주면 되는거죠...
결국 암복호화에 따른 로드는 어플에게만 전담되고요...;;
암복호화 방법은 대칭키를 쓰느냐 비대칭키를 쓰느냐에 따라 또 나뉠테고요..(실제 네트워크 프로그래밍과 관련이 없다면 비대칭 암호화를 쓰진 않겠지만 그렇게 되면 어차피 키 관리가 또 엉성해지는 ...;;)

자바 암호화에 대해서는 여기다가 기술적인 내용을 detail하게 쓰기는 애매한듯하고 ...
암복호화에 대해 전혀 모르신다면 책을 한권 보시는것이 괜찮으실 테고 (java security 와 같은...)
어지간히 암복호화에 대해 아신다면 java.security 패키지나 javax.crypto 패키지 따위의 암호화 관련 패키지에 대한 샘플 코드만 가지고도 충분히 해내실수 있을것 같습니다.

세번째의 경우
위와 같은 경우 보여줄것도 아닌 데이터를 어거지로 ***** 이런 식으로 혹은 깨져있는 데이터로 보여야 한다는 사고방식인데 ...;; 어차피 보여줄것도 아니라면 과감히 테이블을 쪼개서 아예 sql plus이건 orange이건 관리자 빼고 안보이도록 테이블을 설계하는게 가장 이성적이고 합리적(?) 이라고 생각이 드네요...;;오히려 이런식으로 설계할 경우 쓸데없이 암복호화 하는 로드도 없고...;; 어플에서만 그 권한을 습득할수 있도록 프로그래밍 하면 될듯한데요...흠...;; (뭐 사정이 있어서 저런 식으로 구현해야 한다면 할수 없겠지만요...;;)

무튼 성공적으로 프로젝트 마치시길...

ORACLE 암호화 프로그램(내공MAX)

... http://www.oracle.com/technology/oramag/oracle/05-jan/o15security.html 뭐 저도 오라클을 그닥 많이 쓰는 편은 아니지만 이런 저런 이슈들을 봐도 보안적인 측면에서는 오히려 유저 및...