.

141103_데이터베이스보안_TDE(Transparent Data Encryption)

by 담배맛구마

0. TDE(Transparent Data Encrypteion) 특징



1. 데이터베이스 레벨에서 자동으로 암복호화 방식을 수행한다.


2. 디스크에서 쓰는 과정에서 암호화하고, 사용자가 읽기를 시도할 때 복호화 한다.


1. Column Level암호화




MASTER Key가 TDE Table의 Key들을 암호화/복호화하고

TDE Table Key들이 Table의 Column을 암호화/복호화 한다.



1) Create Master Key


전자지갑(Software Wallet)이나 HSM(Hardware Security Module) 방식으로 구현한다.


1-1) 전자지갑 만들기

Oracle을 설치한 경로에

<%설치경로%>\app\<%계정명%>\product\11.2.0\dbhome_1\NETWORK\ADMIN에 가면

sqlnet.ora라는 File이 있다.


이 파일이 전자지갑 생성에 대한 설정파일인 것 같다.


이 파일에다가 전자 지갑의 생성 위치를

<%설치경로%>\app\<%계정명%>\admin\orcl\ 으로 지정해주자.


다음과 같이 sqlnet.ora에 추가해준다.


ENCRYPTION_WALLET_LOCATION=

(SOURCE=

(METHOD=FILE)

(METHOD_DATA=

(DIRECTORY=<%설치경로%>\app\<%계정명%>\admin\orcl)

)

)


그리고 SYS로 접속해서 전자 지갑을 추가해준다.


sqlplus.exe sys as sysdba

ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY ORATDE;



2) Aplly


그리고 HR의 employees 테이블의 salary column을 암호화 해주자



현재 시스템에 암호화된 Column 리스트가 있는 DBA_ENCRYPTED_COLUMNS를 조회해보자.



3) Q


3-1) 암호화 알고리즘에는 무엇이 있는가?

em으로 들어가서 보면 AES 128/192/256과 3DES 168을 지원한다.


3-2) 인덱스 사용 여부 - SALT vs NO_SALT



※) 전자지갑 OPEN 하기


인스턴스를 다시 시작하다보면 전자 지갑상태가 CLOSED가 되는 경우가 있다.



alter system set wallet open identified by <% 전자지갑 PW(난 ORATDE)%>;



2. Tablespace Level 암호화



0) Tablespace ???




1) 특징


- 민감한 Column 데이터가 많은 경우에 사용한다.

- 기존에 사용중인 Tablespace를 암호화할 수 없다.

-- 기존에 사용중에 암호화를 할 수 있게된다면 한쪽에선 암호화하고 한쪽에선 입력하는 현상이 벌어지기에..



2) 방법


2-1) 암호화된 테이블 스페이스를 생성한다.

CREATE TABLESPACE "ENCRYPTED_TS"     DATAFILE '<%Oracle 설치경로%>\ORADATA\ORCL\encrypted_ts01' SIZE 100M     DEFAULT STORAGE(ENCRYPT)     ENCRYPTION USING 'AES192';


2-2) 주요 Table을 2-1)에서 생성한 Tablespace로 이전한다.

예를들어. hr 소유 부서(departments) 테이블을 암호화된 테이블스페이스로 이전한다.

alter table hr.departments MOVE TABLESPACE encrypted_ts;


2-3) 이전한 테이블을 조회 혹은 조작한다.


테이블에 설정된 제약조건과 인덱스 여부를 확인한다.


3) Q


3-1) 인덱스가 생성된 Column에 암호화를 적용할 수 있는가?

sqlplus system HR 소유 부서(DEPARTMENTS) 부서이름(DEPARTMENT_NAME) 칼럼에 인덱스를 생성하자.     CREATE INDEX hr.dept_name_ix ON hr.departments (department_name); 이 칼럼에 암호화를 적용해 

ALTER TABLE hr.departments MODIFY ( department_name ENCRYPT);

ORA-28338: 열은 salt를 사용하여 동시에 인덱스화 및 암호화될 수 없습니다.


그래서

ALTER TABLE hr.departments MODIFY ( department_name ENCRYPT NO SALT);



3-2) 특정 사용자 소유의 테이블 전체를 암호화 Tablespace로 이전할 수 있는가?


i) Enterprise Manager를 이용하는 방법.


ii) 구글링해서 찾은 방법(데이터 사전을 이용)


SELECT 'ALTER TABLE "'||owner||'"."'||table_name||'" MOVE TABLESPACE encrypted_ts;'

AS COMMAND

FROM DBA_TABLES

WHERE OWNER = 'OE';




출력된 내용들을 긁어서 실행해주면 된다.




3-3) 암호화 테이블을 암호화된 상태로 다른 Oracle 데이터베이스에 이전(Migration)


Migration

Oracle 10g/11g스키마 ------------------->Oracle 12g스키마


방법 - Data Pump Utility

목표 - Data Pump를 이용해서 암호화된 데이터를 암호화된 상태로 Dump File을 생성한다.

실습


i) 암호화된 테이블을 선택한다.(oe.customers)


ii) Oracle Data Pump 기능을 이용해서 암호화된 테이블 Dump File에 담아둔다.

이 때 생성되는 Dump File은 암호화 된다.


C:\> expdp help=y



사전작업

ii-1) Directory Object 생성

sqlplus system

sql> CREATE DIRECTORY dmpdir as 'D:\app\......\admin\orcl\dpdump';


ii-2) OE에 Directory를 읽고 쓰고할 권한을 준다.

sqlplus system

sql> GRANT WRITE,READ ON DIRECTORY dmpdir TO oe;


iii) Export Data Pump 실행

C:\> expdp userid=oe directory=dmpdir dumpfile=cust.dmp tables=customers


ORA-39173 암호화된 데이터가 덤프 파일 집합에 암호화되지 않은 상태로 저장되었습니다.


iv) Export Data Pump 실행 2

C:\>expdp userid=oe directory=dmpdir dumpfile=cust_c.dmp tables=customers encryption_password=password


이렇게 encryption_password 옵션을 추가해준다.



v) Import Data Pump 실행해서 Import한다.


impdp에서도 encryption_password 옵션이 있는데 iv)에서와 동일한 값을 써주면된다.



우선은 기존에 만들어져있던 oe의 customers를 삭제해주어야한다.


C:\>impdp userid=oe directory=dmpdir dumpfile=cust_c.dmp tables=customers encryption_password=password





반응형

블로그의 정보

정윤상이다.

담배맛구마

활동하기