데이터 보안의 중요성
데이터 보안은 현대 IT 환경에서 빼놓을 수 없는 요소입니다. 특히, 민감한 정보를 다루는 데이터베이스에서는 암호화가 필수인데요. 이번 글에서는 Oracle 8i Release 2 (8.1.6) 버전부터 제공된 DBMS_OBFUSCATION_TOOLKIT을 활용해 데이터 암호화 및 복호화를 구현하는 방법에 대해 알아보겠습니다. 더 이상 3rd party 솔루션에 의존할 필요 없이, 오라클 자체 기능을 이용해 간단하게 보안을 강화할 수 있습니다.
DBMS_OBFUSCATION_TOOLKIT이란?
Oracle 8.1.6부터 도입된 DBMS_OBFUSCATION_TOOLKIT은 데이터베이스에 저장된 민감한 정보를 암호화하여 보호할 수 있게 도와주는 도구입니다. 예를 들어, 신용카드 번호나 패스워드 같은 데이터를 암호화하여 안전하게 저장할 수 있습니다. 예전에는 이런 기능을 위해 외부 솔루션을 사용해야 했지만, 이제는 Oracle에서 자체 제공하는 이 기능으로 데이터 보안을 보다 쉽게 구현할 수 있습니다.
설치 방법
설치 방법도 아주 간단합니다. 다음과 같이 두 가지 파일을 실행하고, 패키지 사용 권한만 부여하면 준비가 완료됩니다.
- SYS 계정으로 접속한 후 dbmsobtk.sql과 prvtobtk.plb를 순서대로 실행.
- GRANT EXECUTE ON DBMS_OBFUSCATION_TOOLKIT TO PUBLIC; 명령어로 권한 부여.
이후 간단한 설정을 통해 원하는 데이터를 암호화하거나 복호화할 수 있습니다.
DES(Data Encryption Standard) 알고리즘
이 패키지는 DES(Data Encryption Standard) 알고리즘을 사용하여 데이터를 암호화합니다. DES는 64비트 데이터를 8바이트 블록 단위로 암호화하며, 복호화 시에도 동일한 패스워드를 사용합니다. 즉, 입력된 데이터를 암호화한 후, 나중에 동일한 키로 복호화할 수 있다는 것이죠. 이 알고리즘은 현재 DBMS_OBFUSCATION_TOOLKIT에서 기본적으로 지원됩니다.
DBMS_OBFUSCATION_TOOLKIT 사용 시 제약사항
DBMS_OBFUSCATION_TOOLKIT은 매우 유용하지만, 몇 가지 제약사항이 있습니다.
- DES 알고리즘만을 사용하며, 56비트 키로 암호화합니다.
- Double encryption은 지원하지 않으며, 암호화된 데이터를 다시 암호화하려고 하면 ORA-28233 오류가 발생합니다.
- 암호화하려는 데이터는 반드시 8바이트 배수여야 합니다. 그렇지 않으면 ORA-28232 오류가 발생합니다.
이러한 제약사항은 Oracle의 버전 업그레이드에 따라 점차 개선될 예정이지만, 현재 사용 시에는 CPU 자원을 많이 사용하므로 계획을 잘 세워야 합니다.
자주 발생하는 ORACLE 오류
DBMS_OBFUSCATION_TOOLKIT을 사용할 때 자주 마주할 수 있는 오류 메시지 몇 가지를 정리해보았습니다.
- ORA-28231: 입력 데이터나 키값이 NULL일 때 발생.
- ORA-28232: 입력 데이터가 8바이트 배수가 아닐 때 발생.
- ORA-28233: 암호화된 데이터를 다시 암호화하려고 할 때 발생.
예제: 실제 사용 예시
실제 데이터를 암호화하고 복호화하는 방법을 예제로 보여드리겠습니다. 이 예제를 통해 DBMS_OBFUSCATION_TOOLKIT의 기본적인 사용 방법을 쉽게 이해할 수 있습니다.
1. 암호화/복호화 함수 생성:
CREATE OR REPLACE PACKAGE CryptString AS
FUNCTION encrypt(Str VARCHAR2, hash VARCHAR2)
RETURN VARCHAR2;
FUNCTION decrypt(xCrypt VARCHAR2, hash VARCHAR2)
RETURN VARCHAR2;
END CryptString;
DROP TABLE encrypt_table;
CREATE TABLE encrypt_table(id NUMBER, passwd VARCHAR2(50));
INSERT INTO encrypt_table VALUES(1, CryptString.encrypt('tigerofkorea', 'encrypt1'));
INSERT INTO encrypt_table VALUES(2, CryptString.encrypt('tigerofkorea', 'encrypt2'));
SELECT
id
, CryptString.decrypt(passwd, 'encrypt1') passwd
FROM encrypt_table
WHERE CryptString.decrypt(passwd, 'encrypt1') = 'tigerofkorea';
위 예제처럼, 데이터를 암호화하여 안전하게 저장하고 필요할 때 복호화하여 사용할 수 있습니다. 간단하지만 강력한 보안 방법이죠.
'※ 소소한 IT > ORACLE' 카테고리의 다른 글
[Oracle] 변환형 함수 정리 : TO_CHAR, TO_NUMBER,TO_DATE (0) | 2014.09.04 |
---|---|
오라클 시퀀스 사용법(시퀀스 생성 및 수정, 삭제) (0) | 2014.07.22 |
오라클 계층쿼리 두번째!! CONNECT BY PRIOR (2) | 2014.07.21 |
오라클 계층구조 START WITH, CONNECT BY (0) | 2014.07.21 |
Oracle 명령어 (0) | 2014.07.21 |