DBDBDEEP

이번에 DB 암호화를 진행해야 하는 일정이 생겨 이참에 DB 암호화에 대해 정리해보고자 합니다.


DB암호화 방법에는 매우 여러가지 방법이있으나 사용하고 있는DB는 oracle 11g인관계로 11g 기준으로 작성해봅니다.


암호화를 하기전에는 당연히 암호화 테이블에대해 선정이 필요합니다.

크게 아래와 같은 절차로 암호화를 진행합니다.


1. 암호화 테이블 선정

2. Wallet key 파일생성,암호설정

3. 선정된 테이블 암호화 tablespace로 move

4. 암호화 테이블의 인덱스 암호화 tablespace로 move

5. LOB 인덱스 이동 (Lob index restore)


이제 본격적으로 작업전 시스템의 비정상 object목록을 정리합니다.

select count(*) from dba_indexes where status <> 'VALID';

select count(*) from dba_objects where status <> 'VALID'; 

(위와 같이 미리 비정상 object들을 알아두는 이유는 작업후에 이상유무를 판단하기위함입니다.)


이후 아래와같이 WALLET Key경로와 파일을 생성하여줍니다.

$TNS_NAME 경로로 이동하여 sqlnet.ora 파일에 아래를 추가합니다.


 

1. sqlnet.ora 수정

###############################################################

#

# This file is automatically generated by AutoConfig.  It will be read and

# overwritten.  If you were instructed to edit this file, or if you are not

# able to use the settings created by AutoConfig, refer to Metalink Note

# 387859.1 for assistance.

#

#$Header: NetServiceHandler.java 120.19.12010000.6 2010/03/09 08:11:36 jmajumde ship $

#

###############################################################


NAMES.DIRECTORY_PATH=(TNSNAMES, ONAMES, HOSTNAME)

SQLNET.EXPIRE_TIME= 10

SQLNET.INBOUND_CONNECT_TIMEOUT =60

DIAG_ADR_ENABLED=ON

ADR_BASE=/APP/oracle/oratest/db/tech_st/11.2.0/admin/ORATEST_ebs

SEC_USER_AUDIT_ACTION_BANNER = /~~~~~~~/appsutil/template/txkDBSecUserAuditActionBanner.txt

#아래를추가

ENCRYPTION_WALLET_LOCATION=

(SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY= /oracle/oratest/WALLET)))


IFILE=/oracle/oratest/db/tech_st/11.2.0/network/admin/ORATEST_ebs/sqlnet_ifile.ora 



2. /oracle/oratest/WALLET 경로 생성 후 masterkey 생성

 SQL> alter system set encryption key identified by " test!@#"";

System altered.


3. 이후 Database 재기동시 mount단계에서 wallet open해준다. 


SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> 

SQL> startup mount;

ORACLE instance started.


Total System Global Area 5344731136 bytes

Fixed Size                  2230912 bytes

Variable Size             553649536 bytes

Database Buffers         4764729344 bytes

Redo Buffers               24121344 bytes

Database mounted.

SQL> alter system set encryption wallet open identified by " test!@#"";


System altered.


SQL> alter database open;


Database altered.




4. 암호화 테이블 스페이스 생성 

(암호화 알고리즘에는 여러가지가 있으나 AES128로 선정하였습니다.)

CREATE TABLESPACE ENC_TDE_DATA DATAFILE
'/oracle/data/ENC_TDE_DATA.dbf' SIZE 3000M AUTOEXTEND ON

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

ENCRYPTION USING 'AES128' DEFAULT STORAGE(ENCRYPT);


CREATE TABLESPACE ENC_TDE_IDX DATAFILE 

'/oracle/data/ENC_TDE_IDX.dbf' SIZE 3000M AUTOEXTEND ON

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

ENCRYPTION USING 'AES128' DEFAULT STORAGE(ENCRYPT);



5. 암호화 대상 테이블 MOVE 

select 'alter table '||a.owner||'.'||a.table_name||' move tablespace 암호화테이블스페이스  ;'

from   dba_tables  a 

where table_name in 

(

'테이블명'

)

alter table Owner.테이블명 move tablespace ENC_TDE_DATA  ; 


6. 암호화 대상테이블의 인덱스 rebuild

select 'alter index '||a.owner||'.'||a.index_name||' rebuild tablespace 암호화테이블스페이스_인덱스  parallel 1;' 

from   dba_indexes a

where table_name in 

(

'테이블명'

)

 alter index Owner.테이블명 rebuild tablespace  ENC_TDE_IDX parallel 1;



7. 시스템 재기동 ORA-28365 발생하는경우 아래를 수행


 ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "test!@#”;



8. 이상유무확인.


9. /oracle/oratest/에 위치한 wallet file (ewallet.p12) 파일은 안전한곳에 따로 보관해둔다.

  만일 ewallet.p12 파일을 유실하여 재생성할경우 데이터 유실되며 장애로 이어지기때문에 따로 보관해두어 언제든지 restore할수 있도록한다.

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band